├── .gitattributes ├── .github ├── CODEOWNERS ├── settings.yml ├── weekly-digest.yml └── workflows │ ├── new_release.yml │ └── release_notifications.yml ├── .gitignore ├── .yarn └── releases │ └── yarn-3.6.4.cjs ├── .yarnrc.yml ├── AUTHORS ├── LICENSE ├── README.md ├── README_MAINTAINERS.md ├── RELEASES ├── USAGE.md ├── docs ├── _index.html └── index.html ├── mise.toml ├── package-lock.json ├── package.json ├── prettier.config.cjs └── scripts ├── compare-releases.js ├── generate-table.js ├── multiple-releases-diffs.sh ├── multiple-releases.sh ├── new-release.sh ├── notify-new-release.js ├── prune-diffs.js └── remove-something-from-diffs.js /.gitattributes: -------------------------------------------------------------------------------- 1 | /.gitignore diff=nodiff 2 | 3 | # specific for windows script files 4 | *.bat text eol=crlf 5 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | .github/settings.yml @pvinis 2 | * @pvinis 3 | * @kelset 4 | -------------------------------------------------------------------------------- /.github/settings.yml: -------------------------------------------------------------------------------- 1 | repository: 2 | name: rn-diff-purge 3 | description: "Easier React Native upgrades by clearly exposing changes from a version to another. :rocket: And what better way than to purge, init, then diff? Spoiler: there's no better way. 😎" 4 | homepage: https://react-native-community.github.io/upgrade-helper 5 | topics: react-native, upgrade, purge, rn-diff, rn-diff-purge, upgrade-helper 6 | 7 | has_wiki: false 8 | -------------------------------------------------------------------------------- /.github/weekly-digest.yml: -------------------------------------------------------------------------------- 1 | # Configuration for weekly-digest - https://github.com/apps/weekly-digest 2 | publishDay: sun 3 | canPublishIssues: true 4 | canPublishPullRequests: true 5 | canPublishContributors: true 6 | canPublishStargazers: true 7 | canPublishCommits: true 8 | -------------------------------------------------------------------------------- /.github/workflows/new_release.yml: -------------------------------------------------------------------------------- 1 | name: Run new-release script 2 | 3 | on: 4 | workflow_dispatch: 5 | repository_dispatch: 6 | types: [publish] 7 | 8 | jobs: 9 | generate_diffs: 10 | runs-on: macos-latest 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@v4 14 | - uses: jdx/mise-action@v2 15 | - run: npm install 16 | 17 | - name: Run new-release script 18 | run: ./scripts/new-release.sh ${{ github.event.client_payload.version }} 19 | -------------------------------------------------------------------------------- /.github/workflows/release_notifications.yml: -------------------------------------------------------------------------------- 1 | name: Send notifications when a new release is published 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - master 8 | 9 | env: 10 | SPECIAL_GITHUB_TOKEN: ${{ secrets.SPECIAL_GITHUB_TOKEN }} 11 | 12 | jobs: 13 | release_notifications: 14 | runs-on: ubuntu-latest 15 | steps: 16 | - uses: actions/checkout@v4 17 | - uses: jdx/mise-action@v2 18 | - run: npm install 19 | 20 | - name: Notify upgrade-support of a new release 21 | run: ./scripts/notify-new-release.js 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # project 2 | RnDiffApp/ 3 | 4 | # macOS 5 | .DS_Store 6 | 7 | # node 8 | node_modules/ 9 | 10 | # git worktree 11 | wt-app 12 | wt-diffs 13 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | nodeLinker: node-modules 2 | 3 | yarnPath: .yarn/releases/yarn-3.6.4.cjs 4 | -------------------------------------------------------------------------------- /AUTHORS: -------------------------------------------------------------------------------- 1 | Pavlos Vinieratos 2 | Nicolas Cuillery 3 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2019 Pavlos Vinieratos 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # RN diff PURGE 2 | 3 | This repository exposes an untouched React Native app generated with the CLI 4 | `npx @react-native-community/cli init RnDiffApp`. Each new React Native release causes a new project to be created, removing the old one, and getting a diff between them. This way, the diff is always clean, always in sync with the changes of the init template. 5 | 6 | A dedicated branch per release makes changes very easy 7 | to watch. For example: 8 | 9 | - https://github.com/react-native-community/rn-diff-purge/compare/release/0.28.0..release/0.29.0 10 | (Change in Android template) 11 | - https://github.com/react-native-community/rn-diff-purge/compare/release/0.29.0..release/0.29.2 12 | (no change) 13 | - https://github.com/react-native-community/rn-diff-purge/compare/release/0.30.0..release/0.31.0 14 | (minor change in `.flowconfig` ) 15 | - https://github.com/react-native-community/rn-diff-purge/compare/release/0.30.0..release/0.31.0 16 | (minor change in `.flowconfig` ) 17 | 18 | See table below for the complete list. 19 | 20 | For some more info about the benefits of this repo's way versus the default way and rn-diff's way, read some of the conversation around [here](https://github.com/react-native-community/discussions-and-proposals/issues/68#issuecomment-452227478). 21 | 22 | Please :star: this repository if I helped you, and if you upgraded successfully because of `purge`, [buy me a pizza](https://www.buymeacoffee.com/pvinis) :pizza: 23 | 24 | ## Find the diff you need 25 | 26 | https://react-native-community.github.io/upgrade-helper/ 27 | 28 | ## Help us 29 | 30 | Help us make [this](https://react-native-community.github.io/rn-diff-purge) full table pretty and more useful. 31 | 32 | Probably having some nice alternating row color, having the leftest column stay on top and always visible, and having a nice width for the content of each cell to fit in one line would be some ideas, but you are welcome to try other things! 33 | 34 | ## Diff table (full table [HERE](https://react-native-community.github.io/rn-diff-purge/)) 35 | 36 | | From->To | D | I | F | F | S | | = | = | | F | U | N | 37 | | ----------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | --------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------- | - | 38 | | 0.80.0-rc.4 | X | - | - | - | - | - | - | - | - | - | - | - | 39 | | 0.80.0-rc.3 | [->0.80.0-rc.4](https://github.com/react-native-community/rn-diff-purge/compare/release/0.80.0-rc.3..release/0.80.0-rc.4) | X | - | - | - | - | - | - | - | - | - | - | 40 | | 0.80.0-rc.2 | [->0.80.0-rc.4](https://github.com/react-native-community/rn-diff-purge/compare/release/0.80.0-rc.2..release/0.80.0-rc.4) | [->0.80.0-rc.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.80.0-rc.2..release/0.80.0-rc.3) | X | - | - | - | - | - | - | - | - | - | 41 | | 0.80.0-rc.1 | [->0.80.0-rc.4](https://github.com/react-native-community/rn-diff-purge/compare/release/0.80.0-rc.1..release/0.80.0-rc.4) | [->0.80.0-rc.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.80.0-rc.1..release/0.80.0-rc.3) | [->0.80.0-rc.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.80.0-rc.1..release/0.80.0-rc.2) | X | - | - | - | - | - | - | - | - | 42 | | 0.80.0-rc.0 | [->0.80.0-rc.4](https://github.com/react-native-community/rn-diff-purge/compare/release/0.80.0-rc.0..release/0.80.0-rc.4) | [->0.80.0-rc.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.80.0-rc.0..release/0.80.0-rc.3) | [->0.80.0-rc.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.80.0-rc.0..release/0.80.0-rc.2) | [->0.80.0-rc.1](https://github.com/react-native-community/rn-diff-purge/compare/release/0.80.0-rc.0..release/0.80.0-rc.1) | X | - | - | - | - | - | - | - | 43 | | 0.79.3 | [->0.80.0-rc.4](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.3..release/0.80.0-rc.4) | [->0.80.0-rc.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.3..release/0.80.0-rc.3) | [->0.80.0-rc.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.3..release/0.80.0-rc.2) | [->0.80.0-rc.1](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.3..release/0.80.0-rc.1) | [->0.80.0-rc.0](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.3..release/0.80.0-rc.0) | X | - | - | - | - | - | - | 44 | | 0.79.2 | [->0.80.0-rc.4](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.2..release/0.80.0-rc.4) | [->0.80.0-rc.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.2..release/0.80.0-rc.3) | [->0.80.0-rc.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.2..release/0.80.0-rc.2) | [->0.80.0-rc.1](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.2..release/0.80.0-rc.1) | [->0.80.0-rc.0](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.2..release/0.80.0-rc.0) | [->0.79.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.2..release/0.79.3) | X | - | - | - | - | - | 45 | | 0.79.1 | [->0.80.0-rc.4](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.1..release/0.80.0-rc.4) | [->0.80.0-rc.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.1..release/0.80.0-rc.3) | [->0.80.0-rc.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.1..release/0.80.0-rc.2) | [->0.80.0-rc.1](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.1..release/0.80.0-rc.1) | [->0.80.0-rc.0](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.1..release/0.80.0-rc.0) | [->0.79.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.1..release/0.79.3) | [->0.79.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.1..release/0.79.2) | X | - | - | - | - | 46 | | 0.79.0 | [->0.80.0-rc.4](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0..release/0.80.0-rc.4) | [->0.80.0-rc.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0..release/0.80.0-rc.3) | [->0.80.0-rc.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0..release/0.80.0-rc.2) | [->0.80.0-rc.1](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0..release/0.80.0-rc.1) | [->0.80.0-rc.0](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0..release/0.80.0-rc.0) | [->0.79.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0..release/0.79.3) | [->0.79.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0..release/0.79.2) | [->0.79.1](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0..release/0.79.1) | X | - | - | - | 47 | | 0.79.0-rc.4 | [->0.80.0-rc.4](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.4..release/0.80.0-rc.4) | [->0.80.0-rc.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.4..release/0.80.0-rc.3) | [->0.80.0-rc.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.4..release/0.80.0-rc.2) | [->0.80.0-rc.1](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.4..release/0.80.0-rc.1) | [->0.80.0-rc.0](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.4..release/0.80.0-rc.0) | [->0.79.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.4..release/0.79.3) | [->0.79.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.4..release/0.79.2) | [->0.79.1](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.4..release/0.79.1) | [->0.79.0](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.4..release/0.79.0) | X | - | - | 48 | | 0.79.0-rc.3 | [->0.80.0-rc.4](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.3..release/0.80.0-rc.4) | [->0.80.0-rc.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.3..release/0.80.0-rc.3) | [->0.80.0-rc.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.3..release/0.80.0-rc.2) | [->0.80.0-rc.1](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.3..release/0.80.0-rc.1) | [->0.80.0-rc.0](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.3..release/0.80.0-rc.0) | [->0.79.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.3..release/0.79.3) | [->0.79.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.3..release/0.79.2) | [->0.79.1](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.3..release/0.79.1) | [->0.79.0](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.3..release/0.79.0) | [->0.79.0-rc.4](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.3..release/0.79.0-rc.4) | X | - | 49 | | 0.79.0-rc.2 | [->0.80.0-rc.4](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.2..release/0.80.0-rc.4) | [->0.80.0-rc.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.2..release/0.80.0-rc.3) | [->0.80.0-rc.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.2..release/0.80.0-rc.2) | [->0.80.0-rc.1](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.2..release/0.80.0-rc.1) | [->0.80.0-rc.0](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.2..release/0.80.0-rc.0) | [->0.79.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.2..release/0.79.3) | [->0.79.2](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.2..release/0.79.2) | [->0.79.1](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.2..release/0.79.1) | [->0.79.0](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.2..release/0.79.0) | [->0.79.0-rc.4](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.2..release/0.79.0-rc.4) | [->0.79.0-rc.3](https://github.com/react-native-community/rn-diff-purge/compare/release/0.79.0-rc.2..release/0.79.0-rc.3) | X | 50 | 51 | ## To see the full table containing all releases click [HERE](https://react-native-community.github.io/rn-diff-purge/) 52 | 53 | ## Notes 54 | 55 | ### History of this repo 56 | 57 | Once upon a time there was react-native. Lots of people used it and loved it. And there were often updates. As many as one per 2 weeks. People loved the new releases with all the new cool APIs and components and bugfixes. But how did they upgrade? 58 | 59 | Many people tried to upgrade and automate the process, and many failed. One succeded. 60 | 61 | Nicolas Cuillery ([github](https://github.com/ncuillery), [twitter](https://twitter.com/ncuillery)) made a great script and kept it in the [rn-diff](https://github.com/ncuillery/rn-diff) repo. It basically consisted of a `project` branch, which had a react-native project initialized and upgraded using `react-native-git-upgrade`, which he also created. That worked great until it didn't. Nicolas added a few people including me to help with the repo, and we did update it, adding new upgrade diffs. At some point, the upgrades didn't work anymore, the `react-native-git-upgrade` way got too hard to maintain and make work. 62 | 63 | I saw that it was easier to just remove the old project and `react-native init` a new one, and then generate the diff. This way I could see the changes in the template as well, helping my projects follow along with the evolution of the RN project templates. That way, an upgrade was never a big undertaking. I forked [rn-diff](https://github.com/ncuillery/rn-diff) and created [rn-diff-purge](https://github.com/react-native-community/rn-diff-purge). The script changed, to remove and recreate the project. This helped me and others by not having to wait for a diff to be generated, they could generate it themselves! 64 | 65 | Lastly, the [rn-diff-purge](https://github.com/react-native-community/rn-diff-purge) repo got transfered to the react-native-community organization, in the repo with the same name, [rn-diff-purge](https://github.com/react-native-community/rn-diff-purge). Since then I have made the new way to generate and keep track of releases, made a table that allows for releases to always be diff-able no matter the order. I have kept the [old master](https://github.com/react-native-community/rn-diff-purge/tree/old/master) branch and [old project](https://github.com/react-native-community/rn-diff-purge/tree/old/project) branch for maintaining history, but I have created the new [master](https://github.com/react-native-community/rn-diff-purge/tree/master) branch and the [app-base](https://github.com/react-native-community/rn-diff-purge/tree/app-base) that all releases branch off from, and each release gets its own branch, for example [release/0.58.6](https://github.com/react-native-community/rn-diff-purge/tree/release/0.58.6). We are already working with [react-native-cli](https://github.com/react-native-community/react-native-cli) to help people upgrade as easily as possible, and we will continue to do our best. 66 | 67 | Many thanks to you for using this repo, many thanks to Nicolas for starting this, and many thanks to the React Native Core team and React Native Contributors team for helping make this repo and RN project upgrading awesome. 68 | 69 | ## Why this repository? 70 | 71 | `react-native-git-upgrade` is painful. A simple diff by recreating the project is a much much simpler way to get a diff on every new React Native release. 72 | 73 | ## FAQ 74 | 75 | ### Why starting from 0.22.0? 76 | 77 | Because I couldn't run `react-native init` with an older version than that without the cli throwing errors. I hope people are not using still 0.22.0 anymore (Jan 2019). 78 | 79 | ### How did you do this? 80 | 81 | I made a [script](https://github.com/react-native-community/rn-diff-purge/blob/master/scripts/new-release.sh). Then I ran a [helper script](https://github.com/react-native-community/rn-diff-purge/blob/master/scripts/new-release.sh) to make the rest of the versions. 82 | Now I just ran the `scripts/new-release.sh` script manually when I get the email that there is a new release published on npm, and I am making a bot to do that for me. 83 | 84 | ### How can I contribute? 85 | 86 | Unfortunately it's a bit weird. The `master` branch is the keeping-track one. Then there is the `app-base` branch that is the starting point of every other branch. Every react-native release gets its own branch. So having PRs that change master is great, but for adding a new release, a new branch has to be created, and that is only possible by the contributors of this repo. 87 | 88 | Nevertheless, when a new release of React Native is released, we'll have to be prompt to provide 89 | the new diff. Having more collaborators on this project will help in the future. If you're interested, please open an issue to discuss. 90 | 91 | One thing that could get some love is the `docs/index.html` file, which produces a very basic html table. I would like to make it prettier and easier to navigation, but my css-fu is level 0. I would love to see what you can do to make it so! <3 92 | 93 | ### Down here! 94 | 95 | If you have: 96 | 97 | - questions 98 | - suggestions 99 | - ideas to make this even better 100 | - the urge to just to say hello to me :) 101 | 102 | feel free to make an issue or contact me. I'm pretty easy to find! 103 | -------------------------------------------------------------------------------- /README_MAINTAINERS.md: -------------------------------------------------------------------------------- 1 | # Instructions for diff generation on new release 2 | 3 | ###### (assuming you have push permissions) 4 | 5 | When a new release of `react-native` is out on [npm](https://www.npmjs.com/package/react-native), do the following: 6 | 7 | - Clone the repo, or pull the latest `master` if you have it already cloned. 8 | 9 | - Execute the main script. 10 | 11 | ```sh 12 | ./scripts/new-release.sh 13 | ``` 14 | 15 | So for example, if the new release is `0.79.2`, just run: 16 | 17 | ```sh 18 | ./scripts/new-release.sh 0.79.2 19 | ``` 20 | 21 | ### Extra credit 22 | 23 | - Checkout `old/master` and pull. 24 | - Run `./scripts/new-version.sh `. 25 | 26 | This is because we still maintain the old way of rn-diff, for people with the old version of `react-native-cli`. So if you do the extra credits, first of all you are a good person. Second, remember to tell aaaaall your friends, to uninstall `react-native-cli` and install the latest `@react-native-community/cli`. 27 | 28 | Thanks for helping to make purge more complete :D 29 | -------------------------------------------------------------------------------- /RELEASES: -------------------------------------------------------------------------------- 1 | 0.80.0-rc.4 2 | 0.80.0-rc.3 3 | 0.80.0-rc.2 4 | 0.80.0-rc.1 5 | 0.80.0-rc.0 6 | 0.79.3 7 | 0.79.2 8 | 0.79.1 9 | 0.79.0 10 | 0.79.0-rc.4 11 | 0.79.0-rc.3 12 | 0.79.0-rc.2 13 | 0.79.0-rc.1 14 | 0.79.0-rc.0 15 | 0.78.2 16 | 0.78.1 17 | 0.78.0 18 | 0.78.0-rc.5 19 | 0.78.0-rc.4 20 | 0.78.0-rc.3 21 | 0.78.0-rc.2 22 | 0.78.0-rc.1 23 | 0.78.0-rc.0 24 | 0.77.2 25 | 0.77.1 26 | 0.77.0 27 | 0.77.0-rc.7 28 | 0.77.0-rc.6 29 | 0.77.0-rc.5 30 | 0.77.0-rc.4 31 | 0.77.0-rc.3 32 | 0.77.0-rc.2 33 | 0.77.0-rc.1 34 | 0.77.0-rc.0 35 | 0.76.9 36 | 0.76.8 37 | 0.76.7 38 | 0.76.6 39 | 0.76.5 40 | 0.76.4 41 | 0.76.3 42 | 0.76.2 43 | 0.76.1 44 | 0.76.0 45 | 0.76.0-rc.6 46 | 0.76.0-rc.5 47 | 0.76.0-rc.4 48 | 0.76.0-rc.3 49 | 0.76.0-rc.2 50 | 0.76.0-rc.1 51 | 0.76.0-rc.0 52 | 0.75.5 53 | 0.75.4 54 | 0.75.3 55 | 0.75.2 56 | 0.75.1 57 | 0.75.0-rc.7 58 | 0.75.0-rc.6 59 | 0.75.0-rc.5 60 | 0.75.0-rc.4 61 | 0.75.0-rc.3 62 | 0.75.0-rc.2 63 | 0.74.7 64 | 0.74.6 65 | 0.74.5 66 | 0.74.4 67 | 0.74.3 68 | 0.74.2 69 | 0.74.1 70 | 0.74.1-rc.0 71 | 0.74.0 72 | 0.74.0-rc.9 73 | 0.74.0-rc.8 74 | 0.74.0-rc.7 75 | 0.74.0-rc.6 76 | 0.74.0-rc.5 77 | 0.74.0-rc.4 78 | 0.74.0-rc.3 79 | 0.74.0-rc.2 80 | 0.74.0-rc.0 81 | 0.73.11 82 | 0.73.10 83 | 0.73.9 84 | 0.73.8 85 | 0.73.7 86 | 0.73.6 87 | 0.73.5 88 | 0.73.4 89 | 0.73.3 90 | 0.73.2 91 | 0.73.1 92 | 0.73.0 93 | 0.73.0-rc.8 94 | 0.73.0-rc.7 95 | 0.73.0-rc.6 96 | 0.73.0-rc.5 97 | 0.73.0-rc.4 98 | 0.73.0-rc.3 99 | 0.73.0-rc.2 100 | 0.73.0-rc.1 101 | 0.72.17 102 | 0.72.15 103 | 0.72.14 104 | 0.72.13 105 | 0.72.12 106 | 0.72.11 107 | 0.72.10 108 | 0.72.9 109 | 0.72.8 110 | 0.72.7 111 | 0.72.6 112 | 0.72.5 113 | 0.72.4 114 | 0.72.3 115 | 0.72.2 116 | 0.72.1 117 | 0.72.0 118 | 0.72.0-rc.6 119 | 0.72.0-rc.5 120 | 0.72.0-rc.4 121 | 0.72.0-rc.3 122 | 0.72.0-rc.2 123 | 0.72.0-rc.1 124 | 0.72.0-rc.0 125 | 0.71.19 126 | 0.71.18 127 | 0.71.17 128 | 0.71.16 129 | 0.71.15 130 | 0.71.14 131 | 0.71.13 132 | 0.71.12 133 | 0.71.11 134 | 0.71.10 135 | 0.71.9 136 | 0.71.8 137 | 0.71.7 138 | 0.71.6 139 | 0.71.5 140 | 0.71.4 141 | 0.71.3 142 | 0.71.2 143 | 0.71.1 144 | 0.71.0 145 | 0.71.0-rc.6 146 | 0.71.0-rc.5 147 | 0.71.0-rc.4 148 | 0.71.0-rc.3 149 | 0.71.0-rc.2 150 | 0.71.0-rc.1 151 | 0.71.0-rc.0 152 | 0.70.15 153 | 0.70.14 154 | 0.70.13 155 | 0.70.12 156 | 0.70.11 157 | 0.70.10 158 | 0.70.9 159 | 0.70.8 160 | 0.70.7 161 | 0.70.6 162 | 0.70.5 163 | 0.70.4 164 | 0.70.3 165 | 0.70.2 166 | 0.70.1 167 | 0.70.0 168 | 0.70.0-rc.4 169 | 0.70.0-rc.3 170 | 0.70.0-rc.2 171 | 0.70.0-rc.1 172 | 0.70.0-rc.0 173 | 0.69.12 174 | 0.69.11 175 | 0.69.10 176 | 0.69.9 177 | 0.69.8 178 | 0.69.7 179 | 0.69.6 180 | 0.69.5 181 | 0.69.4 182 | 0.69.3 183 | 0.69.2 184 | 0.69.1 185 | 0.69.0 186 | 0.69.0-rc.6 187 | 0.69.0-rc.5 188 | 0.69.0-rc.4 189 | 0.69.0-rc.3 190 | 0.69.0-rc.2 191 | 0.69.0-rc.1 192 | 0.69.0-rc.0 193 | 0.68.7 194 | 0.68.6 195 | 0.68.5 196 | 0.68.4 197 | 0.68.3 198 | 0.68.2 199 | 0.68.1 200 | 0.68.0 201 | 0.68.0-rc.4 202 | 0.68.0-rc.3 203 | 0.68.0-rc.2 204 | 0.68.0-rc.1 205 | 0.68.0-rc.0 206 | 0.67.5 207 | 0.67.4 208 | 0.67.3 209 | 0.67.2 210 | 0.67.1 211 | 0.67.0 212 | 0.67.0-rc.6 213 | 0.67.0-rc.5 214 | 0.67.0-rc.4 215 | 0.67.0-rc.3 216 | 0.67.0-rc.2 217 | 0.67.0-rc.1 218 | 0.67.0-rc.0 219 | 0.66.5 220 | 0.66.4 221 | 0.66.3 222 | 0.66.2 223 | 0.66.1 224 | 0.66.0 225 | 0.66.0-rc.4 226 | 0.66.0-rc.3 227 | 0.66.0-rc.2 228 | 0.66.0-rc.1 229 | 0.66.0-rc.0 230 | 0.65.3 231 | 0.65.2 232 | 0.65.1 233 | 0.65.0 234 | -------------------------------------------------------------------------------- /USAGE.md: -------------------------------------------------------------------------------- 1 | # Using rn-diff-purge 2 | 3 | The git patches can be used as a replacement of `react-native-git-upgrade`. The procedure is 4 | straightforward and more trusted than using the upgrade command. 5 | 6 | ## Recommended method 7 | 8 | #### 1 Check the diff 9 | Check the diff of your current version and the release you want to upgrade to. 10 | 11 | #### 2 Manually do the changes 12 | Do the changes from the diff in your project. 13 | They are usually no more than 10 lines, so it's pretty quick and easy. 14 | If it's more than that, you could try the alternative method below. 15 | :warning: In any case, make sure you pay attention to the changes made. It's always imporant to know what an upgrade actually changed. 16 | 17 | ## Alternative method (using patch) 18 | 19 | #### 1 Download the git patch 20 | 21 | Download the patch for your version, for example: 22 | 23 | ```shell 24 | curl https://github.com/react-native-community/rn-diff-purge/compare/release/0.29.0...release/0.30.0.diff > upgrade-rn.patch 25 | ``` 26 | 27 | #### 2 Prepare the patch 28 | 29 | The patch is made for the RnDiffApp located in the *RnDiffApp* folder of this repository. 30 | To use it in your own repository, some changes are needed. 31 | 32 | Don't worry about the root folder *RnDiffApp*, it can be ignored with the option `-p 2` 33 | (see https://git-scm.com/docs/git-apply) 34 | 35 | Then, some files include the name of the app in their path: 36 | 37 | - All files in the `ios` directory (example: `ios/RnDiffApp/AppDelegate.m`) 38 | - Some files in the `android` directory (example: 39 | `android/app/src/main/java/com/rndiffapp/MainActivity.java`) 40 | 41 | You have to edit the patch and replace all occurences of `ios/RnDiffApp` and `com/rndiffapp` 42 | by the name of your app. 43 | 44 | #### 3 Set up the 3-way merge 45 | 46 | By default in case of conflicts, the `git apply` command will fail and leave the files untouched. 47 | It could be interesting to fallback on a 3-way merge (option `--3way`) in order to resolve the 48 | conflicts with your favorite merge tool. 49 | 50 | To do this, git needs to know the blob referenced in the patch 51 | (line `index 4c88077..e49e881 100644` for example). So you have to add rn-diff as a remote 52 | repository and fetch it (see this [SO question](http://stackoverflow.com/questions/33577383/git-apply-3way-error-repository-lacks-the-necessary-blob-to-fall-back-on-3-way) 53 | for details). 54 | 55 | ```shell 56 | git remote add rn-diff-purge https://github.com/react-native-community/rn-diff-purge.git 57 | git fetch rn-diff-purge 58 | ``` 59 | 60 | #### 4 Run the apply command 61 | ```shell 62 | git apply upgrade-rn.patch --exclude=package.json -p 2 --3way 63 | ``` 64 | 65 | 66 | ### Wrap up 67 | 68 | ```shell 69 | # Download the patch 70 | curl https://github.com/react-native-community/rn-diff-purge/compare/release/0.29.0...release/0.30.0.diff > upgrade-rn.patch 71 | 72 | # Replace RnDiffApp occurences 73 | appNameCamelCase=MyApp 74 | appNameLowerCase=myapp 75 | sed -i "" "s-ios/RnDiffApp-ios/${appNameCamelCase}-" upgrade-rn.patch 76 | sed -i "" "s-java/com/rndiffapp-java/com/${appNameLowerCase}-" upgrade-rn.patch 77 | 78 | # Set up the 3-way merge 79 | git remote add rn-diff-purge https://github.com/react-native-community/rn-diff-purge.git 80 | git fetch rn-diff-purge 81 | 82 | # Run the apply command 83 | git apply upgrade-rn.patch --exclude=package.json -p 2 --3way 84 | ``` 85 | 86 | ### :warning: Known issues 87 | Sometimes there are new files that reference the project's name. Whenever there is a new file, make sure to check for this, and replace it with your project's name. 88 | -------------------------------------------------------------------------------- /docs/_index.html: -------------------------------------------------------------------------------- 1 | 52 | -------------------------------------------------------------------------------- /mise.toml: -------------------------------------------------------------------------------- 1 | [tools] 2 | node = "22" 3 | ruby = "3" 4 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rn-diff-purge", 3 | "version": "0.1.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "rn-diff-purge", 9 | "version": "0.1.0", 10 | "license": "ISC", 11 | "dependencies": { 12 | "get-stdin": "^9.0.0", 13 | "markdown-table": "^3.0.4", 14 | "markdown-to-html": "^0.0.13", 15 | "ramda": "^0.30.1", 16 | "semver": "^7.7.1" 17 | }, 18 | "devDependencies": { 19 | "octokit": "^4.1.1", 20 | "replace-in-file": "^8.3.0" 21 | } 22 | }, 23 | "node_modules/@isaacs/cliui": { 24 | "version": "8.0.2", 25 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 26 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 27 | "dev": true, 28 | "license": "ISC", 29 | "dependencies": { 30 | "string-width": "^5.1.2", 31 | "string-width-cjs": "npm:string-width@^4.2.0", 32 | "strip-ansi": "^7.0.1", 33 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 34 | "wrap-ansi": "^8.1.0", 35 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 36 | }, 37 | "engines": { 38 | "node": ">=12" 39 | } 40 | }, 41 | "node_modules/@isaacs/cliui/node_modules/ansi-regex": { 42 | "version": "6.1.0", 43 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.1.0.tgz", 44 | "integrity": "sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==", 45 | "dev": true, 46 | "license": "MIT", 47 | "engines": { 48 | "node": ">=12" 49 | }, 50 | "funding": { 51 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 52 | } 53 | }, 54 | "node_modules/@isaacs/cliui/node_modules/ansi-styles": { 55 | "version": "6.2.1", 56 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 57 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 58 | "dev": true, 59 | "license": "MIT", 60 | "engines": { 61 | "node": ">=12" 62 | }, 63 | "funding": { 64 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 65 | } 66 | }, 67 | "node_modules/@isaacs/cliui/node_modules/emoji-regex": { 68 | "version": "9.2.2", 69 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 70 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 71 | "dev": true, 72 | "license": "MIT" 73 | }, 74 | "node_modules/@isaacs/cliui/node_modules/string-width": { 75 | "version": "5.1.2", 76 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 77 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 78 | "dev": true, 79 | "license": "MIT", 80 | "dependencies": { 81 | "eastasianwidth": "^0.2.0", 82 | "emoji-regex": "^9.2.2", 83 | "strip-ansi": "^7.0.1" 84 | }, 85 | "engines": { 86 | "node": ">=12" 87 | }, 88 | "funding": { 89 | "url": "https://github.com/sponsors/sindresorhus" 90 | } 91 | }, 92 | "node_modules/@isaacs/cliui/node_modules/strip-ansi": { 93 | "version": "7.1.0", 94 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 95 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 96 | "dev": true, 97 | "license": "MIT", 98 | "dependencies": { 99 | "ansi-regex": "^6.0.1" 100 | }, 101 | "engines": { 102 | "node": ">=12" 103 | }, 104 | "funding": { 105 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 106 | } 107 | }, 108 | "node_modules/@isaacs/cliui/node_modules/wrap-ansi": { 109 | "version": "8.1.0", 110 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 111 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 112 | "dev": true, 113 | "license": "MIT", 114 | "dependencies": { 115 | "ansi-styles": "^6.1.0", 116 | "string-width": "^5.0.1", 117 | "strip-ansi": "^7.0.1" 118 | }, 119 | "engines": { 120 | "node": ">=12" 121 | }, 122 | "funding": { 123 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 124 | } 125 | }, 126 | "node_modules/@octokit/app": { 127 | "version": "15.1.3", 128 | "resolved": "https://registry.npmjs.org/@octokit/app/-/app-15.1.3.tgz", 129 | "integrity": "sha512-injaSv2CN8wZrhhnVky3HcQVEy4rRoIAm+OeCwNQzgQJn1OTglfT7RyMDaCbkiNWXDR0tkWLkWMv4duTTj765g==", 130 | "dev": true, 131 | "license": "MIT", 132 | "dependencies": { 133 | "@octokit/auth-app": "^7.1.4", 134 | "@octokit/auth-unauthenticated": "^6.1.1", 135 | "@octokit/core": "^6.1.3", 136 | "@octokit/oauth-app": "^7.1.5", 137 | "@octokit/plugin-paginate-rest": "^11.3.6", 138 | "@octokit/types": "^13.6.2", 139 | "@octokit/webhooks": "^13.5.1" 140 | }, 141 | "engines": { 142 | "node": ">= 18" 143 | } 144 | }, 145 | "node_modules/@octokit/auth-app": { 146 | "version": "7.1.4", 147 | "resolved": "https://registry.npmjs.org/@octokit/auth-app/-/auth-app-7.1.4.tgz", 148 | "integrity": "sha512-5F+3l/maq9JfWQ4bV28jT2G/K8eu9OJ317yzXPTGe4Kw+lKDhFaS4dQ3Ltmb6xImKxfCQdqDqMXODhc9YLipLw==", 149 | "dev": true, 150 | "license": "MIT", 151 | "dependencies": { 152 | "@octokit/auth-oauth-app": "^8.1.2", 153 | "@octokit/auth-oauth-user": "^5.1.2", 154 | "@octokit/request": "^9.1.4", 155 | "@octokit/request-error": "^6.1.6", 156 | "@octokit/types": "^13.6.2", 157 | "toad-cache": "^3.7.0", 158 | "universal-github-app-jwt": "^2.2.0", 159 | "universal-user-agent": "^7.0.0" 160 | }, 161 | "engines": { 162 | "node": ">= 18" 163 | } 164 | }, 165 | "node_modules/@octokit/auth-oauth-app": { 166 | "version": "8.1.2", 167 | "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-app/-/auth-oauth-app-8.1.2.tgz", 168 | "integrity": "sha512-3woNZgq5/S6RS+9ZTq+JdymxVr7E0s4EYxF20ugQvgX3pomdPUL5r/XdTY9wALoBM2eHVy4ettr5fKpatyTyHw==", 169 | "dev": true, 170 | "license": "MIT", 171 | "dependencies": { 172 | "@octokit/auth-oauth-device": "^7.1.2", 173 | "@octokit/auth-oauth-user": "^5.1.2", 174 | "@octokit/request": "^9.1.4", 175 | "@octokit/types": "^13.6.2", 176 | "universal-user-agent": "^7.0.0" 177 | }, 178 | "engines": { 179 | "node": ">= 18" 180 | } 181 | }, 182 | "node_modules/@octokit/auth-oauth-device": { 183 | "version": "7.1.2", 184 | "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-device/-/auth-oauth-device-7.1.2.tgz", 185 | "integrity": "sha512-gTOIzDeV36OhVfxCl69FmvJix7tJIiU6dlxuzLVAzle7fYfO8UDyddr9B+o4CFQVaMBLMGZ9ak2CWMYcGeZnPw==", 186 | "dev": true, 187 | "license": "MIT", 188 | "dependencies": { 189 | "@octokit/oauth-methods": "^5.1.3", 190 | "@octokit/request": "^9.1.4", 191 | "@octokit/types": "^13.6.2", 192 | "universal-user-agent": "^7.0.0" 193 | }, 194 | "engines": { 195 | "node": ">= 18" 196 | } 197 | }, 198 | "node_modules/@octokit/auth-oauth-user": { 199 | "version": "5.1.2", 200 | "resolved": "https://registry.npmjs.org/@octokit/auth-oauth-user/-/auth-oauth-user-5.1.2.tgz", 201 | "integrity": "sha512-PgVDDPJgZYb3qSEXK4moksA23tfn68zwSAsQKZ1uH6IV9IaNEYx35OXXI80STQaLYnmEE86AgU0tC1YkM4WjsA==", 202 | "dev": true, 203 | "license": "MIT", 204 | "dependencies": { 205 | "@octokit/auth-oauth-device": "^7.1.2", 206 | "@octokit/oauth-methods": "^5.1.2", 207 | "@octokit/request": "^9.1.4", 208 | "@octokit/types": "^13.6.2", 209 | "universal-user-agent": "^7.0.0" 210 | }, 211 | "engines": { 212 | "node": ">= 18" 213 | } 214 | }, 215 | "node_modules/@octokit/auth-token": { 216 | "version": "5.1.1", 217 | "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-5.1.1.tgz", 218 | "integrity": "sha512-rh3G3wDO8J9wSjfI436JUKzHIxq8NaiL0tVeB2aXmG6p/9859aUOAjA9pmSPNGGZxfwmaJ9ozOJImuNVJdpvbA==", 219 | "dev": true, 220 | "license": "MIT", 221 | "engines": { 222 | "node": ">= 18" 223 | } 224 | }, 225 | "node_modules/@octokit/auth-unauthenticated": { 226 | "version": "6.1.1", 227 | "resolved": "https://registry.npmjs.org/@octokit/auth-unauthenticated/-/auth-unauthenticated-6.1.1.tgz", 228 | "integrity": "sha512-bGXqdN6RhSFHvpPq46SL8sN+F3odQ6oMNLWc875IgoqcC3qus+fOL2th6Tkl94wvdSTy8/OeHzWy/lZebmnhog==", 229 | "dev": true, 230 | "license": "MIT", 231 | "dependencies": { 232 | "@octokit/request-error": "^6.1.6", 233 | "@octokit/types": "^13.6.2" 234 | }, 235 | "engines": { 236 | "node": ">= 18" 237 | } 238 | }, 239 | "node_modules/@octokit/core": { 240 | "version": "6.1.3", 241 | "resolved": "https://registry.npmjs.org/@octokit/core/-/core-6.1.3.tgz", 242 | "integrity": "sha512-z+j7DixNnfpdToYsOutStDgeRzJSMnbj8T1C/oQjB6Aa+kRfNjs/Fn7W6c8bmlt6mfy3FkgeKBRnDjxQow5dow==", 243 | "dev": true, 244 | "license": "MIT", 245 | "dependencies": { 246 | "@octokit/auth-token": "^5.0.0", 247 | "@octokit/graphql": "^8.1.2", 248 | "@octokit/request": "^9.1.4", 249 | "@octokit/request-error": "^6.1.6", 250 | "@octokit/types": "^13.6.2", 251 | "before-after-hook": "^3.0.2", 252 | "universal-user-agent": "^7.0.0" 253 | }, 254 | "engines": { 255 | "node": ">= 18" 256 | } 257 | }, 258 | "node_modules/@octokit/endpoint": { 259 | "version": "10.1.2", 260 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-10.1.2.tgz", 261 | "integrity": "sha512-XybpFv9Ms4hX5OCHMZqyODYqGTZ3H6K6Vva+M9LR7ib/xr1y1ZnlChYv9H680y77Vd/i/k+thXApeRASBQkzhA==", 262 | "dev": true, 263 | "license": "MIT", 264 | "dependencies": { 265 | "@octokit/types": "^13.6.2", 266 | "universal-user-agent": "^7.0.2" 267 | }, 268 | "engines": { 269 | "node": ">= 18" 270 | } 271 | }, 272 | "node_modules/@octokit/graphql": { 273 | "version": "8.2.0", 274 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-8.2.0.tgz", 275 | "integrity": "sha512-gejfDywEml/45SqbWTWrhfwvLBrcGYhOn50sPOjIeVvH6i7D16/9xcFA8dAJNp2HMcd+g4vru41g4E2RBiZvfQ==", 276 | "dev": true, 277 | "license": "MIT", 278 | "dependencies": { 279 | "@octokit/request": "^9.1.4", 280 | "@octokit/types": "^13.8.0", 281 | "universal-user-agent": "^7.0.0" 282 | }, 283 | "engines": { 284 | "node": ">= 18" 285 | } 286 | }, 287 | "node_modules/@octokit/oauth-app": { 288 | "version": "7.1.5", 289 | "resolved": "https://registry.npmjs.org/@octokit/oauth-app/-/oauth-app-7.1.5.tgz", 290 | "integrity": "sha512-/Y2MiwWDlGUK4blKKfjJiwjzu/FzwKTTTfTZAAQ0QbdBIDEGJPWhOFH6muSN86zaa4tNheB4YS3oWIR2e4ydzA==", 291 | "dev": true, 292 | "license": "MIT", 293 | "dependencies": { 294 | "@octokit/auth-oauth-app": "^8.1.2", 295 | "@octokit/auth-oauth-user": "^5.1.2", 296 | "@octokit/auth-unauthenticated": "^6.1.1", 297 | "@octokit/core": "^6.1.3", 298 | "@octokit/oauth-authorization-url": "^7.1.1", 299 | "@octokit/oauth-methods": "^5.1.3", 300 | "@types/aws-lambda": "^8.10.83", 301 | "universal-user-agent": "^7.0.0" 302 | }, 303 | "engines": { 304 | "node": ">= 18" 305 | } 306 | }, 307 | "node_modules/@octokit/oauth-authorization-url": { 308 | "version": "7.1.1", 309 | "resolved": "https://registry.npmjs.org/@octokit/oauth-authorization-url/-/oauth-authorization-url-7.1.1.tgz", 310 | "integrity": "sha512-ooXV8GBSabSWyhLUowlMIVd9l1s2nsOGQdlP2SQ4LnkEsGXzeCvbSbCPdZThXhEFzleGPwbapT0Sb+YhXRyjCA==", 311 | "dev": true, 312 | "license": "MIT", 313 | "engines": { 314 | "node": ">= 18" 315 | } 316 | }, 317 | "node_modules/@octokit/oauth-methods": { 318 | "version": "5.1.3", 319 | "resolved": "https://registry.npmjs.org/@octokit/oauth-methods/-/oauth-methods-5.1.3.tgz", 320 | "integrity": "sha512-M+bDBi5H8FnH0xhCTg0m9hvcnppdDnxUqbZyOkxlLblKpLAR+eT2nbDPvJDp0eLrvJWA1I8OX0KHf/sBMQARRA==", 321 | "dev": true, 322 | "license": "MIT", 323 | "dependencies": { 324 | "@octokit/oauth-authorization-url": "^7.0.0", 325 | "@octokit/request": "^9.1.4", 326 | "@octokit/request-error": "^6.1.6", 327 | "@octokit/types": "^13.6.2" 328 | }, 329 | "engines": { 330 | "node": ">= 18" 331 | } 332 | }, 333 | "node_modules/@octokit/openapi-types": { 334 | "version": "23.0.1", 335 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz", 336 | "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==", 337 | "dev": true, 338 | "license": "MIT" 339 | }, 340 | "node_modules/@octokit/openapi-webhooks-types": { 341 | "version": "8.5.1", 342 | "resolved": "https://registry.npmjs.org/@octokit/openapi-webhooks-types/-/openapi-webhooks-types-8.5.1.tgz", 343 | "integrity": "sha512-i3h1b5zpGSB39ffBbYdSGuAd0NhBAwPyA3QV3LYi/lx4lsbZiu7u2UHgXVUR6EpvOI8REOuVh1DZTRfHoJDvuQ==", 344 | "dev": true, 345 | "license": "MIT" 346 | }, 347 | "node_modules/@octokit/plugin-paginate-graphql": { 348 | "version": "5.2.4", 349 | "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-graphql/-/plugin-paginate-graphql-5.2.4.tgz", 350 | "integrity": "sha512-pLZES1jWaOynXKHOqdnwZ5ULeVR6tVVCMm+AUbp0htdcyXDU95WbkYdU4R2ej1wKj5Tu94Mee2Ne0PjPO9cCyA==", 351 | "dev": true, 352 | "license": "MIT", 353 | "engines": { 354 | "node": ">= 18" 355 | }, 356 | "peerDependencies": { 357 | "@octokit/core": ">=6" 358 | } 359 | }, 360 | "node_modules/@octokit/plugin-paginate-rest": { 361 | "version": "11.4.0", 362 | "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.4.0.tgz", 363 | "integrity": "sha512-ttpGck5AYWkwMkMazNCZMqxKqIq1fJBNxBfsFwwfyYKTf914jKkLF0POMS3YkPBwp5g1c2Y4L79gDz01GhSr1g==", 364 | "dev": true, 365 | "license": "MIT", 366 | "dependencies": { 367 | "@octokit/types": "^13.7.0" 368 | }, 369 | "engines": { 370 | "node": ">= 18" 371 | }, 372 | "peerDependencies": { 373 | "@octokit/core": ">=6" 374 | } 375 | }, 376 | "node_modules/@octokit/plugin-rest-endpoint-methods": { 377 | "version": "13.3.0", 378 | "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.3.0.tgz", 379 | "integrity": "sha512-LUm44shlmkp/6VC+qQgHl3W5vzUP99ZM54zH6BuqkJK4DqfFLhegANd+fM4YRLapTvPm4049iG7F3haANKMYvQ==", 380 | "dev": true, 381 | "license": "MIT", 382 | "dependencies": { 383 | "@octokit/types": "^13.7.0" 384 | }, 385 | "engines": { 386 | "node": ">= 18" 387 | }, 388 | "peerDependencies": { 389 | "@octokit/core": ">=6" 390 | } 391 | }, 392 | "node_modules/@octokit/plugin-retry": { 393 | "version": "7.1.3", 394 | "resolved": "https://registry.npmjs.org/@octokit/plugin-retry/-/plugin-retry-7.1.3.tgz", 395 | "integrity": "sha512-8nKOXvYWnzv89gSyIvgFHmCBAxfQAOPRlkacUHL9r5oWtp5Whxl8Skb2n3ACZd+X6cYijD6uvmrQuPH/UCL5zQ==", 396 | "dev": true, 397 | "license": "MIT", 398 | "dependencies": { 399 | "@octokit/request-error": "^6.1.6", 400 | "@octokit/types": "^13.6.2", 401 | "bottleneck": "^2.15.3" 402 | }, 403 | "engines": { 404 | "node": ">= 18" 405 | }, 406 | "peerDependencies": { 407 | "@octokit/core": ">=6" 408 | } 409 | }, 410 | "node_modules/@octokit/plugin-throttling": { 411 | "version": "9.4.0", 412 | "resolved": "https://registry.npmjs.org/@octokit/plugin-throttling/-/plugin-throttling-9.4.0.tgz", 413 | "integrity": "sha512-IOlXxXhZA4Z3m0EEYtrrACkuHiArHLZ3CvqWwOez/pURNqRuwfoFlTPbN5Muf28pzFuztxPyiUiNwz8KctdZaQ==", 414 | "dev": true, 415 | "license": "MIT", 416 | "dependencies": { 417 | "@octokit/types": "^13.7.0", 418 | "bottleneck": "^2.15.3" 419 | }, 420 | "engines": { 421 | "node": ">= 18" 422 | }, 423 | "peerDependencies": { 424 | "@octokit/core": "^6.1.3" 425 | } 426 | }, 427 | "node_modules/@octokit/request": { 428 | "version": "9.2.0", 429 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-9.2.0.tgz", 430 | "integrity": "sha512-kXLfcxhC4ozCnAXy2ff+cSxpcF0A1UqxjvYMqNuPIeOAzJbVWQ+dy5G2fTylofB/gTbObT8O6JORab+5XtA1Kw==", 431 | "dev": true, 432 | "license": "MIT", 433 | "dependencies": { 434 | "@octokit/endpoint": "^10.0.0", 435 | "@octokit/request-error": "^6.0.1", 436 | "@octokit/types": "^13.6.2", 437 | "fast-content-type-parse": "^2.0.0", 438 | "universal-user-agent": "^7.0.2" 439 | }, 440 | "engines": { 441 | "node": ">= 18" 442 | } 443 | }, 444 | "node_modules/@octokit/request-error": { 445 | "version": "6.1.6", 446 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-6.1.6.tgz", 447 | "integrity": "sha512-pqnVKYo/at0NuOjinrgcQYpEbv4snvP3bKMRqHaD9kIsk9u1LCpb2smHZi8/qJfgeNqLo5hNW4Z7FezNdEo0xg==", 448 | "dev": true, 449 | "license": "MIT", 450 | "dependencies": { 451 | "@octokit/types": "^13.6.2" 452 | }, 453 | "engines": { 454 | "node": ">= 18" 455 | } 456 | }, 457 | "node_modules/@octokit/types": { 458 | "version": "13.8.0", 459 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz", 460 | "integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==", 461 | "dev": true, 462 | "license": "MIT", 463 | "dependencies": { 464 | "@octokit/openapi-types": "^23.0.1" 465 | } 466 | }, 467 | "node_modules/@octokit/webhooks": { 468 | "version": "13.5.1", 469 | "resolved": "https://registry.npmjs.org/@octokit/webhooks/-/webhooks-13.5.1.tgz", 470 | "integrity": "sha512-2q5xt+UEkElPjcRuE5QAEkgsL5WhWa7/vMeWIklhM7BTH86hxQedm20OO0BvEYRyNnOwEj/CpQCB0K9QYt2+ug==", 471 | "dev": true, 472 | "license": "MIT", 473 | "dependencies": { 474 | "@octokit/openapi-webhooks-types": "8.5.1", 475 | "@octokit/request-error": "^6.1.6", 476 | "@octokit/webhooks-methods": "^5.1.1" 477 | }, 478 | "engines": { 479 | "node": ">= 18" 480 | } 481 | }, 482 | "node_modules/@octokit/webhooks-methods": { 483 | "version": "5.1.1", 484 | "resolved": "https://registry.npmjs.org/@octokit/webhooks-methods/-/webhooks-methods-5.1.1.tgz", 485 | "integrity": "sha512-NGlEHZDseJTCj8TMMFehzwa9g7On4KJMPVHDSrHxCQumL6uSQR8wIkP/qesv52fXqV1BPf4pTxwtS31ldAt9Xg==", 486 | "dev": true, 487 | "license": "MIT", 488 | "engines": { 489 | "node": ">= 18" 490 | } 491 | }, 492 | "node_modules/@pkgjs/parseargs": { 493 | "version": "0.11.0", 494 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 495 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 496 | "dev": true, 497 | "license": "MIT", 498 | "optional": true, 499 | "engines": { 500 | "node": ">=14" 501 | } 502 | }, 503 | "node_modules/@types/aws-lambda": { 504 | "version": "8.10.147", 505 | "resolved": "https://registry.npmjs.org/@types/aws-lambda/-/aws-lambda-8.10.147.tgz", 506 | "integrity": "sha512-nD0Z9fNIZcxYX5Mai2CTmFD7wX7UldCkW2ezCF8D1T5hdiLsnTWDGRpfRYntU6VjTdLQjOvyszru7I1c1oCQew==", 507 | "dev": true, 508 | "license": "MIT" 509 | }, 510 | "node_modules/ajv": { 511 | "version": "6.12.6", 512 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 513 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 514 | "license": "MIT", 515 | "dependencies": { 516 | "fast-deep-equal": "^3.1.1", 517 | "fast-json-stable-stringify": "^2.0.0", 518 | "json-schema-traverse": "^0.4.1", 519 | "uri-js": "^4.2.2" 520 | }, 521 | "funding": { 522 | "type": "github", 523 | "url": "https://github.com/sponsors/epoberezkin" 524 | } 525 | }, 526 | "node_modules/ansi-regex": { 527 | "version": "5.0.1", 528 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 529 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 530 | "dev": true, 531 | "license": "MIT", 532 | "engines": { 533 | "node": ">=8" 534 | } 535 | }, 536 | "node_modules/ansi-styles": { 537 | "version": "4.3.0", 538 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 539 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 540 | "dev": true, 541 | "license": "MIT", 542 | "dependencies": { 543 | "color-convert": "^2.0.1" 544 | }, 545 | "engines": { 546 | "node": ">=8" 547 | }, 548 | "funding": { 549 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 550 | } 551 | }, 552 | "node_modules/asn1": { 553 | "version": "0.2.6", 554 | "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.6.tgz", 555 | "integrity": "sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ==", 556 | "license": "MIT", 557 | "dependencies": { 558 | "safer-buffer": "~2.1.0" 559 | } 560 | }, 561 | "node_modules/assert-plus": { 562 | "version": "1.0.0", 563 | "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", 564 | "integrity": "sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw==", 565 | "license": "MIT", 566 | "engines": { 567 | "node": ">=0.8" 568 | } 569 | }, 570 | "node_modules/asynckit": { 571 | "version": "0.4.0", 572 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 573 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 574 | "license": "MIT" 575 | }, 576 | "node_modules/aws-sign2": { 577 | "version": "0.7.0", 578 | "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.7.0.tgz", 579 | "integrity": "sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==", 580 | "license": "Apache-2.0", 581 | "engines": { 582 | "node": "*" 583 | } 584 | }, 585 | "node_modules/aws4": { 586 | "version": "1.13.2", 587 | "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.13.2.tgz", 588 | "integrity": "sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw==", 589 | "license": "MIT" 590 | }, 591 | "node_modules/balanced-match": { 592 | "version": "1.0.2", 593 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 594 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 595 | "dev": true, 596 | "license": "MIT" 597 | }, 598 | "node_modules/bcrypt-pbkdf": { 599 | "version": "1.0.2", 600 | "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz", 601 | "integrity": "sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w==", 602 | "license": "BSD-3-Clause", 603 | "dependencies": { 604 | "tweetnacl": "^0.14.3" 605 | } 606 | }, 607 | "node_modules/before-after-hook": { 608 | "version": "3.0.2", 609 | "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-3.0.2.tgz", 610 | "integrity": "sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A==", 611 | "dev": true, 612 | "license": "Apache-2.0" 613 | }, 614 | "node_modules/bl": { 615 | "version": "0.4.2", 616 | "resolved": "https://registry.npmjs.org/bl/-/bl-0.4.2.tgz", 617 | "integrity": "sha512-/Jhsskdr/kVmqiA+zn6A1h0Z9pRLXrx/yxOlhKVgwaiCMtb+/UhZOHlefRAqArQVRRuOxOu+MvzQh/yIvFMZlQ==", 618 | "license": "MIT", 619 | "dependencies": { 620 | "readable-stream": "~1.0.2" 621 | } 622 | }, 623 | "node_modules/bottleneck": { 624 | "version": "2.19.5", 625 | "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", 626 | "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", 627 | "dev": true, 628 | "license": "MIT" 629 | }, 630 | "node_modules/caseless": { 631 | "version": "0.12.0", 632 | "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", 633 | "integrity": "sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==", 634 | "license": "Apache-2.0" 635 | }, 636 | "node_modules/cliui": { 637 | "version": "8.0.1", 638 | "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", 639 | "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", 640 | "dev": true, 641 | "license": "ISC", 642 | "dependencies": { 643 | "string-width": "^4.2.0", 644 | "strip-ansi": "^6.0.1", 645 | "wrap-ansi": "^7.0.0" 646 | }, 647 | "engines": { 648 | "node": ">=12" 649 | } 650 | }, 651 | "node_modules/color-convert": { 652 | "version": "2.0.1", 653 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 654 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 655 | "dev": true, 656 | "license": "MIT", 657 | "dependencies": { 658 | "color-name": "~1.1.4" 659 | }, 660 | "engines": { 661 | "node": ">=7.0.0" 662 | } 663 | }, 664 | "node_modules/color-name": { 665 | "version": "1.1.4", 666 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 667 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 668 | "dev": true, 669 | "license": "MIT" 670 | }, 671 | "node_modules/combined-stream": { 672 | "version": "1.0.8", 673 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 674 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 675 | "license": "MIT", 676 | "dependencies": { 677 | "delayed-stream": "~1.0.0" 678 | }, 679 | "engines": { 680 | "node": ">= 0.8" 681 | } 682 | }, 683 | "node_modules/core-util-is": { 684 | "version": "1.0.3", 685 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", 686 | "integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==", 687 | "license": "MIT" 688 | }, 689 | "node_modules/cross-spawn": { 690 | "version": "7.0.6", 691 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", 692 | "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", 693 | "dev": true, 694 | "license": "MIT", 695 | "dependencies": { 696 | "path-key": "^3.1.0", 697 | "shebang-command": "^2.0.0", 698 | "which": "^2.0.1" 699 | }, 700 | "engines": { 701 | "node": ">= 8" 702 | } 703 | }, 704 | "node_modules/dashdash": { 705 | "version": "1.14.1", 706 | "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", 707 | "integrity": "sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g==", 708 | "license": "MIT", 709 | "dependencies": { 710 | "assert-plus": "^1.0.0" 711 | }, 712 | "engines": { 713 | "node": ">=0.10" 714 | } 715 | }, 716 | "node_modules/delayed-stream": { 717 | "version": "1.0.0", 718 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 719 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 720 | "license": "MIT", 721 | "engines": { 722 | "node": ">=0.4.0" 723 | } 724 | }, 725 | "node_modules/eastasianwidth": { 726 | "version": "0.2.0", 727 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 728 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 729 | "dev": true, 730 | "license": "MIT" 731 | }, 732 | "node_modules/ecc-jsbn": { 733 | "version": "0.1.2", 734 | "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz", 735 | "integrity": "sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw==", 736 | "license": "MIT", 737 | "dependencies": { 738 | "jsbn": "~0.1.0", 739 | "safer-buffer": "^2.1.0" 740 | } 741 | }, 742 | "node_modules/emoji-regex": { 743 | "version": "8.0.0", 744 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 745 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 746 | "dev": true, 747 | "license": "MIT" 748 | }, 749 | "node_modules/escalade": { 750 | "version": "3.2.0", 751 | "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", 752 | "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", 753 | "dev": true, 754 | "license": "MIT", 755 | "engines": { 756 | "node": ">=6" 757 | } 758 | }, 759 | "node_modules/extend": { 760 | "version": "3.0.2", 761 | "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", 762 | "integrity": "sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==", 763 | "license": "MIT" 764 | }, 765 | "node_modules/extsprintf": { 766 | "version": "1.3.0", 767 | "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", 768 | "integrity": "sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g==", 769 | "engines": [ 770 | "node >=0.6.0" 771 | ], 772 | "license": "MIT" 773 | }, 774 | "node_modules/fast-content-type-parse": { 775 | "version": "2.0.1", 776 | "resolved": "https://registry.npmjs.org/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz", 777 | "integrity": "sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q==", 778 | "dev": true, 779 | "funding": [ 780 | { 781 | "type": "github", 782 | "url": "https://github.com/sponsors/fastify" 783 | }, 784 | { 785 | "type": "opencollective", 786 | "url": "https://opencollective.com/fastify" 787 | } 788 | ], 789 | "license": "MIT" 790 | }, 791 | "node_modules/fast-deep-equal": { 792 | "version": "3.1.3", 793 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 794 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 795 | "license": "MIT" 796 | }, 797 | "node_modules/fast-json-stable-stringify": { 798 | "version": "2.1.0", 799 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 800 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 801 | "license": "MIT" 802 | }, 803 | "node_modules/foreground-child": { 804 | "version": "3.3.0", 805 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", 806 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", 807 | "dev": true, 808 | "license": "ISC", 809 | "dependencies": { 810 | "cross-spawn": "^7.0.0", 811 | "signal-exit": "^4.0.1" 812 | }, 813 | "engines": { 814 | "node": ">=14" 815 | }, 816 | "funding": { 817 | "url": "https://github.com/sponsors/isaacs" 818 | } 819 | }, 820 | "node_modules/forever-agent": { 821 | "version": "0.6.1", 822 | "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", 823 | "integrity": "sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==", 824 | "license": "Apache-2.0", 825 | "engines": { 826 | "node": "*" 827 | } 828 | }, 829 | "node_modules/form-data": { 830 | "version": "2.3.3", 831 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.3.3.tgz", 832 | "integrity": "sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ==", 833 | "license": "MIT", 834 | "dependencies": { 835 | "asynckit": "^0.4.0", 836 | "combined-stream": "^1.0.6", 837 | "mime-types": "^2.1.12" 838 | }, 839 | "engines": { 840 | "node": ">= 0.12" 841 | } 842 | }, 843 | "node_modules/get-caller-file": { 844 | "version": "2.0.5", 845 | "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", 846 | "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", 847 | "dev": true, 848 | "license": "ISC", 849 | "engines": { 850 | "node": "6.* || 8.* || >= 10.*" 851 | } 852 | }, 853 | "node_modules/get-stdin": { 854 | "version": "9.0.0", 855 | "resolved": "https://registry.npmjs.org/get-stdin/-/get-stdin-9.0.0.tgz", 856 | "integrity": "sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==", 857 | "license": "MIT", 858 | "engines": { 859 | "node": ">=12" 860 | }, 861 | "funding": { 862 | "url": "https://github.com/sponsors/sindresorhus" 863 | } 864 | }, 865 | "node_modules/getpass": { 866 | "version": "0.1.7", 867 | "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", 868 | "integrity": "sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng==", 869 | "license": "MIT", 870 | "dependencies": { 871 | "assert-plus": "^1.0.0" 872 | } 873 | }, 874 | "node_modules/gfm-linkify": { 875 | "version": "0.1.0", 876 | "resolved": "https://registry.npmjs.org/gfm-linkify/-/gfm-linkify-0.1.0.tgz", 877 | "integrity": "sha512-IBlmOdGcoXoVvpfy+21KghIRSZaph3r+HuQkFjyga5oBoHnhkOgS2LP0/zc3OgnnPxrsU/JrjshF10+KTD+T3g==", 878 | "license": "MIT" 879 | }, 880 | "node_modules/har-schema": { 881 | "version": "2.0.0", 882 | "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-2.0.0.tgz", 883 | "integrity": "sha512-Oqluz6zhGX8cyRaTQlFMPw80bSJVG2x/cFb8ZPhUILGgHka9SsokCCOQgpveePerqidZOrT14ipqfJb7ILcW5Q==", 884 | "license": "ISC", 885 | "engines": { 886 | "node": ">=4" 887 | } 888 | }, 889 | "node_modules/har-validator": { 890 | "version": "5.1.5", 891 | "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-5.1.5.tgz", 892 | "integrity": "sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==", 893 | "deprecated": "this library is no longer supported", 894 | "license": "MIT", 895 | "dependencies": { 896 | "ajv": "^6.12.3", 897 | "har-schema": "^2.0.0" 898 | }, 899 | "engines": { 900 | "node": ">=6" 901 | } 902 | }, 903 | "node_modules/http-signature": { 904 | "version": "1.2.0", 905 | "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.2.0.tgz", 906 | "integrity": "sha512-CAbnr6Rz4CYQkLYUtSNXxQPUH2gK8f3iWexVlsnMeD+GjlsQ0Xsy1cOX+mN3dtxYomRy21CiOzU8Uhw6OwncEQ==", 907 | "license": "MIT", 908 | "dependencies": { 909 | "assert-plus": "^1.0.0", 910 | "jsprim": "^1.2.2", 911 | "sshpk": "^1.7.0" 912 | }, 913 | "engines": { 914 | "node": ">=0.8", 915 | "npm": ">=1.3.7" 916 | } 917 | }, 918 | "node_modules/inherits": { 919 | "version": "2.0.4", 920 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 921 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 922 | "license": "ISC" 923 | }, 924 | "node_modules/is-fullwidth-code-point": { 925 | "version": "3.0.0", 926 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 927 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 928 | "dev": true, 929 | "license": "MIT", 930 | "engines": { 931 | "node": ">=8" 932 | } 933 | }, 934 | "node_modules/is-typedarray": { 935 | "version": "1.0.0", 936 | "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", 937 | "integrity": "sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==", 938 | "license": "MIT" 939 | }, 940 | "node_modules/isarray": { 941 | "version": "0.0.1", 942 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz", 943 | "integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==", 944 | "license": "MIT" 945 | }, 946 | "node_modules/isexe": { 947 | "version": "2.0.0", 948 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 949 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 950 | "dev": true, 951 | "license": "ISC" 952 | }, 953 | "node_modules/isstream": { 954 | "version": "0.1.2", 955 | "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", 956 | "integrity": "sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==", 957 | "license": "MIT" 958 | }, 959 | "node_modules/jackspeak": { 960 | "version": "3.4.3", 961 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 962 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 963 | "dev": true, 964 | "license": "BlueOak-1.0.0", 965 | "dependencies": { 966 | "@isaacs/cliui": "^8.0.2" 967 | }, 968 | "funding": { 969 | "url": "https://github.com/sponsors/isaacs" 970 | }, 971 | "optionalDependencies": { 972 | "@pkgjs/parseargs": "^0.11.0" 973 | } 974 | }, 975 | "node_modules/jsbn": { 976 | "version": "0.1.1", 977 | "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", 978 | "integrity": "sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg==", 979 | "license": "MIT" 980 | }, 981 | "node_modules/json-schema": { 982 | "version": "0.4.0", 983 | "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.4.0.tgz", 984 | "integrity": "sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA==", 985 | "license": "(AFL-2.1 OR BSD-3-Clause)" 986 | }, 987 | "node_modules/json-schema-traverse": { 988 | "version": "0.4.1", 989 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 990 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 991 | "license": "MIT" 992 | }, 993 | "node_modules/json-stringify-safe": { 994 | "version": "5.0.1", 995 | "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", 996 | "integrity": "sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==", 997 | "license": "ISC" 998 | }, 999 | "node_modules/jsprim": { 1000 | "version": "1.4.2", 1001 | "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.2.tgz", 1002 | "integrity": "sha512-P2bSOMAc/ciLz6DzgjVlGJP9+BrJWu5UDGK70C2iweC5QBIeFf0ZXRvGjEj2uYgrY2MkAAhsSWHDWlFtEroZWw==", 1003 | "license": "MIT", 1004 | "dependencies": { 1005 | "assert-plus": "1.0.0", 1006 | "extsprintf": "1.3.0", 1007 | "json-schema": "0.4.0", 1008 | "verror": "1.10.0" 1009 | }, 1010 | "engines": { 1011 | "node": ">=0.6.0" 1012 | } 1013 | }, 1014 | "node_modules/lru-cache": { 1015 | "version": "10.4.3", 1016 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 1017 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 1018 | "dev": true, 1019 | "license": "ISC" 1020 | }, 1021 | "node_modules/markdown-table": { 1022 | "version": "3.0.4", 1023 | "resolved": "https://registry.npmjs.org/markdown-table/-/markdown-table-3.0.4.tgz", 1024 | "integrity": "sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==", 1025 | "license": "MIT", 1026 | "funding": { 1027 | "type": "github", 1028 | "url": "https://github.com/sponsors/wooorm" 1029 | } 1030 | }, 1031 | "node_modules/markdown-to-html": { 1032 | "version": "0.0.13", 1033 | "resolved": "https://registry.npmjs.org/markdown-to-html/-/markdown-to-html-0.0.13.tgz", 1034 | "integrity": "sha512-Gj4LOPRgwWKh6i2ccXqpf9mBQEG5gS2qhipCp3bugs32nIvEa0HqeOHW4nkmkGLeozvQRoNmqm3VZ5Aj6c+thg==", 1035 | "license": "MIT", 1036 | "dependencies": { 1037 | "gfm-linkify": "^0.1.0", 1038 | "marked": "^0.3.2", 1039 | "open": "0.0.5", 1040 | "pygmentize-bundled": "^2.2.0", 1041 | "request": "^2.47.0", 1042 | "tmp": "0.0.24", 1043 | "yargs": "^1.3.3" 1044 | }, 1045 | "bin": { 1046 | "github-markdown": "bin/github-markdown", 1047 | "github-markdownb": "bin/github-markdownb", 1048 | "markdown": "bin/markdown", 1049 | "markdownb": "bin/markdownb" 1050 | } 1051 | }, 1052 | "node_modules/marked": { 1053 | "version": "0.3.19", 1054 | "resolved": "https://registry.npmjs.org/marked/-/marked-0.3.19.tgz", 1055 | "integrity": "sha512-ea2eGWOqNxPcXv8dyERdSr/6FmzvWwzjMxpfGB/sbMccXoct+xY+YukPD+QTUZwyvK7BZwcr4m21WBOW41pAkg==", 1056 | "license": "MIT", 1057 | "bin": { 1058 | "marked": "bin/marked" 1059 | }, 1060 | "engines": { 1061 | "node": ">=0.10.0" 1062 | } 1063 | }, 1064 | "node_modules/mime-db": { 1065 | "version": "1.52.0", 1066 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 1067 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 1068 | "license": "MIT", 1069 | "engines": { 1070 | "node": ">= 0.6" 1071 | } 1072 | }, 1073 | "node_modules/mime-types": { 1074 | "version": "2.1.35", 1075 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 1076 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 1077 | "license": "MIT", 1078 | "dependencies": { 1079 | "mime-db": "1.52.0" 1080 | }, 1081 | "engines": { 1082 | "node": ">= 0.6" 1083 | } 1084 | }, 1085 | "node_modules/minipass": { 1086 | "version": "7.1.2", 1087 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 1088 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 1089 | "dev": true, 1090 | "license": "ISC", 1091 | "engines": { 1092 | "node": ">=16 || 14 >=14.17" 1093 | } 1094 | }, 1095 | "node_modules/oauth-sign": { 1096 | "version": "0.9.0", 1097 | "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.9.0.tgz", 1098 | "integrity": "sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ==", 1099 | "license": "Apache-2.0", 1100 | "engines": { 1101 | "node": "*" 1102 | } 1103 | }, 1104 | "node_modules/object-keys": { 1105 | "version": "0.4.0", 1106 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-0.4.0.tgz", 1107 | "integrity": "sha512-ncrLw+X55z7bkl5PnUvHwFK9FcGuFYo9gtjws2XtSzL+aZ8tm830P60WJ0dSmFVaSalWieW5MD7kEdnXda9yJw==", 1108 | "license": "MIT" 1109 | }, 1110 | "node_modules/octokit": { 1111 | "version": "4.1.1", 1112 | "resolved": "https://registry.npmjs.org/octokit/-/octokit-4.1.1.tgz", 1113 | "integrity": "sha512-GMjkrTnGk2PB9MKnK5SVDj4wSrnVX39vldKvYIC3MVNDQY1nZ6ufPrGCUFsQ645q5q+PG+CHUWRB6ZH8MBcyFg==", 1114 | "dev": true, 1115 | "license": "MIT", 1116 | "dependencies": { 1117 | "@octokit/app": "^15.1.3", 1118 | "@octokit/core": "^6.1.3", 1119 | "@octokit/oauth-app": "^7.1.4", 1120 | "@octokit/plugin-paginate-graphql": "^5.2.4", 1121 | "@octokit/plugin-paginate-rest": "^11.4.0", 1122 | "@octokit/plugin-rest-endpoint-methods": "^13.3.0", 1123 | "@octokit/plugin-retry": "^7.1.3", 1124 | "@octokit/plugin-throttling": "^9.4.0", 1125 | "@octokit/request-error": "^6.1.6", 1126 | "@octokit/types": "^13.7.0" 1127 | }, 1128 | "engines": { 1129 | "node": ">= 18" 1130 | } 1131 | }, 1132 | "node_modules/open": { 1133 | "version": "0.0.5", 1134 | "resolved": "https://registry.npmjs.org/open/-/open-0.0.5.tgz", 1135 | "integrity": "sha512-+X/dJYLapVO1VbC620DhtNZK9U4/kQVaTQp/Gh7cb6UTLYfGZzzU2ZXkWrOA/wBrf4UqAFwtLqXYTxe4tSnWQQ==", 1136 | "license": "MIT", 1137 | "engines": { 1138 | "node": ">= 0.6.0" 1139 | } 1140 | }, 1141 | "node_modules/package-json-from-dist": { 1142 | "version": "1.0.1", 1143 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", 1144 | "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", 1145 | "dev": true, 1146 | "license": "BlueOak-1.0.0" 1147 | }, 1148 | "node_modules/path-key": { 1149 | "version": "3.1.1", 1150 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1151 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1152 | "dev": true, 1153 | "license": "MIT", 1154 | "engines": { 1155 | "node": ">=8" 1156 | } 1157 | }, 1158 | "node_modules/path-scurry": { 1159 | "version": "1.11.1", 1160 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 1161 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 1162 | "dev": true, 1163 | "license": "BlueOak-1.0.0", 1164 | "dependencies": { 1165 | "lru-cache": "^10.2.0", 1166 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 1167 | }, 1168 | "engines": { 1169 | "node": ">=16 || 14 >=14.18" 1170 | }, 1171 | "funding": { 1172 | "url": "https://github.com/sponsors/isaacs" 1173 | } 1174 | }, 1175 | "node_modules/performance-now": { 1176 | "version": "2.1.0", 1177 | "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", 1178 | "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", 1179 | "license": "MIT" 1180 | }, 1181 | "node_modules/psl": { 1182 | "version": "1.15.0", 1183 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", 1184 | "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", 1185 | "license": "MIT", 1186 | "dependencies": { 1187 | "punycode": "^2.3.1" 1188 | }, 1189 | "funding": { 1190 | "url": "https://github.com/sponsors/lupomontero" 1191 | } 1192 | }, 1193 | "node_modules/punycode": { 1194 | "version": "2.3.1", 1195 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 1196 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 1197 | "license": "MIT", 1198 | "engines": { 1199 | "node": ">=6" 1200 | } 1201 | }, 1202 | "node_modules/pygmentize-bundled": { 1203 | "version": "2.3.0", 1204 | "resolved": "https://registry.npmjs.org/pygmentize-bundled/-/pygmentize-bundled-2.3.0.tgz", 1205 | "integrity": "sha512-6qdRNJxwOWh3pl06KWWPtcgufBDqBZT18E3DS+PxbqGTgO1UU3MTbeWSFqZo6qMmjZO1wBacB7baLo5EZxeJnQ==", 1206 | "deprecated": "no longer maintained", 1207 | "license": "MIT", 1208 | "dependencies": { 1209 | "bl": "~0.4.1", 1210 | "through2": "~0.2.1" 1211 | } 1212 | }, 1213 | "node_modules/qs": { 1214 | "version": "6.5.3", 1215 | "resolved": "https://registry.npmjs.org/qs/-/qs-6.5.3.tgz", 1216 | "integrity": "sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==", 1217 | "license": "BSD-3-Clause", 1218 | "engines": { 1219 | "node": ">=0.6" 1220 | } 1221 | }, 1222 | "node_modules/ramda": { 1223 | "version": "0.30.1", 1224 | "resolved": "https://registry.npmjs.org/ramda/-/ramda-0.30.1.tgz", 1225 | "integrity": "sha512-tEF5I22zJnuclswcZMc8bDIrwRHRzf+NqVEmqg50ShAZMP7MWeR/RGDthfM/p+BlqvF2fXAzpn8i+SJcYD3alw==", 1226 | "license": "MIT", 1227 | "funding": { 1228 | "type": "opencollective", 1229 | "url": "https://opencollective.com/ramda" 1230 | } 1231 | }, 1232 | "node_modules/readable-stream": { 1233 | "version": "1.0.34", 1234 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", 1235 | "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", 1236 | "license": "MIT", 1237 | "dependencies": { 1238 | "core-util-is": "~1.0.0", 1239 | "inherits": "~2.0.1", 1240 | "isarray": "0.0.1", 1241 | "string_decoder": "~0.10.x" 1242 | } 1243 | }, 1244 | "node_modules/replace-in-file": { 1245 | "version": "8.3.0", 1246 | "resolved": "https://registry.npmjs.org/replace-in-file/-/replace-in-file-8.3.0.tgz", 1247 | "integrity": "sha512-4VhddQiMCPIuypiwHDTM+XHjZoVu9h7ngBbSCnwGRcwdHwxltjt/m//Ep3GDwqaOx1fDSrKFQ+n7uo4uVcEz9Q==", 1248 | "dev": true, 1249 | "license": "MIT", 1250 | "dependencies": { 1251 | "chalk": "^5.3.0", 1252 | "glob": "^10.4.2", 1253 | "yargs": "^17.7.2" 1254 | }, 1255 | "bin": { 1256 | "replace-in-file": "bin/cli.js" 1257 | }, 1258 | "engines": { 1259 | "node": ">=18" 1260 | } 1261 | }, 1262 | "node_modules/replace-in-file/node_modules/brace-expansion": { 1263 | "version": "2.0.1", 1264 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1265 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1266 | "dev": true, 1267 | "license": "MIT", 1268 | "dependencies": { 1269 | "balanced-match": "^1.0.0" 1270 | } 1271 | }, 1272 | "node_modules/replace-in-file/node_modules/chalk": { 1273 | "version": "5.3.0", 1274 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", 1275 | "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", 1276 | "dev": true, 1277 | "license": "MIT", 1278 | "engines": { 1279 | "node": "^12.17.0 || ^14.13 || >=16.0.0" 1280 | }, 1281 | "funding": { 1282 | "url": "https://github.com/chalk/chalk?sponsor=1" 1283 | } 1284 | }, 1285 | "node_modules/replace-in-file/node_modules/glob": { 1286 | "version": "10.4.5", 1287 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 1288 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 1289 | "dev": true, 1290 | "license": "ISC", 1291 | "dependencies": { 1292 | "foreground-child": "^3.1.0", 1293 | "jackspeak": "^3.1.2", 1294 | "minimatch": "^9.0.4", 1295 | "minipass": "^7.1.2", 1296 | "package-json-from-dist": "^1.0.0", 1297 | "path-scurry": "^1.11.1" 1298 | }, 1299 | "bin": { 1300 | "glob": "dist/esm/bin.mjs" 1301 | }, 1302 | "funding": { 1303 | "url": "https://github.com/sponsors/isaacs" 1304 | } 1305 | }, 1306 | "node_modules/replace-in-file/node_modules/minimatch": { 1307 | "version": "9.0.5", 1308 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 1309 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 1310 | "dev": true, 1311 | "license": "ISC", 1312 | "dependencies": { 1313 | "brace-expansion": "^2.0.1" 1314 | }, 1315 | "engines": { 1316 | "node": ">=16 || 14 >=14.17" 1317 | }, 1318 | "funding": { 1319 | "url": "https://github.com/sponsors/isaacs" 1320 | } 1321 | }, 1322 | "node_modules/replace-in-file/node_modules/yargs": { 1323 | "version": "17.7.2", 1324 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", 1325 | "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", 1326 | "dev": true, 1327 | "license": "MIT", 1328 | "dependencies": { 1329 | "cliui": "^8.0.1", 1330 | "escalade": "^3.1.1", 1331 | "get-caller-file": "^2.0.5", 1332 | "require-directory": "^2.1.1", 1333 | "string-width": "^4.2.3", 1334 | "y18n": "^5.0.5", 1335 | "yargs-parser": "^21.1.1" 1336 | }, 1337 | "engines": { 1338 | "node": ">=12" 1339 | } 1340 | }, 1341 | "node_modules/request": { 1342 | "version": "2.88.2", 1343 | "resolved": "https://registry.npmjs.org/request/-/request-2.88.2.tgz", 1344 | "integrity": "sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw==", 1345 | "deprecated": "request has been deprecated, see https://github.com/request/request/issues/3142", 1346 | "license": "Apache-2.0", 1347 | "dependencies": { 1348 | "aws-sign2": "~0.7.0", 1349 | "aws4": "^1.8.0", 1350 | "caseless": "~0.12.0", 1351 | "combined-stream": "~1.0.6", 1352 | "extend": "~3.0.2", 1353 | "forever-agent": "~0.6.1", 1354 | "form-data": "~2.3.2", 1355 | "har-validator": "~5.1.3", 1356 | "http-signature": "~1.2.0", 1357 | "is-typedarray": "~1.0.0", 1358 | "isstream": "~0.1.2", 1359 | "json-stringify-safe": "~5.0.1", 1360 | "mime-types": "~2.1.19", 1361 | "oauth-sign": "~0.9.0", 1362 | "performance-now": "^2.1.0", 1363 | "qs": "~6.5.2", 1364 | "safe-buffer": "^5.1.2", 1365 | "tough-cookie": "~2.5.0", 1366 | "tunnel-agent": "^0.6.0", 1367 | "uuid": "^3.3.2" 1368 | }, 1369 | "engines": { 1370 | "node": ">= 6" 1371 | } 1372 | }, 1373 | "node_modules/require-directory": { 1374 | "version": "2.1.1", 1375 | "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", 1376 | "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", 1377 | "dev": true, 1378 | "license": "MIT", 1379 | "engines": { 1380 | "node": ">=0.10.0" 1381 | } 1382 | }, 1383 | "node_modules/safe-buffer": { 1384 | "version": "5.2.1", 1385 | "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", 1386 | "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", 1387 | "funding": [ 1388 | { 1389 | "type": "github", 1390 | "url": "https://github.com/sponsors/feross" 1391 | }, 1392 | { 1393 | "type": "patreon", 1394 | "url": "https://www.patreon.com/feross" 1395 | }, 1396 | { 1397 | "type": "consulting", 1398 | "url": "https://feross.org/support" 1399 | } 1400 | ], 1401 | "license": "MIT" 1402 | }, 1403 | "node_modules/safer-buffer": { 1404 | "version": "2.1.2", 1405 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 1406 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 1407 | "license": "MIT" 1408 | }, 1409 | "node_modules/semver": { 1410 | "version": "7.7.1", 1411 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", 1412 | "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", 1413 | "license": "ISC", 1414 | "bin": { 1415 | "semver": "bin/semver.js" 1416 | }, 1417 | "engines": { 1418 | "node": ">=10" 1419 | } 1420 | }, 1421 | "node_modules/shebang-command": { 1422 | "version": "2.0.0", 1423 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1424 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1425 | "dev": true, 1426 | "license": "MIT", 1427 | "dependencies": { 1428 | "shebang-regex": "^3.0.0" 1429 | }, 1430 | "engines": { 1431 | "node": ">=8" 1432 | } 1433 | }, 1434 | "node_modules/shebang-regex": { 1435 | "version": "3.0.0", 1436 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1437 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1438 | "dev": true, 1439 | "license": "MIT", 1440 | "engines": { 1441 | "node": ">=8" 1442 | } 1443 | }, 1444 | "node_modules/signal-exit": { 1445 | "version": "4.1.0", 1446 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 1447 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1448 | "dev": true, 1449 | "license": "ISC", 1450 | "engines": { 1451 | "node": ">=14" 1452 | }, 1453 | "funding": { 1454 | "url": "https://github.com/sponsors/isaacs" 1455 | } 1456 | }, 1457 | "node_modules/sshpk": { 1458 | "version": "1.18.0", 1459 | "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.18.0.tgz", 1460 | "integrity": "sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ==", 1461 | "license": "MIT", 1462 | "dependencies": { 1463 | "asn1": "~0.2.3", 1464 | "assert-plus": "^1.0.0", 1465 | "bcrypt-pbkdf": "^1.0.0", 1466 | "dashdash": "^1.12.0", 1467 | "ecc-jsbn": "~0.1.1", 1468 | "getpass": "^0.1.1", 1469 | "jsbn": "~0.1.0", 1470 | "safer-buffer": "^2.0.2", 1471 | "tweetnacl": "~0.14.0" 1472 | }, 1473 | "bin": { 1474 | "sshpk-conv": "bin/sshpk-conv", 1475 | "sshpk-sign": "bin/sshpk-sign", 1476 | "sshpk-verify": "bin/sshpk-verify" 1477 | }, 1478 | "engines": { 1479 | "node": ">=0.10.0" 1480 | } 1481 | }, 1482 | "node_modules/string_decoder": { 1483 | "version": "0.10.31", 1484 | "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", 1485 | "integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==", 1486 | "license": "MIT" 1487 | }, 1488 | "node_modules/string-width": { 1489 | "version": "4.2.3", 1490 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1491 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1492 | "dev": true, 1493 | "license": "MIT", 1494 | "dependencies": { 1495 | "emoji-regex": "^8.0.0", 1496 | "is-fullwidth-code-point": "^3.0.0", 1497 | "strip-ansi": "^6.0.1" 1498 | }, 1499 | "engines": { 1500 | "node": ">=8" 1501 | } 1502 | }, 1503 | "node_modules/string-width-cjs": { 1504 | "name": "string-width", 1505 | "version": "4.2.3", 1506 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1507 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1508 | "dev": true, 1509 | "license": "MIT", 1510 | "dependencies": { 1511 | "emoji-regex": "^8.0.0", 1512 | "is-fullwidth-code-point": "^3.0.0", 1513 | "strip-ansi": "^6.0.1" 1514 | }, 1515 | "engines": { 1516 | "node": ">=8" 1517 | } 1518 | }, 1519 | "node_modules/strip-ansi": { 1520 | "version": "6.0.1", 1521 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1522 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1523 | "dev": true, 1524 | "license": "MIT", 1525 | "dependencies": { 1526 | "ansi-regex": "^5.0.1" 1527 | }, 1528 | "engines": { 1529 | "node": ">=8" 1530 | } 1531 | }, 1532 | "node_modules/strip-ansi-cjs": { 1533 | "name": "strip-ansi", 1534 | "version": "6.0.1", 1535 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1536 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1537 | "dev": true, 1538 | "license": "MIT", 1539 | "dependencies": { 1540 | "ansi-regex": "^5.0.1" 1541 | }, 1542 | "engines": { 1543 | "node": ">=8" 1544 | } 1545 | }, 1546 | "node_modules/through2": { 1547 | "version": "0.2.3", 1548 | "resolved": "https://registry.npmjs.org/through2/-/through2-0.2.3.tgz", 1549 | "integrity": "sha512-mLa8Bn2mZurjyomGKWRu3Bo2mvoQojFks9NvOK8H+k4kDJNkdEqG522KFZsEFBEl6rKkxTgFbE5+OPcgfvPEHA==", 1550 | "license": "MIT", 1551 | "dependencies": { 1552 | "readable-stream": "~1.1.9", 1553 | "xtend": "~2.1.1" 1554 | } 1555 | }, 1556 | "node_modules/through2/node_modules/readable-stream": { 1557 | "version": "1.1.14", 1558 | "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz", 1559 | "integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==", 1560 | "license": "MIT", 1561 | "dependencies": { 1562 | "core-util-is": "~1.0.0", 1563 | "inherits": "~2.0.1", 1564 | "isarray": "0.0.1", 1565 | "string_decoder": "~0.10.x" 1566 | } 1567 | }, 1568 | "node_modules/tmp": { 1569 | "version": "0.0.24", 1570 | "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.24.tgz", 1571 | "integrity": "sha512-z6TbUngjp7wMWIKNeUTuA24oRTW+HGCN7LlBgUPfNzCv5J/JsLsuF/qBh6tCUS2+ALGQ/4U5W4L4yUk7qIFWrg==", 1572 | "engines": { 1573 | "node": ">=0.4.0" 1574 | } 1575 | }, 1576 | "node_modules/toad-cache": { 1577 | "version": "3.7.0", 1578 | "resolved": "https://registry.npmjs.org/toad-cache/-/toad-cache-3.7.0.tgz", 1579 | "integrity": "sha512-/m8M+2BJUpoJdgAHoG+baCwBT+tf2VraSfkBgl0Y00qIWt41DJ8R5B8nsEw0I58YwF5IZH6z24/2TobDKnqSWw==", 1580 | "dev": true, 1581 | "license": "MIT", 1582 | "engines": { 1583 | "node": ">=12" 1584 | } 1585 | }, 1586 | "node_modules/tough-cookie": { 1587 | "version": "2.5.0", 1588 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.5.0.tgz", 1589 | "integrity": "sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==", 1590 | "license": "BSD-3-Clause", 1591 | "dependencies": { 1592 | "psl": "^1.1.28", 1593 | "punycode": "^2.1.1" 1594 | }, 1595 | "engines": { 1596 | "node": ">=0.8" 1597 | } 1598 | }, 1599 | "node_modules/tunnel-agent": { 1600 | "version": "0.6.0", 1601 | "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", 1602 | "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", 1603 | "license": "Apache-2.0", 1604 | "dependencies": { 1605 | "safe-buffer": "^5.0.1" 1606 | }, 1607 | "engines": { 1608 | "node": "*" 1609 | } 1610 | }, 1611 | "node_modules/tweetnacl": { 1612 | "version": "0.14.5", 1613 | "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", 1614 | "integrity": "sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA==", 1615 | "license": "Unlicense" 1616 | }, 1617 | "node_modules/universal-github-app-jwt": { 1618 | "version": "2.2.0", 1619 | "resolved": "https://registry.npmjs.org/universal-github-app-jwt/-/universal-github-app-jwt-2.2.0.tgz", 1620 | "integrity": "sha512-G5o6f95b5BggDGuUfKDApKaCgNYy2x7OdHY0zSMF081O0EJobw+1130VONhrA7ezGSV2FNOGyM+KQpQZAr9bIQ==", 1621 | "dev": true, 1622 | "license": "MIT" 1623 | }, 1624 | "node_modules/universal-user-agent": { 1625 | "version": "7.0.2", 1626 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-7.0.2.tgz", 1627 | "integrity": "sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q==", 1628 | "dev": true, 1629 | "license": "ISC" 1630 | }, 1631 | "node_modules/uri-js": { 1632 | "version": "4.4.1", 1633 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1634 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1635 | "license": "BSD-2-Clause", 1636 | "dependencies": { 1637 | "punycode": "^2.1.0" 1638 | } 1639 | }, 1640 | "node_modules/uuid": { 1641 | "version": "3.4.0", 1642 | "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.4.0.tgz", 1643 | "integrity": "sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A==", 1644 | "deprecated": "Please upgrade to version 7 or higher. Older versions may use Math.random() in certain circumstances, which is known to be problematic. See https://v8.dev/blog/math-random for details.", 1645 | "license": "MIT", 1646 | "bin": { 1647 | "uuid": "bin/uuid" 1648 | } 1649 | }, 1650 | "node_modules/verror": { 1651 | "version": "1.10.0", 1652 | "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", 1653 | "integrity": "sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw==", 1654 | "engines": [ 1655 | "node >=0.6.0" 1656 | ], 1657 | "license": "MIT", 1658 | "dependencies": { 1659 | "assert-plus": "^1.0.0", 1660 | "core-util-is": "1.0.2", 1661 | "extsprintf": "^1.2.0" 1662 | } 1663 | }, 1664 | "node_modules/verror/node_modules/core-util-is": { 1665 | "version": "1.0.2", 1666 | "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.2.tgz", 1667 | "integrity": "sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ==", 1668 | "license": "MIT" 1669 | }, 1670 | "node_modules/which": { 1671 | "version": "2.0.2", 1672 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1673 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1674 | "dev": true, 1675 | "license": "ISC", 1676 | "dependencies": { 1677 | "isexe": "^2.0.0" 1678 | }, 1679 | "bin": { 1680 | "node-which": "bin/node-which" 1681 | }, 1682 | "engines": { 1683 | "node": ">= 8" 1684 | } 1685 | }, 1686 | "node_modules/wrap-ansi": { 1687 | "version": "7.0.0", 1688 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1689 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1690 | "dev": true, 1691 | "license": "MIT", 1692 | "dependencies": { 1693 | "ansi-styles": "^4.0.0", 1694 | "string-width": "^4.1.0", 1695 | "strip-ansi": "^6.0.0" 1696 | }, 1697 | "engines": { 1698 | "node": ">=10" 1699 | }, 1700 | "funding": { 1701 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1702 | } 1703 | }, 1704 | "node_modules/wrap-ansi-cjs": { 1705 | "name": "wrap-ansi", 1706 | "version": "7.0.0", 1707 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1708 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1709 | "dev": true, 1710 | "license": "MIT", 1711 | "dependencies": { 1712 | "ansi-styles": "^4.0.0", 1713 | "string-width": "^4.1.0", 1714 | "strip-ansi": "^6.0.0" 1715 | }, 1716 | "engines": { 1717 | "node": ">=10" 1718 | }, 1719 | "funding": { 1720 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1721 | } 1722 | }, 1723 | "node_modules/xtend": { 1724 | "version": "2.1.2", 1725 | "resolved": "https://registry.npmjs.org/xtend/-/xtend-2.1.2.tgz", 1726 | "integrity": "sha512-vMNKzr2rHP9Dp/e1NQFnLQlwlhp9L/LfvnsVdHxN1f+uggyVI3i08uD14GPvCToPkdsRfyPqIyYGmIk58V98ZQ==", 1727 | "dependencies": { 1728 | "object-keys": "~0.4.0" 1729 | }, 1730 | "engines": { 1731 | "node": ">=0.4" 1732 | } 1733 | }, 1734 | "node_modules/y18n": { 1735 | "version": "5.0.8", 1736 | "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", 1737 | "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", 1738 | "dev": true, 1739 | "license": "ISC", 1740 | "engines": { 1741 | "node": ">=10" 1742 | } 1743 | }, 1744 | "node_modules/yargs": { 1745 | "version": "1.3.3", 1746 | "resolved": "https://registry.npmjs.org/yargs/-/yargs-1.3.3.tgz", 1747 | "integrity": "sha512-7OGt4xXoWJQh5ulgZ78rKaqY7dNWbjfK+UKxGcIlaM2j7C4fqGchyv8CPvEWdRPrHp6Ula/YU8yGRpYGOHrI+g==", 1748 | "license": "MIT/X11" 1749 | }, 1750 | "node_modules/yargs-parser": { 1751 | "version": "21.1.1", 1752 | "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", 1753 | "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", 1754 | "dev": true, 1755 | "license": "ISC", 1756 | "engines": { 1757 | "node": ">=12" 1758 | } 1759 | } 1760 | } 1761 | } 1762 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rn-diff-purge", 3 | "version": "0.1.0", 4 | "type": "module", 5 | "dependencies": { 6 | "get-stdin": "^9.0.0", 7 | "markdown-table": "^3.0.4", 8 | "markdown-to-html": "^0.0.13", 9 | "ramda": "^0.30.1", 10 | "semver": "^7.7.1" 11 | }, 12 | "devDependencies": { 13 | "octokit": "^4.1.1", 14 | "replace-in-file": "^8.3.0" 15 | }, 16 | "license": "ISC", 17 | "packageManager": "yarn@3.6.4" 18 | } 19 | -------------------------------------------------------------------------------- /prettier.config.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | semi: false, 3 | useTabs: true, 4 | singleQuotes: false, 5 | 6 | overrides: [ 7 | { 8 | files: "package.json", 9 | options: { 10 | useTabs: false, 11 | tabWidth: 2, 12 | }, 13 | }, 14 | ], 15 | } 16 | -------------------------------------------------------------------------------- /scripts/compare-releases.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | // when comparing A and B 4 | // if A < B, return 1 5 | // if A == B, return 2 6 | // if A > B, return 3 7 | 8 | import { gt, lt } from "semver" 9 | 10 | const left = process.argv[2] 11 | const right = process.argv[3] 12 | 13 | if (lt(left, right)) { 14 | process.exit(1) 15 | } 16 | if (gt(left, right)) { 17 | process.exit(3) 18 | } 19 | process.exit(2) 20 | -------------------------------------------------------------------------------- /scripts/generate-table.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import { markdownTable } from "markdown-table" 4 | import { map, pipe, range, dropLast, includes, split } from "ramda" 5 | import semver from "semver" 6 | import getStdin from "get-stdin" 7 | 8 | const RepoUrl = "https://github.com/react-native-community/rn-diff-purge" 9 | 10 | const generateTable = async () => { 11 | const isBig = includes("--big", process.argv) 12 | const input = await getStdin() 13 | const releases = dropLast(1, split("\n")(input)) 14 | 15 | // words or phrases of length 12 16 | const comments = [ 17 | "react native", 18 | "this is cool", 19 | "purge time!!", 20 | "i love diffs", 21 | "diffs == fun", 22 | "rn core team", 23 | ] 24 | 25 | const diffTable = [ 26 | [ 27 | "From->To", 28 | ...comments[Math.floor(Math.random() * comments.length)] 29 | .toUpperCase() 30 | .split(""), 31 | ], 32 | ...map((fromRelease) => { 33 | const length = releases.length 34 | return [ 35 | fromRelease, 36 | ...pipe( 37 | map((idx) => { 38 | const toRelease = releases[idx] 39 | if (semver.eq(fromRelease, toRelease)) { 40 | return "X" 41 | } 42 | if (semver.gt(fromRelease, toRelease)) { 43 | return "-" 44 | } 45 | return isBig 46 | ? `[->${toRelease}](${RepoUrl}/compare/release/${fromRelease}..release/${toRelease}) [core](https://github.com/facebook/react-native/compare/v${fromRelease}...v${toRelease})` 47 | : `[->${toRelease}](${RepoUrl}/compare/release/${fromRelease}..release/${toRelease})` 48 | }) 49 | )(range(0, length)), 50 | ] 51 | }, releases), 52 | ] 53 | 54 | console.log(markdownTable(diffTable)) 55 | } 56 | 57 | ;(async () => { 58 | await generateTable() 59 | })() 60 | -------------------------------------------------------------------------------- /scripts/multiple-releases-diffs.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euo pipefail 3 | 4 | releases=( 5 | 0.64.3 6 | ) 7 | 8 | if [ ! -d wt-diffs ]; then 9 | git worktree add wt-diffs diffs 10 | fi 11 | 12 | for i in "${!releases[@]}"; do 13 | vfrom="${releases[$i]}" 14 | echo "For release $vfrom:" 15 | for j in "${!releases[@]}"; do 16 | # Skip if j index is less than or equal to i 17 | if [ $j -le $i ]; then 18 | continue 19 | fi 20 | vto="${releases[$j]}" 21 | 22 | result=0 23 | ./scripts/compare-releases.js "$vfrom" "$vto" || result=$? 24 | 25 | case $result in 26 | 1) 27 | echo "with later release $vto: Generating diff file.." 28 | git diff --binary -w -M15% origin/release/"$vfrom"..origin/release/"$vto" >wt-diffs/diffs/"$vfrom".."$vto".diff 29 | ;; 30 | 3) 31 | echo "with earlier release $vto: Generating diff file.." 32 | git diff --binary -w -M15% origin/release/"$vto"..origin/release/"$vfrom" >wt-diffs/diffs/"$vto".."$vfrom".diff 33 | ;; 34 | *) 35 | echo "Error: Unexpected return code $result from compare-releases.js" 36 | ;; 37 | esac 38 | done 39 | done 40 | -------------------------------------------------------------------------------- /scripts/multiple-releases.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euxo pipefail 3 | 4 | 5 | releases=( 6 | 0.60.0-rc.1 7 | 0.60.0-rc.2 8 | 0.60.0-rc.3 9 | 0.60.0 10 | 0.60.1 11 | 0.60.2 12 | 0.60.3 13 | 0.60.4 14 | ) 15 | 16 | for v in "${releases[@]}" 17 | do 18 | echo $v 19 | ./scripts/new-release.sh $v 20 | done 21 | -------------------------------------------------------------------------------- /scripts/new-release.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | set -euxo pipefail 3 | 4 | ErrorReleaseExists=2 5 | ErrorReleaseArgMissing=3 6 | ErrorReleaseTagExists=4 7 | 8 | AppName=RnDiffApp 9 | AppBaseBranch=app-base 10 | ReleasesFile=RELEASES 11 | ReadmeFile=README.md 12 | ReadmeTable=README_TABLE.md 13 | ReadmeTableBig=README_TABLE_BIG.md 14 | 15 | NumberOfReleases=12 # the number of releases on the table 16 | 17 | IgnorePaths=("README.md") 18 | 19 | function guardMissingArg() { 20 | if [ "$#" -ne 1 ]; then 21 | echo "Release argument missing." 22 | exit "$ErrorReleaseArgMissing" 23 | fi 24 | } 25 | 26 | function guardExisting() { 27 | if grep -qFx "$newRelease" "$ReleasesFile"; then 28 | echo "Release $newRelease already exists!" 29 | exit "$ErrorReleaseExists" 30 | fi 31 | if [ $(git tag -l "version/$newRelease") ]; then 32 | echo "Release tag version/$newRelease already exists!" 33 | exit "$ErrorReleaseTagExists" 34 | fi 35 | } 36 | 37 | function prepare() { 38 | # This git config setting, in combination with the `.gitattributes` file, tells the scripts to not pay attention to some files that don't need to be in the diffs, like the root `.gitignore` of this repo (not the RnDiffApp project). 39 | git config --local diff.nodiff.command true 40 | git pull 41 | npm install 42 | } 43 | 44 | function generateNewReleaseBranch() { 45 | # go to the base app branch 46 | git worktree add wt-app "$AppBaseBranch" 47 | cd wt-app 48 | 49 | # clear any existing stuff 50 | rm -rf "$AppName" 51 | 52 | git pull 53 | # make a new branch 54 | branchName=release/"$newRelease" 55 | git branch -D "$branchName" || true 56 | git checkout -b "$branchName" 57 | 58 | # generate app and remove generated git repo 59 | # if we're generating the template for an -rc release, let's grab cli@next 60 | if [[ $newRelease == *-rc* ]]; then 61 | npx @react-native-community/cli@next init "$AppName" --version "$newRelease" --skip-install 62 | else 63 | npx @react-native-community/cli@latest init "$AppName" --version "$newRelease" --skip-install 64 | fi 65 | 66 | # clean up before committing for diffing 67 | rm -rf "$AppName"/.git 68 | 69 | # commit and push branch 70 | git add "$AppName" 71 | git commit -m "Release $newRelease" 72 | git push origin --delete "$branchName" || git push origin "$branchName" 73 | git tag "version/$newRelease" # @react-native-community/cli needs this 74 | git push --set-upstream origin "$branchName" --tags 75 | 76 | # go back to master 77 | cd .. 78 | rm -rf wt-app 79 | git worktree prune 80 | } 81 | 82 | function addReleaseToList() { 83 | echo "$newRelease" >>"$ReleasesFile" 84 | 85 | if command -v tac; then 86 | # take each line ->dedup-> sort them -> reverse them -> save them 87 | cat "$ReleasesFile" | uniq | xargs npx --silent semver | tac > tmpfile 88 | else 89 | # take each line ->dedup-> sort them -> reverse them -> save them 90 | cat "$ReleasesFile" | uniq | xargs npx --silent semver | tail -r > tmpfile 91 | fi 92 | 93 | mv tmpfile "$ReleasesFile" 94 | } 95 | 96 | function generateDiffs() { 97 | if [ ! -d wt-diffs ]; then 98 | git worktree add wt-diffs diffs 99 | fi 100 | 101 | cd wt-diffs 102 | git pull 103 | cd .. 104 | 105 | echo "For release $newRelease:" 106 | IFS=$'\n' GLOBIGNORE='*' command eval 'releases=($(cat "$ReleasesFile"))' 107 | for existingRelease in "${releases[@]}"; do 108 | 109 | ignoreArgs=() 110 | for path in "${IgnorePaths[@]}"; do 111 | ignoreArgs+=(":!$path") 112 | done 113 | 114 | result=0 115 | ./scripts/compare-releases.js "$newRelease" "$existingRelease" || result=$? 116 | 117 | case $result in 118 | 1) 119 | echo "with later release $existingRelease: Generating diff file.." 120 | git diff --binary -w -M15% origin/release/"$newRelease"..origin/release/"$existingRelease" -- . "${ignoreArgs[@]}" >wt-diffs/diffs/"$newRelease".."$existingRelease".diff 121 | ;; 122 | 2) 123 | echo "with same release $existingRelease: Skipping.." 124 | continue 125 | ;; 126 | 3) 127 | echo "with earlier release $existingRelease: Generating diff file.." 128 | git diff --binary -w -M15% origin/release/"$existingRelease"..origin/release/"$newRelease" -- . "${ignoreArgs[@]}" >wt-diffs/diffs/"$existingRelease".."$newRelease".diff 129 | ;; 130 | *) 131 | echo "Error: Unexpected return code $result from compare-releases.js" 132 | ;; 133 | esac 134 | done 135 | 136 | cd wt-diffs 137 | git add . 138 | git commit -m "Add release $newRelease diffs" || true 139 | git push 140 | cd .. 141 | } 142 | 143 | function pushMaster() { 144 | git add . 145 | git commit -m "Add release $newRelease" 146 | git push 147 | } 148 | 149 | function generateTable() { 150 | head -n "$NumberOfReleases" "$ReleasesFile" | ./scripts/generate-table.js >"$ReadmeTable" 151 | } 152 | 153 | function generateBigTable() { 154 | cat "$ReleasesFile" | ./scripts/generate-table.js --big >"$ReadmeTableBig" 155 | } 156 | 157 | ReadmeHeader=README_HEADER.md 158 | ReadmeFooter=README_FOOTER.md 159 | 160 | function breakUpReadme() { 161 | perl -p0e 's/(.*## Diff table[^\n]*\n\n)(.*)/$1/smg' "$ReadmeFile" >"$ReadmeHeader" 162 | perl -p0e 's/(.*)(\n## To see.*)/$2/smg' "$ReadmeFile" >"$ReadmeFooter" 163 | } 164 | 165 | function makeUpReadme() { 166 | cat "$ReadmeHeader" "$ReadmeTable" "$ReadmeFooter" >"$ReadmeFile" 167 | } 168 | 169 | function generateReadme() { 170 | breakUpReadme 171 | makeUpReadme 172 | } 173 | 174 | function generateGHPages() { 175 | cp docs/_index.html docs/index.html 176 | npx markdown "$ReadmeTableBig" >>docs/index.html 177 | } 178 | 179 | function cleanUp() { 180 | rm -rf "$ReadmeHeader" "$ReadmeFooter" "$ReadmeTable" "$ReadmeTableBig" 181 | rm -rf wt-app 182 | git worktree prune 183 | } 184 | 185 | guardMissingArg $* 186 | newRelease=${1#v} 187 | 188 | guardExisting 189 | 190 | prepare 191 | generateNewReleaseBranch 192 | addReleaseToList 193 | generateDiffs 194 | 195 | generateTable 196 | generateReadme 197 | 198 | generateBigTable 199 | generateGHPages 200 | 201 | cleanUp 202 | pushMaster 203 | -------------------------------------------------------------------------------- /scripts/notify-new-release.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import { Octokit } from "octokit" 4 | 5 | const repositoryData = { 6 | owner: "react-native-community", 7 | repo: "rn-diff-purge", 8 | } 9 | 10 | const releasesFileName = "RELEASES" 11 | 12 | ;(async () => { 13 | const octokit = new Octokit({ auth: process.env.SPECIAL_GITHUB_TOKEN }) 14 | 15 | await Promise.all( 16 | ( 17 | await octokit.rest.repos.listCommits(repositoryData) 18 | ).data.map(async ({ sha: commitRef }) => { 19 | const { files } = ( 20 | await octokit.rest.repos.getCommit({ 21 | ...repositoryData, 22 | ref: commitRef, 23 | }) 24 | ).data 25 | 26 | const [releaseFile] = files.filter( 27 | ({ filename }) => filename === releasesFileName 28 | ) 29 | 30 | if (!releaseFile) { 31 | console.log(`No release file changed on commit ${commitRef}, moving on`) 32 | return 33 | } 34 | 35 | console.log( 36 | `Release file changed on commit ${commitRef}, sending notification` 37 | ) 38 | 39 | await octokit.rest.repos.createDispatchEvent({ 40 | ...repositoryData, 41 | repo: "upgrade-support", 42 | event_type: "NEW_RELEASE", 43 | }) 44 | }) 45 | ) 46 | })() 47 | -------------------------------------------------------------------------------- /scripts/prune-diffs.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import fs from "fs" 4 | import path from "path" 5 | import semver from "semver" 6 | 7 | const MINIMUM_STORED_VERSION = "0.65.0" 8 | 9 | const DIFFS_DIR = "./wt-diffs/diffs" 10 | 11 | function pruneDiffFiles() { 12 | const files = fs.readdirSync(DIFFS_DIR) 13 | 14 | files.forEach((file) => { 15 | // Only consider files ending with '.patch' 16 | if (path.extname(file) !== ".diff") return 17 | 18 | const [fromVersion, toVersionWithExt] = file.split("..") 19 | const [toVersion] = toVersionWithExt.split(".diff") 20 | 21 | if ( 22 | semver.lt(fromVersion, MINIMUM_STORED_VERSION) || 23 | semver.lt(toVersion, MINIMUM_STORED_VERSION) 24 | ) { 25 | const filePath = path.join(DIFFS_DIR, file) 26 | fs.unlinkSync(filePath) 27 | console.log(`Removed diff file: ${file}`) 28 | } 29 | }) 30 | } 31 | 32 | function pruneRELEASESFile() { 33 | const releasesContent = fs.readFileSync("RELEASES", "utf8") 34 | const releases = releasesContent.split("\n").filter(Boolean) // Remove empty lines 35 | 36 | const keptReleases = releases.filter(version => 37 | !semver.lt(version, MINIMUM_STORED_VERSION) 38 | ) 39 | 40 | fs.writeFileSync("RELEASES", keptReleases.join("\n") + "\n") 41 | 42 | const removedCount = releases.length - keptReleases.length 43 | console.log(`Removed ${removedCount} old releases from RELEASES file`) 44 | } 45 | 46 | const exists = fs.existsSync(DIFFS_DIR) 47 | if (!exists) { 48 | console.log("Diffs worktree does not exist.") 49 | console.log("Use `git worktree add wt-diffs diffs` to create it.") 50 | process.exit(1) 51 | } 52 | 53 | pruneDiffFiles() 54 | pruneRELEASESFile() 55 | -------------------------------------------------------------------------------- /scripts/remove-something-from-diffs.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import fs from "fs" 4 | import {replaceInFileSync} from "replace-in-file" 5 | 6 | const diffsDir = "wt-diffs/diffs" 7 | 8 | const removeSomething = async () => { 9 | const allFiles = await fs.readdirSync(diffsDir) 10 | 11 | // separate files list in smaller chunks to avoid the `too many files open` errors 12 | while (allFiles.length) { 13 | const fewFiles = allFiles.splice(0, 10) 14 | fewFiles.forEach((file) => { 15 | const fullpath = `${diffsDir}/${file}` 16 | // const fullpath = `wt-diffs/diffs/0.43.1..0.67.5.diff` 17 | console.log(fullpath) 18 | 19 | // if (!fullpath.includes("..0.71.19.diff")) { 20 | // return 21 | // } 22 | 23 | // check on https://regex101.com 24 | const toBeReplaced = /diff --git a\/.gitignore b\/.gitignore.*?diff/s 25 | 26 | replaceInFileSync({ 27 | files: fullpath, 28 | from: new RegExp(toBeReplaced), 29 | to: "diff", 30 | }) 31 | }) 32 | } 33 | } 34 | 35 | ;(async () => { 36 | await removeSomething() 37 | })() 38 | --------------------------------------------------------------------------------