├── .eslintignore ├── .eslintrc.js ├── .gitattributes ├── .github ├── dependabot.yml └── workflows │ ├── ci.yml │ ├── demo.yml │ ├── release.yml │ ├── synced-dependabot-pr-recreate.yml │ ├── synced-pr-auto-assign.yml │ ├── synced-pr-automation-auto-assign.yml │ └── synced-process-todo-comments.yml ├── .gitignore ├── .mergify.yml ├── .prettierignore ├── .prettierrc.js ├── .releaserc.yml ├── .vscode └── settings.json ├── README.md ├── action.yml ├── dist └── index.js ├── index.js ├── package-lock.json ├── package.json └── src ├── context.js ├── git.js ├── index.js ├── log.js └── utils.js /.eslintignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | tmp*/ 3 | node_modules/ -------------------------------------------------------------------------------- /.eslintrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | env: { 3 | es6: true, 4 | }, 5 | extends: ["prettier"], 6 | parserOptions: { 7 | ecmaVersion: 2018, 8 | }, 9 | plugins: ["prettier", "sort-keys-fix", "node"], 10 | rules: { 11 | "no-unused-vars": ["error"], 12 | "node/global-require": ["error"], 13 | "prettier/prettier": ["error"], 14 | "sort-keys-fix/sort-keys-fix": ["error"], 15 | }, 16 | }; 17 | -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Fix end-of-lines in Git versions older than 2.10 2 | # https://github.com/git/git/blob/master/Documentation/RelNotes/2.10.0.txt#L248 3 | * text=auto eol=lf -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | version: 2 2 | updates: 3 | - package-ecosystem: npm 4 | directory: "/" 5 | schedule: 6 | interval: weekly 7 | time: "01:00" 8 | timezone: Europe/Berlin 9 | open-pull-requests-limit: 99 10 | - package-ecosystem: "github-actions" 11 | directory: "/" 12 | schedule: 13 | interval: weekly 14 | time: "01:00" 15 | timezone: Europe/Berlin 16 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: "Build" 2 | on: [push, pull_request] 3 | jobs: 4 | build: 5 | runs-on: ubuntu-latest 6 | steps: 7 | - uses: actions/checkout@v4 8 | - run: | 9 | npm ci 10 | npm run lint:all 11 | npm run build 12 | -------------------------------------------------------------------------------- /.github/workflows/demo.yml: -------------------------------------------------------------------------------- 1 | name: Demo 2 | "on": 3 | schedule: 4 | - cron: "0 3 * * *" 5 | push: 6 | jobs: 7 | file-sync: 8 | name: File Sync 9 | runs-on: ubuntu-latest 10 | steps: 11 | - uses: actions/checkout@v4 12 | - uses: ./ 13 | name: "Simple" 14 | with: 15 | DRY_RUN: true 16 | FILE_PATTERNS: | 17 | ^README.md$ 18 | ^.github/workflows/sync-.* 19 | TARGET_REPOS: | 20 | adrianjost/files-sync-target:main 21 | GITHUB_TOKEN: ${{ secrets.SYNCED_GITHUB_TOKEN }} 22 | - uses: ./ 23 | name: "With custom roots" 24 | with: 25 | DRY_RUN: true 26 | FILE_PATTERNS: | 27 | .*\.js 28 | TARGET_REPOS: | 29 | adrianjost/files-sync-target 30 | SRC_ROOT: "/src/" 31 | TARGET_ROOT: "/target/" 32 | GITHUB_TOKEN: ${{ secrets.SYNCED_GITHUB_TOKEN }} 33 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: "Release" 2 | on: 3 | push: 4 | branches: 5 | - master 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v4 11 | with: 12 | token: ${{ secrets.SYNCED_GITHUB_TOKEN }} 13 | ref: "master" 14 | - name: Keep dist up-to-date 15 | run: | 16 | npm ci 17 | npm run build 18 | git config --local user.email "action@github.com" 19 | git config --local user.name "GitHub Action" 20 | git add dist/index.js 21 | git commit -m "chore: publish dist" || echo "nothing to commit" 22 | git push origin master 23 | - uses: actions/checkout@v4 24 | with: 25 | ref: master 26 | - name: Test Action 27 | uses: ./ 28 | with: 29 | DRY_RUN: true 30 | FILE_PATTERNS: | 31 | ^README.md$ 32 | ^.github/workflows/sync-.* 33 | TARGET_REPOS: | 34 | adrianjost/files-sync-target 35 | GITHUB_TOKEN: ${{ secrets.SYNCED_GITHUB_TOKEN }} 36 | - name: Checkout 37 | uses: actions/checkout@v4 38 | with: 39 | ref: master 40 | - name: Semantic Release 41 | uses: cycjimmy/semantic-release-action@v4 42 | with: 43 | semantic_version: 18 44 | extra_plugins: | 45 | "@semantic-release/commit-analyzer@v9.0.2" 46 | "@semantic-release/release-notes-generator@v10.0.3" 47 | "@semantic-release/git@v10.0.1" 48 | "@semantic-release/github@v8.1.0" 49 | env: 50 | GH_TOKEN: ${{ secrets.GITHUB_TOKEN }} 51 | -------------------------------------------------------------------------------- /.github/workflows/synced-dependabot-pr-recreate.yml: -------------------------------------------------------------------------------- 1 | # GENERATED CONTENT 2 | # remove repo from adrianjost/.github/synced/workflows/generator.js before editing 3 | name: PR Automation 4 | 'on': 5 | issue_comment: 6 | types: 7 | - created 8 | jobs: 9 | dependabot-recreate: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - name: listen for PR Comments 13 | uses: machine-learning-apps/actions-chatops@master 14 | with: 15 | TRIGGER_PHRASE: Someone with write access should tell dependabot to recreate this PR. 16 | env: 17 | GITHUB_TOKEN: ${{ secrets.SYNCED_GITHUB_TOKEN }} 18 | id: prcomm 19 | - name: tell dependabot to recreate pr 20 | if: steps.prcomm.outputs.BOOL_TRIGGERED == 'true' 21 | uses: peter-evans/create-or-update-comment@v4 22 | with: 23 | token: ${{ secrets.SYNCED_GITHUB_TOKEN }} 24 | issue-number: ${{ steps.prcomm.outputs.PULL_REQUEST_NUMBER }} 25 | body: '@dependabot recreate' 26 | -------------------------------------------------------------------------------- /.github/workflows/synced-pr-auto-assign.yml: -------------------------------------------------------------------------------- 1 | # GENERATED CONTENT 2 | # remove repo from adrianjost/.github/synced/workflows/generator.js before editing 3 | name: PR Automation 4 | 'on': 5 | pull_request: 6 | types: 7 | - opened 8 | jobs: 9 | assign-author: 10 | name: Assign author to PR 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Assign author to PR 14 | uses: technote-space/assign-author@v1 15 | -------------------------------------------------------------------------------- /.github/workflows/synced-pr-automation-auto-assign.yml: -------------------------------------------------------------------------------- 1 | # GENERATED CONTENT 2 | # remove repo from adrianjost/.github/synced/workflows/generator.js before editing 3 | name: PR Automation 4 | 'on': 5 | pull_request: 6 | types: 7 | - opened 8 | jobs: 9 | assign-author: 10 | name: Assign author to PR 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Assign author to PR 14 | uses: technote-space/assign-author@v1 15 | -------------------------------------------------------------------------------- /.github/workflows/synced-process-todo-comments.yml: -------------------------------------------------------------------------------- 1 | # GENERATED CONTENT 2 | # remove repo from adrianjost/.github/synced/workflows/generator.js before editing 3 | name: Process TODO comments 4 | 'on': 5 | push: 6 | branches: 7 | - master 8 | - main 9 | jobs: 10 | collectTODO: 11 | name: Collect TODO 12 | runs-on: ubuntu-latest 13 | steps: 14 | - uses: actions/checkout@v4 15 | with: 16 | token: ${{ secrets.SYNCED_GITHUB_TOKEN }} 17 | - name: Collect TODO 18 | uses: dtinth/todo-actions@master 19 | env: 20 | GITHUB_TOKEN: ${{ secrets.SYNCED_GITHUB_TOKEN }} 21 | TODO_ACTIONS_MONGO_URL: ${{ secrets.SYNCED_TODO_ACTIONS_MONGO_URL }} 22 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Dependency directory 2 | node_modules 3 | tmp* 4 | 5 | # Rest pulled from https://github.com/github/gitignore/blob/master/Node.gitignore 6 | # Logs 7 | logs 8 | *.log 9 | npm-debug.log* 10 | yarn-debug.log* 11 | yarn-error.log* 12 | lerna-debug.log* 13 | 14 | # Diagnostic reports (https://nodejs.org/api/report.html) 15 | report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json 16 | 17 | # Runtime data 18 | pids 19 | *.pid 20 | *.seed 21 | *.pid.lock 22 | 23 | # Directory for instrumented libs generated by jscoverage/JSCover 24 | lib-cov 25 | 26 | # Coverage directory used by tools like istanbul 27 | coverage 28 | *.lcov 29 | 30 | # Optional npm cache directory 31 | .npm 32 | 33 | # Optional eslint cache 34 | .eslintcache 35 | 36 | # Optional REPL history 37 | .node_repl_history 38 | 39 | # Output of 'npm pack' 40 | *.tgz 41 | 42 | # Yarn Integrity file 43 | .yarn-integrity 44 | 45 | # dotenv environment variables file 46 | .env 47 | .env.test 48 | 49 | # OS metadata 50 | .DS_Store 51 | Thumbs.db 52 | 53 | # Ignore built ts files 54 | __tests__/runner/* 55 | lib/**/* 56 | 57 | test.js -------------------------------------------------------------------------------- /.mergify.yml: -------------------------------------------------------------------------------- 1 | # GENERATED CONTENT 2 | # remove repo from adrianjost/.github/synced/workflows/generator.js before editing 3 | queue_rules: 4 | - name: auto merge when ready to merge label is set 5 | queue_conditions: 6 | - label=ready to merge 7 | merge_conditions: [] 8 | merge_method: merge 9 | - name: branchProtection 10 | queue_conditions: 11 | - author~=dependabot(-preview)?\[bot\] 12 | merge_conditions: 13 | - '-merged' 14 | merge_method: squash 15 | pull_request_rules: 16 | - name: label PRs with conflicts 17 | conditions: 18 | - conflict 19 | actions: 20 | label: 21 | add: 22 | - has conflicts 23 | - name: remove has conflicts label if conflicts got resolved 24 | conditions: 25 | - label~=has conflicts 26 | - '-conflict' 27 | actions: 28 | label: 29 | remove: 30 | - has conflicts 31 | - name: let @adrianjost recreate dependabot PRs with conflicts 32 | conditions: 33 | - author~=dependabot(-preview)?\[bot\] 34 | - conflict 35 | actions: 36 | comment: 37 | message: Someone with write access should tell dependabot to recreate this PR. 38 | - name: auto merge passing Dependabot pull requests + auto merge when ready to merge label is set 39 | conditions: [] 40 | actions: 41 | queue: {} 42 | - name: remove ready to merge when merged 43 | conditions: 44 | - merged 45 | - label=ready to merge 46 | actions: 47 | label: 48 | remove: 49 | - ready to merge 50 | - name: delete merged branches 51 | conditions: 52 | - merged 53 | - label!=WIP 54 | actions: 55 | delete_head_branch: {} 56 | priority_rules: 57 | - name: priority for queue `auto merge when ready to merge label is set` 58 | conditions: 59 | - label=ready to merge 60 | priority: 2250 61 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | tmp*/ 3 | node_modules/ -------------------------------------------------------------------------------- /.prettierrc.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | printWidth: 80, 3 | useTabs: true, // we are using tabs! http://lea.verou.me/2012/01/why-tabs-are-clearly-superior/ 4 | trailingComma: "es5", 5 | bracketSpacing: true, 6 | jsxBracketSameLine: false, 7 | arrowParens: "always", 8 | proseWrap: "never", 9 | htmlWhitespaceSensitivity: "strict", 10 | endOfLine: "lf", 11 | semi: true, 12 | singleQuote: false, 13 | }; 14 | -------------------------------------------------------------------------------- /.releaserc.yml: -------------------------------------------------------------------------------- 1 | branches: 2 | - master 3 | plugins: 4 | - "@semantic-release/commit-analyzer" 5 | - "@semantic-release/release-notes-generator" 6 | - "@semantic-release/git" 7 | - "@semantic-release/github" 8 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.formatOnSave": true 3 | } 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Files Sync Action 2 | 3 | [![Build](https://github.com/adrianjost/files-sync-action/workflows/Build/badge.svg)](https://github.com/adrianjost/files-sync-action/actions?query=workflow%3ABuild) [![Release](https://github.com/adrianjost/files-sync-action/workflows/Release/badge.svg)](https://github.com/adrianjost/files-sync-action/actions?query=workflow%3ARelease) ![GitHub contributors](https://img.shields.io/github/contributors/adrianjost/files-sync-action?color=bright-green) 4 | 5 | [![semantic-release](https://img.shields.io/badge/%20%20%F0%9F%93%A6%F0%9F%9A%80-semantic--release-e10079.svg)](https://github.com/semantic-release/semantic-release) 6 | 7 | A Github Action that can sync files from one repository to many others. This action allows a maintainer to define community health files in a single repository and have them synced to all other repositories in the Github organization or beyond. You could sync common GitHub Action Workflows, your LICENSE or any other file you can imagine. Regex is used to select the files. Exclude is currently not supported and it is recommended to use a bot user if possible. 8 | 9 | ## Inputs 10 | 11 | ### `GITHUB_TOKEN` 12 | 13 | **Required** Token to use to get repos and write secrets. `${{secrets.GITHUB_TOKEN}}` will **not** work. 14 | 15 | ### `GITHUB_SERVER` 16 | 17 | Configurable GitHub Server (to support GitHub Enterprise deployments). If not specified, will default to `github.com`. Should not include `http(s)://`. Should also not include trailing `/` character. 18 | 19 | ### `SRC_REPO` 20 | 21 | Source of truth for all files to sync. If files get added, modified or deleted here, those changes will be synced to all TARGET_REPOS. Defaults to the workflows repository (`$GITHUB_REPOSITORY`). A custom branch can be defined by adding the branchname after a colon behind the SRC_REPO. `repoSlug` or `repoSlug:branchName` 22 | 23 | ### `TARGET_REPOS` 24 | 25 | **Required** New line deliminated list of repositories. Repositories are limited to those in which the token user is an owner or collaborator. A custom branch can be defined for each repo by adding the branchname after a colon behind the repoSlug. `repoSlug` or `repoSlug:branchName`. The custom branch must already exist in the target repo. 26 | 27 | ### `FILE_PATTERNS` 28 | 29 | **Required** New line deliminated regex expressions to select files from the source repository. All matching files in the target repository will be 30 | 31 | 1. deleted if not present in the `SRC_REPO`, and `SKIP_DELETE` is `false` 32 | 2. overwritten from the `SRC_REPO` if they already exist in the `TARGET_REPO` 33 | 3. created in the `TARGET_REPO`, if they do not exist yet there. 34 | 35 | All filepaths start at the repository root without a leading slash. The delimiter between path segments is always a forward slash. 36 | 37 | ### `SRC_ROOT` 38 | 39 | Prepends this to all filepaths in the source repository. Defaults to `/`. 40 | 41 | ### `TARGET_ROOT` 42 | 43 | Prepends this to all filepaths in the target repository. It is the same for all target repositories and cannot be adjusted on a per repo basis. Defaults to `/`. 44 | 45 | ### `COMMIT_MESSAGE` 46 | 47 | The commit message that will be used to commit the changed files. Check the README for all interpolation options. You can interpolate values by using placeholders in the form of `%KEY%` where key can be one of the following items: 48 | 49 | | key | description | 50 | | ------------- | ------------------------------------------ | 51 | | `SRC_REPO` | The value from the according action input. | 52 | | `TARGET_REPO` | The current repo to commit into | 53 | 54 | You need more? Let me know by [opening an issue here](https://github.com/adrianjost/files-sync-action/issues/new). I will do my best to add them. 55 | 56 | ### `SKIP_DELETE` 57 | 58 | Will omit all delete operations for matching files present in `TARGET_REPO` but not existant in `SRC_REPO` if set to `true`. Defaults to `false`. 59 | 60 | ### `SKIP_REPLACE` 61 | 62 | Will omit all write operations for matching files present in `SRC_REPO` and `TARGET_REPO` if set to `true`. Defaults to `false`. 63 | 64 | ### `TEMP_DIR` 65 | 66 | The working directory where all sync operations will be done. Defaults to `tmp-${Date.now().toString()}` 67 | 68 | ### `SKIP_CLEANUP` 69 | 70 | If set to `true` or `1`, the cleanup step to remove the temporary workding directory at the end will be skipped. Usefull for debugging purposes. Defaults to `false`. 71 | 72 | ### `GIT_EMAIL` 73 | 74 | The e-mail address used to commit the synced files. Defaults to `${process.env.GITHUB_ACTOR}@users.noreply.github.com`. 75 | 76 | ### `GIT_USERNAME` 77 | 78 | The username used to commit the synced files. Defaults to `process.env.GITHUB_ACTOR`. 79 | 80 | ### `DRY_RUN` 81 | 82 | Run everything except for secret create and update functionality. Defaults to `false`. 83 | 84 | ## Usage 85 | 86 | ```yaml 87 | uses: adrianjost/files-sync-action@v2.1.0 88 | with: 89 | FILE_PATTERNS: | 90 | ^LICENSE$ 91 | ^.github/workflows/sync-.* 92 | TARGET_REPOS: | 93 | adrianjost/files-sync-target 94 | any/other-repo:customBranch 95 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN_FILES }} 96 | ``` 97 | 98 | See the workflows in [this repository](https://github.com/adrianjost/.github) for another example. 99 | 100 | ## Planned Features 101 | 102 | - [ ] allow RegExp for repo selection just like in [google/secrets-sync-action](https://github.com/google/secrets-sync-action) allows it. 103 | 104 | ## Local Testing 105 | 106 | Create `./test.js` with the following content to execute the code locally. 107 | 108 | ``` 109 | process.env.INPUT_SRC_REPO = "adrianjost/files-sync-action"; 110 | process.env.INPUT_TARGET_REPOS = "adrianjost/files-sync-target"; 111 | process.env.INPUT_GITHUB_TOKEN = "YOUR_GITHUB_TOKEN"; 112 | process.env.INPUT_FILE_PATTERNS = "^README.md$"; 113 | process.env.INPUT_SKIP_CLEANUP = "false"; 114 | process.env.GITHUB_ACTOR = "adrianjost"; 115 | process.env.INPUT_DRY_RUN = "true"; 116 | 117 | require("./index"); 118 | ``` 119 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: Files Sync Action 2 | author: Adrian Jost 3 | branding: 4 | color: green 5 | icon: copy 6 | description: Copies files from the action's environment (or any other repo) to many other repos. 7 | inputs: 8 | COMMIT_MESSAGE: 9 | description: | 10 | The commit message that will be used to commit the changed files. Check the README for all interpolation options. 11 | required: false 12 | DRY_RUN: 13 | description: | 14 | Run everything except for the copying, removing and commiting functionality. 15 | required: false 16 | FILE_PATTERNS: 17 | description: | 18 | New line deliminated regex expressions to select files from the source repository. All filpaths start with the repos fullname without a leading slash. The delimiter between path segments is a forward slash. 19 | required: true 20 | GITHUB_TOKEN: 21 | description: Token to use to get repos and write secrets 22 | required: true 23 | GITHUB_SERVER: 24 | description: | 25 | Specify a GitHub Server other than github.com (for GitHub Enterprise deployment support) 26 | required: false 27 | GIT_EMAIL: 28 | description: | 29 | The e-mail address used to commit the synced files. Defaults to $GITHUB_ACTOR@users.noreply.github.com 30 | required: false 31 | GIT_USERNAME: 32 | description: | 33 | The username used to commit the synced files. Defaults to $GITHUB_ACTOR 34 | required: false 35 | SKIP_DELETE: 36 | description: | 37 | Will omit all delete operations for matching files present in `TARGET_REPO` but not existant in `SRC_REPO` if set to `true`. Defaults to `false`. 38 | required: false 39 | SKIP_REPLACE: 40 | description: | 41 | Will omit all write operations for matching files present in `SRC_REPO` and `TARGET_REPO` if set to `true`. Defaults to `false`. 42 | required: false 43 | SKIP_CLEANUP: 44 | description: | 45 | If set to true or 1, the cleanup step to remove the temporary workding directory at the end will be skipped. Usefull for debugging purposes. 46 | required: false 47 | SRC_REPO: 48 | description: | 49 | Repo from where files should be synced from. Defaults to $GITHUB_REPOSITORY. A custom branch can be defined by adding the branchname after a colon behind the SRC_REPO. `repoSlug` or `repoSlug:branchName` 50 | required: false 51 | TARGET_REPOS: 52 | description: | 53 | New line deliminated list of repositories. Repositires are limited to those in which the token user is an owner or collaborator. A custom branch can be defined for each repo by adding the branchname after a colon behind the repoSlug. `repoSlug` or `repoSlug:branchName` 54 | required: true 55 | TMPDIR: 56 | description: | 57 | The working directory where all sync operations will be done. Defaults to `tmp-${Date.now().toString()}` 58 | required: false 59 | SRC_ROOT: 60 | description: | 61 | Prepends this to all filepaths in the source repository. Defaults to `/`. 62 | required: false 63 | TARGET_ROOT: 64 | description: | 65 | Prepends this to all filepaths in the target repository. Defaults to `/`. 66 | required: false 67 | runs: 68 | main: dist/index.js 69 | using: node20 70 | -------------------------------------------------------------------------------- /index.js: -------------------------------------------------------------------------------- 1 | const core = require("@actions/core"); 2 | try { 3 | // eslint-disable-next-line node/global-require 4 | require("./src/index")(); 5 | } catch (error) { 6 | core.setFailed(`Action failed with error ${error}`); 7 | } 8 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "files-sync-action", 3 | "version": "0.0.0", 4 | "lockfileVersion": 2, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "files-sync-action", 9 | "version": "0.0.0", 10 | "dependencies": { 11 | "@actions/core": "^1.11.1", 12 | "@actions/github": "^6.0.1", 13 | "@putout/git-status-porcelain": "^3.0.0", 14 | "recursive-readdir": "^2.2.3", 15 | "rimraf": "^6.0.1" 16 | }, 17 | "devDependencies": { 18 | "@vercel/ncc": "^0.38.3", 19 | "eslint": "^8.57.0", 20 | "eslint-config-prettier": "^10.1.5", 21 | "eslint-plugin-node": "^11.1.0", 22 | "eslint-plugin-prettier": "^5.4.1", 23 | "eslint-plugin-sort-keys-fix": "^1.1.2", 24 | "husky": "^9.1.7", 25 | "prettier": "^3.5.3" 26 | } 27 | }, 28 | "node_modules/@aashutoshrathi/word-wrap": { 29 | "version": "1.2.6", 30 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 31 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 32 | "dev": true, 33 | "engines": { 34 | "node": ">=0.10.0" 35 | } 36 | }, 37 | "node_modules/@actions/core": { 38 | "version": "1.11.1", 39 | "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz", 40 | "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==", 41 | "dependencies": { 42 | "@actions/exec": "^1.1.1", 43 | "@actions/http-client": "^2.0.1" 44 | } 45 | }, 46 | "node_modules/@actions/exec": { 47 | "version": "1.1.1", 48 | "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz", 49 | "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==", 50 | "dependencies": { 51 | "@actions/io": "^1.0.1" 52 | } 53 | }, 54 | "node_modules/@actions/github": { 55 | "version": "6.0.1", 56 | "resolved": "https://registry.npmjs.org/@actions/github/-/github-6.0.1.tgz", 57 | "integrity": "sha512-xbZVcaqD4XnQAe35qSQqskb3SqIAfRyLBrHMd/8TuL7hJSz2QtbDwnNM8zWx4zO5l2fnGtseNE3MbEvD7BxVMw==", 58 | "license": "MIT", 59 | "dependencies": { 60 | "@actions/http-client": "^2.2.0", 61 | "@octokit/core": "^5.0.1", 62 | "@octokit/plugin-paginate-rest": "^9.2.2", 63 | "@octokit/plugin-rest-endpoint-methods": "^10.4.0", 64 | "@octokit/request": "^8.4.1", 65 | "@octokit/request-error": "^5.1.1", 66 | "undici": "^5.28.5" 67 | } 68 | }, 69 | "node_modules/@actions/http-client": { 70 | "version": "2.2.0", 71 | "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.0.tgz", 72 | "integrity": "sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==", 73 | "dependencies": { 74 | "tunnel": "^0.0.6", 75 | "undici": "^5.25.4" 76 | } 77 | }, 78 | "node_modules/@actions/io": { 79 | "version": "1.1.3", 80 | "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz", 81 | "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==" 82 | }, 83 | "node_modules/@eslint-community/eslint-utils": { 84 | "version": "4.4.0", 85 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 86 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 87 | "dev": true, 88 | "dependencies": { 89 | "eslint-visitor-keys": "^3.3.0" 90 | }, 91 | "engines": { 92 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 93 | }, 94 | "peerDependencies": { 95 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 96 | } 97 | }, 98 | "node_modules/@eslint-community/regexpp": { 99 | "version": "4.6.2", 100 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", 101 | "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", 102 | "dev": true, 103 | "engines": { 104 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 105 | } 106 | }, 107 | "node_modules/@eslint/eslintrc": { 108 | "version": "2.1.4", 109 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", 110 | "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 111 | "dev": true, 112 | "dependencies": { 113 | "ajv": "^6.12.4", 114 | "debug": "^4.3.2", 115 | "espree": "^9.6.0", 116 | "globals": "^13.19.0", 117 | "ignore": "^5.2.0", 118 | "import-fresh": "^3.2.1", 119 | "js-yaml": "^4.1.0", 120 | "minimatch": "^3.1.2", 121 | "strip-json-comments": "^3.1.1" 122 | }, 123 | "engines": { 124 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 125 | }, 126 | "funding": { 127 | "url": "https://opencollective.com/eslint" 128 | } 129 | }, 130 | "node_modules/@eslint/js": { 131 | "version": "8.57.0", 132 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", 133 | "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", 134 | "dev": true, 135 | "engines": { 136 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 137 | } 138 | }, 139 | "node_modules/@fastify/busboy": { 140 | "version": "2.0.0", 141 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", 142 | "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==", 143 | "engines": { 144 | "node": ">=14" 145 | } 146 | }, 147 | "node_modules/@humanwhocodes/config-array": { 148 | "version": "0.11.14", 149 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", 150 | "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", 151 | "dev": true, 152 | "dependencies": { 153 | "@humanwhocodes/object-schema": "^2.0.2", 154 | "debug": "^4.3.1", 155 | "minimatch": "^3.0.5" 156 | }, 157 | "engines": { 158 | "node": ">=10.10.0" 159 | } 160 | }, 161 | "node_modules/@humanwhocodes/module-importer": { 162 | "version": "1.0.1", 163 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 164 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 165 | "dev": true, 166 | "engines": { 167 | "node": ">=12.22" 168 | }, 169 | "funding": { 170 | "type": "github", 171 | "url": "https://github.com/sponsors/nzakas" 172 | } 173 | }, 174 | "node_modules/@humanwhocodes/object-schema": { 175 | "version": "2.0.2", 176 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", 177 | "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", 178 | "dev": true 179 | }, 180 | "node_modules/@isaacs/cliui": { 181 | "version": "8.0.2", 182 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 183 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 184 | "dependencies": { 185 | "string-width": "^5.1.2", 186 | "string-width-cjs": "npm:string-width@^4.2.0", 187 | "strip-ansi": "^7.0.1", 188 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 189 | "wrap-ansi": "^8.1.0", 190 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 191 | }, 192 | "engines": { 193 | "node": ">=12" 194 | } 195 | }, 196 | "node_modules/@isaacs/cliui/node_modules/ansi-regex": { 197 | "version": "6.0.1", 198 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 199 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 200 | "engines": { 201 | "node": ">=12" 202 | }, 203 | "funding": { 204 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 205 | } 206 | }, 207 | "node_modules/@isaacs/cliui/node_modules/strip-ansi": { 208 | "version": "7.1.0", 209 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 210 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 211 | "dependencies": { 212 | "ansi-regex": "^6.0.1" 213 | }, 214 | "engines": { 215 | "node": ">=12" 216 | }, 217 | "funding": { 218 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 219 | } 220 | }, 221 | "node_modules/@nodelib/fs.scandir": { 222 | "version": "2.1.5", 223 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 224 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 225 | "dev": true, 226 | "dependencies": { 227 | "@nodelib/fs.stat": "2.0.5", 228 | "run-parallel": "^1.1.9" 229 | }, 230 | "engines": { 231 | "node": ">= 8" 232 | } 233 | }, 234 | "node_modules/@nodelib/fs.stat": { 235 | "version": "2.0.5", 236 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 237 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 238 | "dev": true, 239 | "engines": { 240 | "node": ">= 8" 241 | } 242 | }, 243 | "node_modules/@nodelib/fs.walk": { 244 | "version": "1.2.8", 245 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 246 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 247 | "dev": true, 248 | "dependencies": { 249 | "@nodelib/fs.scandir": "2.1.5", 250 | "fastq": "^1.6.0" 251 | }, 252 | "engines": { 253 | "node": ">= 8" 254 | } 255 | }, 256 | "node_modules/@octokit/auth-token": { 257 | "version": "4.0.0", 258 | "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", 259 | "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==", 260 | "engines": { 261 | "node": ">= 18" 262 | } 263 | }, 264 | "node_modules/@octokit/core": { 265 | "version": "5.0.1", 266 | "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.1.tgz", 267 | "integrity": "sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==", 268 | "dependencies": { 269 | "@octokit/auth-token": "^4.0.0", 270 | "@octokit/graphql": "^7.0.0", 271 | "@octokit/request": "^8.0.2", 272 | "@octokit/request-error": "^5.0.0", 273 | "@octokit/types": "^12.0.0", 274 | "before-after-hook": "^2.2.0", 275 | "universal-user-agent": "^6.0.0" 276 | }, 277 | "engines": { 278 | "node": ">= 18" 279 | } 280 | }, 281 | "node_modules/@octokit/endpoint": { 282 | "version": "9.0.6", 283 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", 284 | "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", 285 | "license": "MIT", 286 | "dependencies": { 287 | "@octokit/types": "^13.1.0", 288 | "universal-user-agent": "^6.0.0" 289 | }, 290 | "engines": { 291 | "node": ">= 18" 292 | } 293 | }, 294 | "node_modules/@octokit/endpoint/node_modules/@octokit/openapi-types": { 295 | "version": "23.0.1", 296 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz", 297 | "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==", 298 | "license": "MIT" 299 | }, 300 | "node_modules/@octokit/endpoint/node_modules/@octokit/types": { 301 | "version": "13.8.0", 302 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz", 303 | "integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==", 304 | "license": "MIT", 305 | "dependencies": { 306 | "@octokit/openapi-types": "^23.0.1" 307 | } 308 | }, 309 | "node_modules/@octokit/graphql": { 310 | "version": "7.0.2", 311 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", 312 | "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", 313 | "dependencies": { 314 | "@octokit/request": "^8.0.1", 315 | "@octokit/types": "^12.0.0", 316 | "universal-user-agent": "^6.0.0" 317 | }, 318 | "engines": { 319 | "node": ">= 18" 320 | } 321 | }, 322 | "node_modules/@octokit/openapi-types": { 323 | "version": "20.0.0", 324 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", 325 | "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==", 326 | "license": "MIT" 327 | }, 328 | "node_modules/@octokit/plugin-paginate-rest": { 329 | "version": "9.2.2", 330 | "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.2.tgz", 331 | "integrity": "sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==", 332 | "license": "MIT", 333 | "dependencies": { 334 | "@octokit/types": "^12.6.0" 335 | }, 336 | "engines": { 337 | "node": ">= 18" 338 | }, 339 | "peerDependencies": { 340 | "@octokit/core": "5" 341 | } 342 | }, 343 | "node_modules/@octokit/plugin-rest-endpoint-methods": { 344 | "version": "10.4.1", 345 | "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", 346 | "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", 347 | "license": "MIT", 348 | "dependencies": { 349 | "@octokit/types": "^12.6.0" 350 | }, 351 | "engines": { 352 | "node": ">= 18" 353 | }, 354 | "peerDependencies": { 355 | "@octokit/core": "5" 356 | } 357 | }, 358 | "node_modules/@octokit/request": { 359 | "version": "8.4.1", 360 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", 361 | "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", 362 | "license": "MIT", 363 | "dependencies": { 364 | "@octokit/endpoint": "^9.0.6", 365 | "@octokit/request-error": "^5.1.1", 366 | "@octokit/types": "^13.1.0", 367 | "universal-user-agent": "^6.0.0" 368 | }, 369 | "engines": { 370 | "node": ">= 18" 371 | } 372 | }, 373 | "node_modules/@octokit/request-error": { 374 | "version": "5.1.1", 375 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", 376 | "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", 377 | "license": "MIT", 378 | "dependencies": { 379 | "@octokit/types": "^13.1.0", 380 | "deprecation": "^2.0.0", 381 | "once": "^1.4.0" 382 | }, 383 | "engines": { 384 | "node": ">= 18" 385 | } 386 | }, 387 | "node_modules/@octokit/request-error/node_modules/@octokit/openapi-types": { 388 | "version": "23.0.1", 389 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz", 390 | "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==", 391 | "license": "MIT" 392 | }, 393 | "node_modules/@octokit/request-error/node_modules/@octokit/types": { 394 | "version": "13.8.0", 395 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz", 396 | "integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==", 397 | "license": "MIT", 398 | "dependencies": { 399 | "@octokit/openapi-types": "^23.0.1" 400 | } 401 | }, 402 | "node_modules/@octokit/request/node_modules/@octokit/openapi-types": { 403 | "version": "23.0.1", 404 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz", 405 | "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==", 406 | "license": "MIT" 407 | }, 408 | "node_modules/@octokit/request/node_modules/@octokit/types": { 409 | "version": "13.8.0", 410 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz", 411 | "integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==", 412 | "license": "MIT", 413 | "dependencies": { 414 | "@octokit/openapi-types": "^23.0.1" 415 | } 416 | }, 417 | "node_modules/@octokit/types": { 418 | "version": "12.6.0", 419 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", 420 | "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", 421 | "license": "MIT", 422 | "dependencies": { 423 | "@octokit/openapi-types": "^20.0.0" 424 | } 425 | }, 426 | "node_modules/@pkgjs/parseargs": { 427 | "version": "0.11.0", 428 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 429 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 430 | "optional": true, 431 | "engines": { 432 | "node": ">=14" 433 | } 434 | }, 435 | "node_modules/@pkgr/core": { 436 | "version": "0.2.7", 437 | "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz", 438 | "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==", 439 | "dev": true, 440 | "license": "MIT", 441 | "engines": { 442 | "node": "^12.20.0 || ^14.18.0 || >=16.0.0" 443 | }, 444 | "funding": { 445 | "url": "https://opencollective.com/pkgr" 446 | } 447 | }, 448 | "node_modules/@putout/git-status-porcelain": { 449 | "version": "3.0.0", 450 | "resolved": "https://registry.npmjs.org/@putout/git-status-porcelain/-/git-status-porcelain-3.0.0.tgz", 451 | "integrity": "sha512-TJxXfrpZGzSf7pQ96MMBpPICtM5G9r7MAWKpH3GJi3deGII3ILLibA47P2qMeUbCmXml5wG6DTQS7OZFOrTIUQ==", 452 | "engines": { 453 | "node": ">=16" 454 | } 455 | }, 456 | "node_modules/@ungap/structured-clone": { 457 | "version": "1.2.0", 458 | "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", 459 | "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", 460 | "dev": true 461 | }, 462 | "node_modules/@vercel/ncc": { 463 | "version": "0.38.3", 464 | "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.3.tgz", 465 | "integrity": "sha512-rnK6hJBS6mwc+Bkab+PGPs9OiS0i/3kdTO+CkI8V0/VrW3vmz7O2Pxjw/owOlmo6PKEIxRSeZKv/kuL9itnpYA==", 466 | "dev": true, 467 | "bin": { 468 | "ncc": "dist/ncc/cli.js" 469 | } 470 | }, 471 | "node_modules/acorn": { 472 | "version": "7.4.1", 473 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 474 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 475 | "dev": true, 476 | "bin": { 477 | "acorn": "bin/acorn" 478 | }, 479 | "engines": { 480 | "node": ">=0.4.0" 481 | } 482 | }, 483 | "node_modules/acorn-jsx": { 484 | "version": "5.3.2", 485 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 486 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 487 | "dev": true, 488 | "peerDependencies": { 489 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 490 | } 491 | }, 492 | "node_modules/ajv": { 493 | "version": "6.12.6", 494 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 495 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 496 | "dev": true, 497 | "dependencies": { 498 | "fast-deep-equal": "^3.1.1", 499 | "fast-json-stable-stringify": "^2.0.0", 500 | "json-schema-traverse": "^0.4.1", 501 | "uri-js": "^4.2.2" 502 | }, 503 | "funding": { 504 | "type": "github", 505 | "url": "https://github.com/sponsors/epoberezkin" 506 | } 507 | }, 508 | "node_modules/ansi-regex": { 509 | "version": "5.0.1", 510 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 511 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 512 | "engines": { 513 | "node": ">=8" 514 | } 515 | }, 516 | "node_modules/ansi-styles": { 517 | "version": "6.2.1", 518 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 519 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 520 | "engines": { 521 | "node": ">=12" 522 | }, 523 | "funding": { 524 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 525 | } 526 | }, 527 | "node_modules/argparse": { 528 | "version": "2.0.1", 529 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 530 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 531 | "dev": true 532 | }, 533 | "node_modules/balanced-match": { 534 | "version": "1.0.0", 535 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 536 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 537 | }, 538 | "node_modules/before-after-hook": { 539 | "version": "2.2.3", 540 | "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", 541 | "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" 542 | }, 543 | "node_modules/brace-expansion": { 544 | "version": "1.1.11", 545 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 546 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 547 | "dependencies": { 548 | "balanced-match": "^1.0.0", 549 | "concat-map": "0.0.1" 550 | } 551 | }, 552 | "node_modules/callsites": { 553 | "version": "3.1.0", 554 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 555 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 556 | "dev": true, 557 | "engines": { 558 | "node": ">=6" 559 | } 560 | }, 561 | "node_modules/chalk": { 562 | "version": "4.1.0", 563 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 564 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 565 | "dev": true, 566 | "dependencies": { 567 | "ansi-styles": "^4.1.0", 568 | "supports-color": "^7.1.0" 569 | }, 570 | "engines": { 571 | "node": ">=10" 572 | } 573 | }, 574 | "node_modules/chalk/node_modules/ansi-styles": { 575 | "version": "4.3.0", 576 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 577 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 578 | "dev": true, 579 | "dependencies": { 580 | "color-convert": "^2.0.1" 581 | }, 582 | "engines": { 583 | "node": ">=8" 584 | } 585 | }, 586 | "node_modules/chalk/node_modules/has-flag": { 587 | "version": "4.0.0", 588 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 589 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 590 | "dev": true, 591 | "engines": { 592 | "node": ">=8" 593 | } 594 | }, 595 | "node_modules/chalk/node_modules/supports-color": { 596 | "version": "7.2.0", 597 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 598 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 599 | "dev": true, 600 | "dependencies": { 601 | "has-flag": "^4.0.0" 602 | }, 603 | "engines": { 604 | "node": ">=8" 605 | } 606 | }, 607 | "node_modules/color-convert": { 608 | "version": "2.0.1", 609 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 610 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 611 | "dependencies": { 612 | "color-name": "~1.1.4" 613 | }, 614 | "engines": { 615 | "node": ">=7.0.0" 616 | } 617 | }, 618 | "node_modules/color-name": { 619 | "version": "1.1.4", 620 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 621 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 622 | }, 623 | "node_modules/concat-map": { 624 | "version": "0.0.1", 625 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 626 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 627 | }, 628 | "node_modules/cross-spawn": { 629 | "version": "7.0.5", 630 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", 631 | "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", 632 | "dependencies": { 633 | "path-key": "^3.1.0", 634 | "shebang-command": "^2.0.0", 635 | "which": "^2.0.1" 636 | }, 637 | "engines": { 638 | "node": ">= 8" 639 | } 640 | }, 641 | "node_modules/debug": { 642 | "version": "4.3.4", 643 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 644 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 645 | "dev": true, 646 | "dependencies": { 647 | "ms": "2.1.2" 648 | }, 649 | "engines": { 650 | "node": ">=6.0" 651 | }, 652 | "peerDependenciesMeta": { 653 | "supports-color": { 654 | "optional": true 655 | } 656 | } 657 | }, 658 | "node_modules/deep-is": { 659 | "version": "0.1.4", 660 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 661 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 662 | "dev": true 663 | }, 664 | "node_modules/deprecation": { 665 | "version": "2.3.1", 666 | "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", 667 | "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" 668 | }, 669 | "node_modules/doctrine": { 670 | "version": "3.0.0", 671 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 672 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 673 | "dev": true, 674 | "dependencies": { 675 | "esutils": "^2.0.2" 676 | }, 677 | "engines": { 678 | "node": ">=6.0.0" 679 | } 680 | }, 681 | "node_modules/eastasianwidth": { 682 | "version": "0.2.0", 683 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 684 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" 685 | }, 686 | "node_modules/emoji-regex": { 687 | "version": "9.2.2", 688 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 689 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" 690 | }, 691 | "node_modules/eslint": { 692 | "version": "8.57.0", 693 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", 694 | "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", 695 | "dev": true, 696 | "dependencies": { 697 | "@eslint-community/eslint-utils": "^4.2.0", 698 | "@eslint-community/regexpp": "^4.6.1", 699 | "@eslint/eslintrc": "^2.1.4", 700 | "@eslint/js": "8.57.0", 701 | "@humanwhocodes/config-array": "^0.11.14", 702 | "@humanwhocodes/module-importer": "^1.0.1", 703 | "@nodelib/fs.walk": "^1.2.8", 704 | "@ungap/structured-clone": "^1.2.0", 705 | "ajv": "^6.12.4", 706 | "chalk": "^4.0.0", 707 | "cross-spawn": "^7.0.2", 708 | "debug": "^4.3.2", 709 | "doctrine": "^3.0.0", 710 | "escape-string-regexp": "^4.0.0", 711 | "eslint-scope": "^7.2.2", 712 | "eslint-visitor-keys": "^3.4.3", 713 | "espree": "^9.6.1", 714 | "esquery": "^1.4.2", 715 | "esutils": "^2.0.2", 716 | "fast-deep-equal": "^3.1.3", 717 | "file-entry-cache": "^6.0.1", 718 | "find-up": "^5.0.0", 719 | "glob-parent": "^6.0.2", 720 | "globals": "^13.19.0", 721 | "graphemer": "^1.4.0", 722 | "ignore": "^5.2.0", 723 | "imurmurhash": "^0.1.4", 724 | "is-glob": "^4.0.0", 725 | "is-path-inside": "^3.0.3", 726 | "js-yaml": "^4.1.0", 727 | "json-stable-stringify-without-jsonify": "^1.0.1", 728 | "levn": "^0.4.1", 729 | "lodash.merge": "^4.6.2", 730 | "minimatch": "^3.1.2", 731 | "natural-compare": "^1.4.0", 732 | "optionator": "^0.9.3", 733 | "strip-ansi": "^6.0.1", 734 | "text-table": "^0.2.0" 735 | }, 736 | "bin": { 737 | "eslint": "bin/eslint.js" 738 | }, 739 | "engines": { 740 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 741 | }, 742 | "funding": { 743 | "url": "https://opencollective.com/eslint" 744 | } 745 | }, 746 | "node_modules/eslint-config-prettier": { 747 | "version": "10.1.5", 748 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz", 749 | "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==", 750 | "dev": true, 751 | "license": "MIT", 752 | "bin": { 753 | "eslint-config-prettier": "bin/cli.js" 754 | }, 755 | "funding": { 756 | "url": "https://opencollective.com/eslint-config-prettier" 757 | }, 758 | "peerDependencies": { 759 | "eslint": ">=7.0.0" 760 | } 761 | }, 762 | "node_modules/eslint-plugin-es": { 763 | "version": "3.0.1", 764 | "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", 765 | "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", 766 | "dev": true, 767 | "dependencies": { 768 | "eslint-utils": "^2.0.0", 769 | "regexpp": "^3.0.0" 770 | }, 771 | "engines": { 772 | "node": ">=8.10.0" 773 | } 774 | }, 775 | "node_modules/eslint-plugin-node": { 776 | "version": "11.1.0", 777 | "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", 778 | "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", 779 | "dev": true, 780 | "dependencies": { 781 | "eslint-plugin-es": "^3.0.0", 782 | "eslint-utils": "^2.0.0", 783 | "ignore": "^5.1.1", 784 | "minimatch": "^3.0.4", 785 | "resolve": "^1.10.1", 786 | "semver": "^6.1.0" 787 | }, 788 | "engines": { 789 | "node": ">=8.10.0" 790 | }, 791 | "peerDependencies": { 792 | "eslint": ">=5.16.0" 793 | } 794 | }, 795 | "node_modules/eslint-plugin-prettier": { 796 | "version": "5.4.1", 797 | "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz", 798 | "integrity": "sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==", 799 | "dev": true, 800 | "license": "MIT", 801 | "dependencies": { 802 | "prettier-linter-helpers": "^1.0.0", 803 | "synckit": "^0.11.7" 804 | }, 805 | "engines": { 806 | "node": "^14.18.0 || >=16.0.0" 807 | }, 808 | "funding": { 809 | "url": "https://opencollective.com/eslint-plugin-prettier" 810 | }, 811 | "peerDependencies": { 812 | "@types/eslint": ">=8.0.0", 813 | "eslint": ">=8.0.0", 814 | "eslint-config-prettier": ">= 7.0.0 <10.0.0 || >=10.1.0", 815 | "prettier": ">=3.0.0" 816 | }, 817 | "peerDependenciesMeta": { 818 | "@types/eslint": { 819 | "optional": true 820 | }, 821 | "eslint-config-prettier": { 822 | "optional": true 823 | } 824 | } 825 | }, 826 | "node_modules/eslint-plugin-sort-keys-fix": { 827 | "version": "1.1.2", 828 | "resolved": "https://registry.npmjs.org/eslint-plugin-sort-keys-fix/-/eslint-plugin-sort-keys-fix-1.1.2.tgz", 829 | "integrity": "sha512-DNPHFGCA0/hZIsfODbeLZqaGY/+q3vgtshF85r+YWDNCQ2apd9PNs/zL6ttKm0nD1IFwvxyg3YOTI7FHl4unrw==", 830 | "dev": true, 831 | "dependencies": { 832 | "espree": "^6.1.2", 833 | "esutils": "^2.0.2", 834 | "natural-compare": "^1.4.0", 835 | "requireindex": "~1.2.0" 836 | }, 837 | "engines": { 838 | "node": ">=0.10.0" 839 | } 840 | }, 841 | "node_modules/eslint-plugin-sort-keys-fix/node_modules/eslint-visitor-keys": { 842 | "version": "1.3.0", 843 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 844 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 845 | "dev": true, 846 | "engines": { 847 | "node": ">=4" 848 | } 849 | }, 850 | "node_modules/eslint-plugin-sort-keys-fix/node_modules/espree": { 851 | "version": "6.2.1", 852 | "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", 853 | "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", 854 | "dev": true, 855 | "dependencies": { 856 | "acorn": "^7.1.1", 857 | "acorn-jsx": "^5.2.0", 858 | "eslint-visitor-keys": "^1.1.0" 859 | }, 860 | "engines": { 861 | "node": ">=6.0.0" 862 | } 863 | }, 864 | "node_modules/eslint-scope": { 865 | "version": "7.2.2", 866 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 867 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 868 | "dev": true, 869 | "dependencies": { 870 | "esrecurse": "^4.3.0", 871 | "estraverse": "^5.2.0" 872 | }, 873 | "engines": { 874 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 875 | }, 876 | "funding": { 877 | "url": "https://opencollective.com/eslint" 878 | } 879 | }, 880 | "node_modules/eslint-utils": { 881 | "version": "2.1.0", 882 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 883 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 884 | "dev": true, 885 | "dependencies": { 886 | "eslint-visitor-keys": "^1.1.0" 887 | }, 888 | "engines": { 889 | "node": ">=6" 890 | } 891 | }, 892 | "node_modules/eslint-utils/node_modules/eslint-visitor-keys": { 893 | "version": "1.3.0", 894 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 895 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 896 | "dev": true, 897 | "engines": { 898 | "node": ">=4" 899 | } 900 | }, 901 | "node_modules/eslint-visitor-keys": { 902 | "version": "3.4.3", 903 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 904 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 905 | "dev": true, 906 | "engines": { 907 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 908 | }, 909 | "funding": { 910 | "url": "https://opencollective.com/eslint" 911 | } 912 | }, 913 | "node_modules/eslint/node_modules/escape-string-regexp": { 914 | "version": "4.0.0", 915 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 916 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 917 | "dev": true, 918 | "engines": { 919 | "node": ">=10" 920 | }, 921 | "funding": { 922 | "url": "https://github.com/sponsors/sindresorhus" 923 | } 924 | }, 925 | "node_modules/espree": { 926 | "version": "9.6.1", 927 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 928 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 929 | "dev": true, 930 | "dependencies": { 931 | "acorn": "^8.9.0", 932 | "acorn-jsx": "^5.3.2", 933 | "eslint-visitor-keys": "^3.4.1" 934 | }, 935 | "engines": { 936 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 937 | }, 938 | "funding": { 939 | "url": "https://opencollective.com/eslint" 940 | } 941 | }, 942 | "node_modules/espree/node_modules/acorn": { 943 | "version": "8.11.2", 944 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", 945 | "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", 946 | "dev": true, 947 | "bin": { 948 | "acorn": "bin/acorn" 949 | }, 950 | "engines": { 951 | "node": ">=0.4.0" 952 | } 953 | }, 954 | "node_modules/esquery": { 955 | "version": "1.5.0", 956 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 957 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 958 | "dev": true, 959 | "dependencies": { 960 | "estraverse": "^5.1.0" 961 | }, 962 | "engines": { 963 | "node": ">=0.10" 964 | } 965 | }, 966 | "node_modules/esrecurse": { 967 | "version": "4.3.0", 968 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 969 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 970 | "dev": true, 971 | "dependencies": { 972 | "estraverse": "^5.2.0" 973 | }, 974 | "engines": { 975 | "node": ">=4.0" 976 | } 977 | }, 978 | "node_modules/estraverse": { 979 | "version": "5.3.0", 980 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 981 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 982 | "dev": true, 983 | "engines": { 984 | "node": ">=4.0" 985 | } 986 | }, 987 | "node_modules/esutils": { 988 | "version": "2.0.3", 989 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 990 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 991 | "dev": true, 992 | "engines": { 993 | "node": ">=0.10.0" 994 | } 995 | }, 996 | "node_modules/fast-deep-equal": { 997 | "version": "3.1.3", 998 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 999 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1000 | "dev": true 1001 | }, 1002 | "node_modules/fast-diff": { 1003 | "version": "1.2.0", 1004 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", 1005 | "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", 1006 | "dev": true 1007 | }, 1008 | "node_modules/fast-json-stable-stringify": { 1009 | "version": "2.1.0", 1010 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1011 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1012 | "dev": true 1013 | }, 1014 | "node_modules/fast-levenshtein": { 1015 | "version": "2.0.6", 1016 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1017 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1018 | "dev": true 1019 | }, 1020 | "node_modules/fastq": { 1021 | "version": "1.13.0", 1022 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 1023 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 1024 | "dev": true, 1025 | "dependencies": { 1026 | "reusify": "^1.0.4" 1027 | } 1028 | }, 1029 | "node_modules/file-entry-cache": { 1030 | "version": "6.0.1", 1031 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1032 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1033 | "dev": true, 1034 | "dependencies": { 1035 | "flat-cache": "^3.0.4" 1036 | }, 1037 | "engines": { 1038 | "node": "^10.12.0 || >=12.0.0" 1039 | } 1040 | }, 1041 | "node_modules/find-up": { 1042 | "version": "5.0.0", 1043 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1044 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1045 | "dev": true, 1046 | "dependencies": { 1047 | "locate-path": "^6.0.0", 1048 | "path-exists": "^4.0.0" 1049 | }, 1050 | "engines": { 1051 | "node": ">=10" 1052 | }, 1053 | "funding": { 1054 | "url": "https://github.com/sponsors/sindresorhus" 1055 | } 1056 | }, 1057 | "node_modules/flat-cache": { 1058 | "version": "3.0.4", 1059 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 1060 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 1061 | "dev": true, 1062 | "dependencies": { 1063 | "flatted": "^3.1.0", 1064 | "rimraf": "^3.0.2" 1065 | }, 1066 | "engines": { 1067 | "node": "^10.12.0 || >=12.0.0" 1068 | } 1069 | }, 1070 | "node_modules/flat-cache/node_modules/glob": { 1071 | "version": "7.2.3", 1072 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 1073 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 1074 | "dev": true, 1075 | "dependencies": { 1076 | "fs.realpath": "^1.0.0", 1077 | "inflight": "^1.0.4", 1078 | "inherits": "2", 1079 | "minimatch": "^3.1.1", 1080 | "once": "^1.3.0", 1081 | "path-is-absolute": "^1.0.0" 1082 | }, 1083 | "engines": { 1084 | "node": "*" 1085 | }, 1086 | "funding": { 1087 | "url": "https://github.com/sponsors/isaacs" 1088 | } 1089 | }, 1090 | "node_modules/flat-cache/node_modules/rimraf": { 1091 | "version": "3.0.2", 1092 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 1093 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 1094 | "dev": true, 1095 | "dependencies": { 1096 | "glob": "^7.1.3" 1097 | }, 1098 | "bin": { 1099 | "rimraf": "bin.js" 1100 | }, 1101 | "funding": { 1102 | "url": "https://github.com/sponsors/isaacs" 1103 | } 1104 | }, 1105 | "node_modules/flatted": { 1106 | "version": "3.1.1", 1107 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", 1108 | "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", 1109 | "dev": true 1110 | }, 1111 | "node_modules/foreground-child": { 1112 | "version": "3.2.1", 1113 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", 1114 | "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", 1115 | "dependencies": { 1116 | "cross-spawn": "^7.0.0", 1117 | "signal-exit": "^4.0.1" 1118 | }, 1119 | "engines": { 1120 | "node": ">=14" 1121 | }, 1122 | "funding": { 1123 | "url": "https://github.com/sponsors/isaacs" 1124 | } 1125 | }, 1126 | "node_modules/fs.realpath": { 1127 | "version": "1.0.0", 1128 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1129 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1130 | "dev": true 1131 | }, 1132 | "node_modules/function-bind": { 1133 | "version": "1.1.1", 1134 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 1135 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 1136 | "dev": true 1137 | }, 1138 | "node_modules/glob": { 1139 | "version": "11.0.0", 1140 | "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", 1141 | "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", 1142 | "dependencies": { 1143 | "foreground-child": "^3.1.0", 1144 | "jackspeak": "^4.0.1", 1145 | "minimatch": "^10.0.0", 1146 | "minipass": "^7.1.2", 1147 | "package-json-from-dist": "^1.0.0", 1148 | "path-scurry": "^2.0.0" 1149 | }, 1150 | "bin": { 1151 | "glob": "dist/esm/bin.mjs" 1152 | }, 1153 | "engines": { 1154 | "node": "20 || >=22" 1155 | }, 1156 | "funding": { 1157 | "url": "https://github.com/sponsors/isaacs" 1158 | } 1159 | }, 1160 | "node_modules/glob-parent": { 1161 | "version": "6.0.2", 1162 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 1163 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 1164 | "dev": true, 1165 | "dependencies": { 1166 | "is-glob": "^4.0.3" 1167 | }, 1168 | "engines": { 1169 | "node": ">=10.13.0" 1170 | } 1171 | }, 1172 | "node_modules/glob/node_modules/brace-expansion": { 1173 | "version": "2.0.1", 1174 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1175 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1176 | "dependencies": { 1177 | "balanced-match": "^1.0.0" 1178 | } 1179 | }, 1180 | "node_modules/glob/node_modules/minimatch": { 1181 | "version": "10.0.1", 1182 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", 1183 | "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", 1184 | "dependencies": { 1185 | "brace-expansion": "^2.0.1" 1186 | }, 1187 | "engines": { 1188 | "node": "20 || >=22" 1189 | }, 1190 | "funding": { 1191 | "url": "https://github.com/sponsors/isaacs" 1192 | } 1193 | }, 1194 | "node_modules/globals": { 1195 | "version": "13.23.0", 1196 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", 1197 | "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", 1198 | "dev": true, 1199 | "dependencies": { 1200 | "type-fest": "^0.20.2" 1201 | }, 1202 | "engines": { 1203 | "node": ">=8" 1204 | }, 1205 | "funding": { 1206 | "url": "https://github.com/sponsors/sindresorhus" 1207 | } 1208 | }, 1209 | "node_modules/graphemer": { 1210 | "version": "1.4.0", 1211 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 1212 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 1213 | "dev": true 1214 | }, 1215 | "node_modules/has": { 1216 | "version": "1.0.3", 1217 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 1218 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 1219 | "dev": true, 1220 | "dependencies": { 1221 | "function-bind": "^1.1.1" 1222 | }, 1223 | "engines": { 1224 | "node": ">= 0.4.0" 1225 | } 1226 | }, 1227 | "node_modules/husky": { 1228 | "version": "9.1.7", 1229 | "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", 1230 | "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", 1231 | "dev": true, 1232 | "bin": { 1233 | "husky": "bin.js" 1234 | }, 1235 | "engines": { 1236 | "node": ">=18" 1237 | }, 1238 | "funding": { 1239 | "url": "https://github.com/sponsors/typicode" 1240 | } 1241 | }, 1242 | "node_modules/ignore": { 1243 | "version": "5.2.0", 1244 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", 1245 | "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", 1246 | "dev": true, 1247 | "engines": { 1248 | "node": ">= 4" 1249 | } 1250 | }, 1251 | "node_modules/import-fresh": { 1252 | "version": "3.3.0", 1253 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 1254 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 1255 | "dev": true, 1256 | "dependencies": { 1257 | "parent-module": "^1.0.0", 1258 | "resolve-from": "^4.0.0" 1259 | }, 1260 | "engines": { 1261 | "node": ">=6" 1262 | }, 1263 | "funding": { 1264 | "url": "https://github.com/sponsors/sindresorhus" 1265 | } 1266 | }, 1267 | "node_modules/imurmurhash": { 1268 | "version": "0.1.4", 1269 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 1270 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 1271 | "dev": true, 1272 | "engines": { 1273 | "node": ">=0.8.19" 1274 | } 1275 | }, 1276 | "node_modules/inflight": { 1277 | "version": "1.0.6", 1278 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1279 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1280 | "dev": true, 1281 | "dependencies": { 1282 | "once": "^1.3.0", 1283 | "wrappy": "1" 1284 | } 1285 | }, 1286 | "node_modules/inherits": { 1287 | "version": "2.0.4", 1288 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1289 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1290 | "dev": true 1291 | }, 1292 | "node_modules/is-core-module": { 1293 | "version": "2.2.0", 1294 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", 1295 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", 1296 | "dev": true, 1297 | "dependencies": { 1298 | "has": "^1.0.3" 1299 | } 1300 | }, 1301 | "node_modules/is-extglob": { 1302 | "version": "2.1.1", 1303 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1304 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 1305 | "dev": true, 1306 | "engines": { 1307 | "node": ">=0.10.0" 1308 | } 1309 | }, 1310 | "node_modules/is-fullwidth-code-point": { 1311 | "version": "3.0.0", 1312 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1313 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1314 | "engines": { 1315 | "node": ">=8" 1316 | } 1317 | }, 1318 | "node_modules/is-glob": { 1319 | "version": "4.0.3", 1320 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1321 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1322 | "dev": true, 1323 | "dependencies": { 1324 | "is-extglob": "^2.1.1" 1325 | }, 1326 | "engines": { 1327 | "node": ">=0.10.0" 1328 | } 1329 | }, 1330 | "node_modules/is-path-inside": { 1331 | "version": "3.0.3", 1332 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 1333 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 1334 | "dev": true, 1335 | "engines": { 1336 | "node": ">=8" 1337 | } 1338 | }, 1339 | "node_modules/isexe": { 1340 | "version": "2.0.0", 1341 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1342 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 1343 | }, 1344 | "node_modules/jackspeak": { 1345 | "version": "4.0.1", 1346 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", 1347 | "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", 1348 | "dependencies": { 1349 | "@isaacs/cliui": "^8.0.2" 1350 | }, 1351 | "engines": { 1352 | "node": "20 || >=22" 1353 | }, 1354 | "funding": { 1355 | "url": "https://github.com/sponsors/isaacs" 1356 | }, 1357 | "optionalDependencies": { 1358 | "@pkgjs/parseargs": "^0.11.0" 1359 | } 1360 | }, 1361 | "node_modules/js-yaml": { 1362 | "version": "4.1.0", 1363 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 1364 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 1365 | "dev": true, 1366 | "dependencies": { 1367 | "argparse": "^2.0.1" 1368 | }, 1369 | "bin": { 1370 | "js-yaml": "bin/js-yaml.js" 1371 | } 1372 | }, 1373 | "node_modules/json-schema-traverse": { 1374 | "version": "0.4.1", 1375 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 1376 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 1377 | "dev": true 1378 | }, 1379 | "node_modules/json-stable-stringify-without-jsonify": { 1380 | "version": "1.0.1", 1381 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 1382 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 1383 | "dev": true 1384 | }, 1385 | "node_modules/levn": { 1386 | "version": "0.4.1", 1387 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 1388 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 1389 | "dev": true, 1390 | "dependencies": { 1391 | "prelude-ls": "^1.2.1", 1392 | "type-check": "~0.4.0" 1393 | }, 1394 | "engines": { 1395 | "node": ">= 0.8.0" 1396 | } 1397 | }, 1398 | "node_modules/locate-path": { 1399 | "version": "6.0.0", 1400 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 1401 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 1402 | "dev": true, 1403 | "dependencies": { 1404 | "p-locate": "^5.0.0" 1405 | }, 1406 | "engines": { 1407 | "node": ">=10" 1408 | }, 1409 | "funding": { 1410 | "url": "https://github.com/sponsors/sindresorhus" 1411 | } 1412 | }, 1413 | "node_modules/lodash.merge": { 1414 | "version": "4.6.2", 1415 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 1416 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 1417 | "dev": true 1418 | }, 1419 | "node_modules/lru-cache": { 1420 | "version": "11.0.0", 1421 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", 1422 | "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==", 1423 | "engines": { 1424 | "node": "20 || >=22" 1425 | } 1426 | }, 1427 | "node_modules/minimatch": { 1428 | "version": "3.1.2", 1429 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 1430 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 1431 | "dependencies": { 1432 | "brace-expansion": "^1.1.7" 1433 | }, 1434 | "engines": { 1435 | "node": "*" 1436 | } 1437 | }, 1438 | "node_modules/minipass": { 1439 | "version": "7.1.2", 1440 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 1441 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 1442 | "engines": { 1443 | "node": ">=16 || 14 >=14.17" 1444 | } 1445 | }, 1446 | "node_modules/ms": { 1447 | "version": "2.1.2", 1448 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 1449 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 1450 | "dev": true 1451 | }, 1452 | "node_modules/natural-compare": { 1453 | "version": "1.4.0", 1454 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 1455 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 1456 | "dev": true 1457 | }, 1458 | "node_modules/once": { 1459 | "version": "1.4.0", 1460 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 1461 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 1462 | "dependencies": { 1463 | "wrappy": "1" 1464 | } 1465 | }, 1466 | "node_modules/optionator": { 1467 | "version": "0.9.3", 1468 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 1469 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 1470 | "dev": true, 1471 | "dependencies": { 1472 | "@aashutoshrathi/word-wrap": "^1.2.3", 1473 | "deep-is": "^0.1.3", 1474 | "fast-levenshtein": "^2.0.6", 1475 | "levn": "^0.4.1", 1476 | "prelude-ls": "^1.2.1", 1477 | "type-check": "^0.4.0" 1478 | }, 1479 | "engines": { 1480 | "node": ">= 0.8.0" 1481 | } 1482 | }, 1483 | "node_modules/p-limit": { 1484 | "version": "3.1.0", 1485 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 1486 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 1487 | "dev": true, 1488 | "dependencies": { 1489 | "yocto-queue": "^0.1.0" 1490 | }, 1491 | "engines": { 1492 | "node": ">=10" 1493 | }, 1494 | "funding": { 1495 | "url": "https://github.com/sponsors/sindresorhus" 1496 | } 1497 | }, 1498 | "node_modules/p-locate": { 1499 | "version": "5.0.0", 1500 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 1501 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 1502 | "dev": true, 1503 | "dependencies": { 1504 | "p-limit": "^3.0.2" 1505 | }, 1506 | "engines": { 1507 | "node": ">=10" 1508 | }, 1509 | "funding": { 1510 | "url": "https://github.com/sponsors/sindresorhus" 1511 | } 1512 | }, 1513 | "node_modules/package-json-from-dist": { 1514 | "version": "1.0.0", 1515 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", 1516 | "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" 1517 | }, 1518 | "node_modules/parent-module": { 1519 | "version": "1.0.1", 1520 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 1521 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 1522 | "dev": true, 1523 | "dependencies": { 1524 | "callsites": "^3.0.0" 1525 | }, 1526 | "engines": { 1527 | "node": ">=6" 1528 | } 1529 | }, 1530 | "node_modules/path-exists": { 1531 | "version": "4.0.0", 1532 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 1533 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 1534 | "dev": true, 1535 | "engines": { 1536 | "node": ">=8" 1537 | } 1538 | }, 1539 | "node_modules/path-is-absolute": { 1540 | "version": "1.0.1", 1541 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 1542 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 1543 | "dev": true, 1544 | "engines": { 1545 | "node": ">=0.10.0" 1546 | } 1547 | }, 1548 | "node_modules/path-key": { 1549 | "version": "3.1.1", 1550 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 1551 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 1552 | "engines": { 1553 | "node": ">=8" 1554 | } 1555 | }, 1556 | "node_modules/path-parse": { 1557 | "version": "1.0.7", 1558 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 1559 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 1560 | "dev": true 1561 | }, 1562 | "node_modules/path-scurry": { 1563 | "version": "2.0.0", 1564 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", 1565 | "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", 1566 | "dependencies": { 1567 | "lru-cache": "^11.0.0", 1568 | "minipass": "^7.1.2" 1569 | }, 1570 | "engines": { 1571 | "node": "20 || >=22" 1572 | }, 1573 | "funding": { 1574 | "url": "https://github.com/sponsors/isaacs" 1575 | } 1576 | }, 1577 | "node_modules/prelude-ls": { 1578 | "version": "1.2.1", 1579 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 1580 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 1581 | "dev": true, 1582 | "engines": { 1583 | "node": ">= 0.8.0" 1584 | } 1585 | }, 1586 | "node_modules/prettier": { 1587 | "version": "3.5.3", 1588 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", 1589 | "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", 1590 | "dev": true, 1591 | "license": "MIT", 1592 | "bin": { 1593 | "prettier": "bin/prettier.cjs" 1594 | }, 1595 | "engines": { 1596 | "node": ">=14" 1597 | }, 1598 | "funding": { 1599 | "url": "https://github.com/prettier/prettier?sponsor=1" 1600 | } 1601 | }, 1602 | "node_modules/prettier-linter-helpers": { 1603 | "version": "1.0.0", 1604 | "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", 1605 | "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", 1606 | "dev": true, 1607 | "dependencies": { 1608 | "fast-diff": "^1.1.2" 1609 | }, 1610 | "engines": { 1611 | "node": ">=6.0.0" 1612 | } 1613 | }, 1614 | "node_modules/punycode": { 1615 | "version": "2.3.1", 1616 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 1617 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 1618 | "dev": true, 1619 | "engines": { 1620 | "node": ">=6" 1621 | } 1622 | }, 1623 | "node_modules/queue-microtask": { 1624 | "version": "1.2.3", 1625 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 1626 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 1627 | "dev": true, 1628 | "funding": [ 1629 | { 1630 | "type": "github", 1631 | "url": "https://github.com/sponsors/feross" 1632 | }, 1633 | { 1634 | "type": "patreon", 1635 | "url": "https://www.patreon.com/feross" 1636 | }, 1637 | { 1638 | "type": "consulting", 1639 | "url": "https://feross.org/support" 1640 | } 1641 | ] 1642 | }, 1643 | "node_modules/recursive-readdir": { 1644 | "version": "2.2.3", 1645 | "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", 1646 | "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", 1647 | "dependencies": { 1648 | "minimatch": "^3.0.5" 1649 | }, 1650 | "engines": { 1651 | "node": ">=6.0.0" 1652 | } 1653 | }, 1654 | "node_modules/regexpp": { 1655 | "version": "3.2.0", 1656 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 1657 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 1658 | "dev": true, 1659 | "engines": { 1660 | "node": ">=8" 1661 | }, 1662 | "funding": { 1663 | "url": "https://github.com/sponsors/mysticatea" 1664 | } 1665 | }, 1666 | "node_modules/requireindex": { 1667 | "version": "1.2.0", 1668 | "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", 1669 | "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", 1670 | "dev": true, 1671 | "engines": { 1672 | "node": ">=0.10.5" 1673 | } 1674 | }, 1675 | "node_modules/resolve": { 1676 | "version": "1.19.0", 1677 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", 1678 | "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", 1679 | "dev": true, 1680 | "dependencies": { 1681 | "is-core-module": "^2.1.0", 1682 | "path-parse": "^1.0.6" 1683 | } 1684 | }, 1685 | "node_modules/resolve-from": { 1686 | "version": "4.0.0", 1687 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 1688 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 1689 | "dev": true, 1690 | "engines": { 1691 | "node": ">=4" 1692 | } 1693 | }, 1694 | "node_modules/reusify": { 1695 | "version": "1.0.4", 1696 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 1697 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 1698 | "dev": true, 1699 | "engines": { 1700 | "iojs": ">=1.0.0", 1701 | "node": ">=0.10.0" 1702 | } 1703 | }, 1704 | "node_modules/rimraf": { 1705 | "version": "6.0.1", 1706 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", 1707 | "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", 1708 | "dependencies": { 1709 | "glob": "^11.0.0", 1710 | "package-json-from-dist": "^1.0.0" 1711 | }, 1712 | "bin": { 1713 | "rimraf": "dist/esm/bin.mjs" 1714 | }, 1715 | "engines": { 1716 | "node": "20 || >=22" 1717 | }, 1718 | "funding": { 1719 | "url": "https://github.com/sponsors/isaacs" 1720 | } 1721 | }, 1722 | "node_modules/run-parallel": { 1723 | "version": "1.2.0", 1724 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 1725 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 1726 | "dev": true, 1727 | "funding": [ 1728 | { 1729 | "type": "github", 1730 | "url": "https://github.com/sponsors/feross" 1731 | }, 1732 | { 1733 | "type": "patreon", 1734 | "url": "https://www.patreon.com/feross" 1735 | }, 1736 | { 1737 | "type": "consulting", 1738 | "url": "https://feross.org/support" 1739 | } 1740 | ], 1741 | "dependencies": { 1742 | "queue-microtask": "^1.2.2" 1743 | } 1744 | }, 1745 | "node_modules/semver": { 1746 | "version": "6.3.1", 1747 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 1748 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 1749 | "dev": true, 1750 | "bin": { 1751 | "semver": "bin/semver.js" 1752 | } 1753 | }, 1754 | "node_modules/shebang-command": { 1755 | "version": "2.0.0", 1756 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 1757 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 1758 | "dependencies": { 1759 | "shebang-regex": "^3.0.0" 1760 | }, 1761 | "engines": { 1762 | "node": ">=8" 1763 | } 1764 | }, 1765 | "node_modules/shebang-regex": { 1766 | "version": "3.0.0", 1767 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 1768 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 1769 | "engines": { 1770 | "node": ">=8" 1771 | } 1772 | }, 1773 | "node_modules/signal-exit": { 1774 | "version": "4.1.0", 1775 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 1776 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1777 | "engines": { 1778 | "node": ">=14" 1779 | }, 1780 | "funding": { 1781 | "url": "https://github.com/sponsors/isaacs" 1782 | } 1783 | }, 1784 | "node_modules/string-width": { 1785 | "version": "5.1.2", 1786 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 1787 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 1788 | "dependencies": { 1789 | "eastasianwidth": "^0.2.0", 1790 | "emoji-regex": "^9.2.2", 1791 | "strip-ansi": "^7.0.1" 1792 | }, 1793 | "engines": { 1794 | "node": ">=12" 1795 | }, 1796 | "funding": { 1797 | "url": "https://github.com/sponsors/sindresorhus" 1798 | } 1799 | }, 1800 | "node_modules/string-width-cjs": { 1801 | "name": "string-width", 1802 | "version": "4.2.3", 1803 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 1804 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 1805 | "dependencies": { 1806 | "emoji-regex": "^8.0.0", 1807 | "is-fullwidth-code-point": "^3.0.0", 1808 | "strip-ansi": "^6.0.1" 1809 | }, 1810 | "engines": { 1811 | "node": ">=8" 1812 | } 1813 | }, 1814 | "node_modules/string-width-cjs/node_modules/emoji-regex": { 1815 | "version": "8.0.0", 1816 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 1817 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 1818 | }, 1819 | "node_modules/string-width/node_modules/ansi-regex": { 1820 | "version": "6.0.1", 1821 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 1822 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 1823 | "engines": { 1824 | "node": ">=12" 1825 | }, 1826 | "funding": { 1827 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 1828 | } 1829 | }, 1830 | "node_modules/string-width/node_modules/strip-ansi": { 1831 | "version": "7.1.0", 1832 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 1833 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 1834 | "dependencies": { 1835 | "ansi-regex": "^6.0.1" 1836 | }, 1837 | "engines": { 1838 | "node": ">=12" 1839 | }, 1840 | "funding": { 1841 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 1842 | } 1843 | }, 1844 | "node_modules/strip-ansi": { 1845 | "version": "6.0.1", 1846 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1847 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1848 | "dependencies": { 1849 | "ansi-regex": "^5.0.1" 1850 | }, 1851 | "engines": { 1852 | "node": ">=8" 1853 | } 1854 | }, 1855 | "node_modules/strip-ansi-cjs": { 1856 | "name": "strip-ansi", 1857 | "version": "6.0.1", 1858 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 1859 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 1860 | "dependencies": { 1861 | "ansi-regex": "^5.0.1" 1862 | }, 1863 | "engines": { 1864 | "node": ">=8" 1865 | } 1866 | }, 1867 | "node_modules/strip-json-comments": { 1868 | "version": "3.1.1", 1869 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 1870 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 1871 | "dev": true, 1872 | "engines": { 1873 | "node": ">=8" 1874 | }, 1875 | "funding": { 1876 | "url": "https://github.com/sponsors/sindresorhus" 1877 | } 1878 | }, 1879 | "node_modules/synckit": { 1880 | "version": "0.11.8", 1881 | "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz", 1882 | "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==", 1883 | "dev": true, 1884 | "license": "MIT", 1885 | "dependencies": { 1886 | "@pkgr/core": "^0.2.4" 1887 | }, 1888 | "engines": { 1889 | "node": "^14.18.0 || >=16.0.0" 1890 | }, 1891 | "funding": { 1892 | "url": "https://opencollective.com/synckit" 1893 | } 1894 | }, 1895 | "node_modules/text-table": { 1896 | "version": "0.2.0", 1897 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 1898 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 1899 | "dev": true 1900 | }, 1901 | "node_modules/tunnel": { 1902 | "version": "0.0.6", 1903 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 1904 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==", 1905 | "engines": { 1906 | "node": ">=0.6.11 <=0.7.0 || >=0.7.3" 1907 | } 1908 | }, 1909 | "node_modules/type-check": { 1910 | "version": "0.4.0", 1911 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 1912 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 1913 | "dev": true, 1914 | "dependencies": { 1915 | "prelude-ls": "^1.2.1" 1916 | }, 1917 | "engines": { 1918 | "node": ">= 0.8.0" 1919 | } 1920 | }, 1921 | "node_modules/type-fest": { 1922 | "version": "0.20.2", 1923 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 1924 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 1925 | "dev": true, 1926 | "engines": { 1927 | "node": ">=10" 1928 | }, 1929 | "funding": { 1930 | "url": "https://github.com/sponsors/sindresorhus" 1931 | } 1932 | }, 1933 | "node_modules/undici": { 1934 | "version": "5.29.0", 1935 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", 1936 | "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", 1937 | "license": "MIT", 1938 | "dependencies": { 1939 | "@fastify/busboy": "^2.0.0" 1940 | }, 1941 | "engines": { 1942 | "node": ">=14.0" 1943 | } 1944 | }, 1945 | "node_modules/universal-user-agent": { 1946 | "version": "6.0.0", 1947 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", 1948 | "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" 1949 | }, 1950 | "node_modules/uri-js": { 1951 | "version": "4.4.1", 1952 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 1953 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 1954 | "dev": true, 1955 | "dependencies": { 1956 | "punycode": "^2.1.0" 1957 | } 1958 | }, 1959 | "node_modules/which": { 1960 | "version": "2.0.2", 1961 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 1962 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 1963 | "dependencies": { 1964 | "isexe": "^2.0.0" 1965 | }, 1966 | "bin": { 1967 | "node-which": "bin/node-which" 1968 | }, 1969 | "engines": { 1970 | "node": ">= 8" 1971 | } 1972 | }, 1973 | "node_modules/wrap-ansi": { 1974 | "version": "8.1.0", 1975 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 1976 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 1977 | "dependencies": { 1978 | "ansi-styles": "^6.1.0", 1979 | "string-width": "^5.0.1", 1980 | "strip-ansi": "^7.0.1" 1981 | }, 1982 | "engines": { 1983 | "node": ">=12" 1984 | }, 1985 | "funding": { 1986 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 1987 | } 1988 | }, 1989 | "node_modules/wrap-ansi-cjs": { 1990 | "name": "wrap-ansi", 1991 | "version": "7.0.0", 1992 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 1993 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 1994 | "dependencies": { 1995 | "ansi-styles": "^4.0.0", 1996 | "string-width": "^4.1.0", 1997 | "strip-ansi": "^6.0.0" 1998 | }, 1999 | "engines": { 2000 | "node": ">=10" 2001 | }, 2002 | "funding": { 2003 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 2004 | } 2005 | }, 2006 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 2007 | "version": "4.3.0", 2008 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2009 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2010 | "dependencies": { 2011 | "color-convert": "^2.0.1" 2012 | }, 2013 | "engines": { 2014 | "node": ">=8" 2015 | }, 2016 | "funding": { 2017 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 2018 | } 2019 | }, 2020 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 2021 | "version": "8.0.0", 2022 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2023 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 2024 | }, 2025 | "node_modules/wrap-ansi-cjs/node_modules/string-width": { 2026 | "version": "4.2.3", 2027 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2028 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2029 | "dependencies": { 2030 | "emoji-regex": "^8.0.0", 2031 | "is-fullwidth-code-point": "^3.0.0", 2032 | "strip-ansi": "^6.0.1" 2033 | }, 2034 | "engines": { 2035 | "node": ">=8" 2036 | } 2037 | }, 2038 | "node_modules/wrap-ansi/node_modules/ansi-regex": { 2039 | "version": "6.0.1", 2040 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 2041 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 2042 | "engines": { 2043 | "node": ">=12" 2044 | }, 2045 | "funding": { 2046 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 2047 | } 2048 | }, 2049 | "node_modules/wrap-ansi/node_modules/strip-ansi": { 2050 | "version": "7.1.0", 2051 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 2052 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 2053 | "dependencies": { 2054 | "ansi-regex": "^6.0.1" 2055 | }, 2056 | "engines": { 2057 | "node": ">=12" 2058 | }, 2059 | "funding": { 2060 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 2061 | } 2062 | }, 2063 | "node_modules/wrappy": { 2064 | "version": "1.0.2", 2065 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 2066 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 2067 | }, 2068 | "node_modules/yocto-queue": { 2069 | "version": "0.1.0", 2070 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 2071 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 2072 | "dev": true, 2073 | "engines": { 2074 | "node": ">=10" 2075 | }, 2076 | "funding": { 2077 | "url": "https://github.com/sponsors/sindresorhus" 2078 | } 2079 | } 2080 | }, 2081 | "dependencies": { 2082 | "@aashutoshrathi/word-wrap": { 2083 | "version": "1.2.6", 2084 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 2085 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 2086 | "dev": true 2087 | }, 2088 | "@actions/core": { 2089 | "version": "1.11.1", 2090 | "resolved": "https://registry.npmjs.org/@actions/core/-/core-1.11.1.tgz", 2091 | "integrity": "sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A==", 2092 | "requires": { 2093 | "@actions/exec": "^1.1.1", 2094 | "@actions/http-client": "^2.0.1" 2095 | } 2096 | }, 2097 | "@actions/exec": { 2098 | "version": "1.1.1", 2099 | "resolved": "https://registry.npmjs.org/@actions/exec/-/exec-1.1.1.tgz", 2100 | "integrity": "sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w==", 2101 | "requires": { 2102 | "@actions/io": "^1.0.1" 2103 | } 2104 | }, 2105 | "@actions/github": { 2106 | "version": "6.0.1", 2107 | "resolved": "https://registry.npmjs.org/@actions/github/-/github-6.0.1.tgz", 2108 | "integrity": "sha512-xbZVcaqD4XnQAe35qSQqskb3SqIAfRyLBrHMd/8TuL7hJSz2QtbDwnNM8zWx4zO5l2fnGtseNE3MbEvD7BxVMw==", 2109 | "requires": { 2110 | "@actions/http-client": "^2.2.0", 2111 | "@octokit/core": "^5.0.1", 2112 | "@octokit/plugin-paginate-rest": "^9.2.2", 2113 | "@octokit/plugin-rest-endpoint-methods": "^10.4.0", 2114 | "@octokit/request": "^8.4.1", 2115 | "@octokit/request-error": "^5.1.1", 2116 | "undici": "^5.28.5" 2117 | } 2118 | }, 2119 | "@actions/http-client": { 2120 | "version": "2.2.0", 2121 | "resolved": "https://registry.npmjs.org/@actions/http-client/-/http-client-2.2.0.tgz", 2122 | "integrity": "sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg==", 2123 | "requires": { 2124 | "tunnel": "^0.0.6", 2125 | "undici": "^5.25.4" 2126 | } 2127 | }, 2128 | "@actions/io": { 2129 | "version": "1.1.3", 2130 | "resolved": "https://registry.npmjs.org/@actions/io/-/io-1.1.3.tgz", 2131 | "integrity": "sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q==" 2132 | }, 2133 | "@eslint-community/eslint-utils": { 2134 | "version": "4.4.0", 2135 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 2136 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 2137 | "dev": true, 2138 | "requires": { 2139 | "eslint-visitor-keys": "^3.3.0" 2140 | } 2141 | }, 2142 | "@eslint-community/regexpp": { 2143 | "version": "4.6.2", 2144 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.6.2.tgz", 2145 | "integrity": "sha512-pPTNuaAG3QMH+buKyBIGJs3g/S5y0caxw0ygM3YyE6yJFySwiGGSzA+mM3KJ8QQvzeLh3blwgSonkFjgQdxzMw==", 2146 | "dev": true 2147 | }, 2148 | "@eslint/eslintrc": { 2149 | "version": "2.1.4", 2150 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", 2151 | "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 2152 | "dev": true, 2153 | "requires": { 2154 | "ajv": "^6.12.4", 2155 | "debug": "^4.3.2", 2156 | "espree": "^9.6.0", 2157 | "globals": "^13.19.0", 2158 | "ignore": "^5.2.0", 2159 | "import-fresh": "^3.2.1", 2160 | "js-yaml": "^4.1.0", 2161 | "minimatch": "^3.1.2", 2162 | "strip-json-comments": "^3.1.1" 2163 | } 2164 | }, 2165 | "@eslint/js": { 2166 | "version": "8.57.0", 2167 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", 2168 | "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", 2169 | "dev": true 2170 | }, 2171 | "@fastify/busboy": { 2172 | "version": "2.0.0", 2173 | "resolved": "https://registry.npmjs.org/@fastify/busboy/-/busboy-2.0.0.tgz", 2174 | "integrity": "sha512-JUFJad5lv7jxj926GPgymrWQxxjPYuJNiNjNMzqT+HiuP6Vl3dk5xzG+8sTX96np0ZAluvaMzPsjhHZ5rNuNQQ==" 2175 | }, 2176 | "@humanwhocodes/config-array": { 2177 | "version": "0.11.14", 2178 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", 2179 | "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", 2180 | "dev": true, 2181 | "requires": { 2182 | "@humanwhocodes/object-schema": "^2.0.2", 2183 | "debug": "^4.3.1", 2184 | "minimatch": "^3.0.5" 2185 | } 2186 | }, 2187 | "@humanwhocodes/module-importer": { 2188 | "version": "1.0.1", 2189 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 2190 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 2191 | "dev": true 2192 | }, 2193 | "@humanwhocodes/object-schema": { 2194 | "version": "2.0.2", 2195 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", 2196 | "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", 2197 | "dev": true 2198 | }, 2199 | "@isaacs/cliui": { 2200 | "version": "8.0.2", 2201 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 2202 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 2203 | "requires": { 2204 | "string-width": "^5.1.2", 2205 | "string-width-cjs": "npm:string-width@^4.2.0", 2206 | "strip-ansi": "^7.0.1", 2207 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 2208 | "wrap-ansi": "^8.1.0", 2209 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 2210 | }, 2211 | "dependencies": { 2212 | "ansi-regex": { 2213 | "version": "6.0.1", 2214 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 2215 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" 2216 | }, 2217 | "strip-ansi": { 2218 | "version": "7.1.0", 2219 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 2220 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 2221 | "requires": { 2222 | "ansi-regex": "^6.0.1" 2223 | } 2224 | } 2225 | } 2226 | }, 2227 | "@nodelib/fs.scandir": { 2228 | "version": "2.1.5", 2229 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 2230 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 2231 | "dev": true, 2232 | "requires": { 2233 | "@nodelib/fs.stat": "2.0.5", 2234 | "run-parallel": "^1.1.9" 2235 | } 2236 | }, 2237 | "@nodelib/fs.stat": { 2238 | "version": "2.0.5", 2239 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 2240 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 2241 | "dev": true 2242 | }, 2243 | "@nodelib/fs.walk": { 2244 | "version": "1.2.8", 2245 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 2246 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 2247 | "dev": true, 2248 | "requires": { 2249 | "@nodelib/fs.scandir": "2.1.5", 2250 | "fastq": "^1.6.0" 2251 | } 2252 | }, 2253 | "@octokit/auth-token": { 2254 | "version": "4.0.0", 2255 | "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-4.0.0.tgz", 2256 | "integrity": "sha512-tY/msAuJo6ARbK6SPIxZrPBms3xPbfwBrulZe0Wtr/DIY9lje2HeV1uoebShn6mx7SjCHif6EjMvoREj+gZ+SA==" 2257 | }, 2258 | "@octokit/core": { 2259 | "version": "5.0.1", 2260 | "resolved": "https://registry.npmjs.org/@octokit/core/-/core-5.0.1.tgz", 2261 | "integrity": "sha512-lyeeeZyESFo+ffI801SaBKmCfsvarO+dgV8/0gD8u1d87clbEdWsP5yC+dSj3zLhb2eIf5SJrn6vDz9AheETHw==", 2262 | "requires": { 2263 | "@octokit/auth-token": "^4.0.0", 2264 | "@octokit/graphql": "^7.0.0", 2265 | "@octokit/request": "^8.0.2", 2266 | "@octokit/request-error": "^5.0.0", 2267 | "@octokit/types": "^12.0.0", 2268 | "before-after-hook": "^2.2.0", 2269 | "universal-user-agent": "^6.0.0" 2270 | } 2271 | }, 2272 | "@octokit/endpoint": { 2273 | "version": "9.0.6", 2274 | "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-9.0.6.tgz", 2275 | "integrity": "sha512-H1fNTMA57HbkFESSt3Y9+FBICv+0jFceJFPWDePYlR/iMGrwM5ph+Dd4XRQs+8X+PUFURLQgX9ChPfhJ/1uNQw==", 2276 | "requires": { 2277 | "@octokit/types": "^13.1.0", 2278 | "universal-user-agent": "^6.0.0" 2279 | }, 2280 | "dependencies": { 2281 | "@octokit/openapi-types": { 2282 | "version": "23.0.1", 2283 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz", 2284 | "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==" 2285 | }, 2286 | "@octokit/types": { 2287 | "version": "13.8.0", 2288 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz", 2289 | "integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==", 2290 | "requires": { 2291 | "@octokit/openapi-types": "^23.0.1" 2292 | } 2293 | } 2294 | } 2295 | }, 2296 | "@octokit/graphql": { 2297 | "version": "7.0.2", 2298 | "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-7.0.2.tgz", 2299 | "integrity": "sha512-OJ2iGMtj5Tg3s6RaXH22cJcxXRi7Y3EBqbHTBRq+PQAqfaS8f/236fUrWhfSn8P4jovyzqucxme7/vWSSZBX2Q==", 2300 | "requires": { 2301 | "@octokit/request": "^8.0.1", 2302 | "@octokit/types": "^12.0.0", 2303 | "universal-user-agent": "^6.0.0" 2304 | } 2305 | }, 2306 | "@octokit/openapi-types": { 2307 | "version": "20.0.0", 2308 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-20.0.0.tgz", 2309 | "integrity": "sha512-EtqRBEjp1dL/15V7WiX5LJMIxxkdiGJnabzYx5Apx4FkQIFgAfKumXeYAqqJCj1s+BMX4cPFIFC4OLCR6stlnA==" 2310 | }, 2311 | "@octokit/plugin-paginate-rest": { 2312 | "version": "9.2.2", 2313 | "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-9.2.2.tgz", 2314 | "integrity": "sha512-u3KYkGF7GcZnSD/3UP0S7K5XUFT2FkOQdcfXZGZQPGv3lm4F2Xbf71lvjldr8c1H3nNbF+33cLEkWYbokGWqiQ==", 2315 | "requires": { 2316 | "@octokit/types": "^12.6.0" 2317 | } 2318 | }, 2319 | "@octokit/plugin-rest-endpoint-methods": { 2320 | "version": "10.4.1", 2321 | "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-10.4.1.tgz", 2322 | "integrity": "sha512-xV1b+ceKV9KytQe3zCVqjg+8GTGfDYwaT1ATU5isiUyVtlVAO3HNdzpS4sr4GBx4hxQ46s7ITtZrAsxG22+rVg==", 2323 | "requires": { 2324 | "@octokit/types": "^12.6.0" 2325 | } 2326 | }, 2327 | "@octokit/request": { 2328 | "version": "8.4.1", 2329 | "resolved": "https://registry.npmjs.org/@octokit/request/-/request-8.4.1.tgz", 2330 | "integrity": "sha512-qnB2+SY3hkCmBxZsR/MPCybNmbJe4KAlfWErXq+rBKkQJlbjdJeS85VI9r8UqeLYLvnAenU8Q1okM/0MBsAGXw==", 2331 | "requires": { 2332 | "@octokit/endpoint": "^9.0.6", 2333 | "@octokit/request-error": "^5.1.1", 2334 | "@octokit/types": "^13.1.0", 2335 | "universal-user-agent": "^6.0.0" 2336 | }, 2337 | "dependencies": { 2338 | "@octokit/openapi-types": { 2339 | "version": "23.0.1", 2340 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz", 2341 | "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==" 2342 | }, 2343 | "@octokit/types": { 2344 | "version": "13.8.0", 2345 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz", 2346 | "integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==", 2347 | "requires": { 2348 | "@octokit/openapi-types": "^23.0.1" 2349 | } 2350 | } 2351 | } 2352 | }, 2353 | "@octokit/request-error": { 2354 | "version": "5.1.1", 2355 | "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-5.1.1.tgz", 2356 | "integrity": "sha512-v9iyEQJH6ZntoENr9/yXxjuezh4My67CBSu9r6Ve/05Iu5gNgnisNWOsoJHTP6k0Rr0+HQIpnH+kyammu90q/g==", 2357 | "requires": { 2358 | "@octokit/types": "^13.1.0", 2359 | "deprecation": "^2.0.0", 2360 | "once": "^1.4.0" 2361 | }, 2362 | "dependencies": { 2363 | "@octokit/openapi-types": { 2364 | "version": "23.0.1", 2365 | "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-23.0.1.tgz", 2366 | "integrity": "sha512-izFjMJ1sir0jn0ldEKhZ7xegCTj/ObmEDlEfpFrx4k/JyZSMRHbO3/rBwgE7f3m2DHt+RrNGIVw4wSmwnm3t/g==" 2367 | }, 2368 | "@octokit/types": { 2369 | "version": "13.8.0", 2370 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-13.8.0.tgz", 2371 | "integrity": "sha512-x7DjTIbEpEWXK99DMd01QfWy0hd5h4EN+Q7shkdKds3otGQP+oWE/y0A76i1OvH9fygo4ddvNf7ZvF0t78P98A==", 2372 | "requires": { 2373 | "@octokit/openapi-types": "^23.0.1" 2374 | } 2375 | } 2376 | } 2377 | }, 2378 | "@octokit/types": { 2379 | "version": "12.6.0", 2380 | "resolved": "https://registry.npmjs.org/@octokit/types/-/types-12.6.0.tgz", 2381 | "integrity": "sha512-1rhSOfRa6H9w4YwK0yrf5faDaDTb+yLyBUKOCV4xtCDB5VmIPqd/v9yr9o6SAzOAlRxMiRiCic6JVM1/kunVkw==", 2382 | "requires": { 2383 | "@octokit/openapi-types": "^20.0.0" 2384 | } 2385 | }, 2386 | "@pkgjs/parseargs": { 2387 | "version": "0.11.0", 2388 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 2389 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 2390 | "optional": true 2391 | }, 2392 | "@pkgr/core": { 2393 | "version": "0.2.7", 2394 | "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.7.tgz", 2395 | "integrity": "sha512-YLT9Zo3oNPJoBjBc4q8G2mjU4tqIbf5CEOORbUUr48dCD9q3umJ3IPlVqOqDakPfd2HuwccBaqlGhN4Gmr5OWg==", 2396 | "dev": true 2397 | }, 2398 | "@putout/git-status-porcelain": { 2399 | "version": "3.0.0", 2400 | "resolved": "https://registry.npmjs.org/@putout/git-status-porcelain/-/git-status-porcelain-3.0.0.tgz", 2401 | "integrity": "sha512-TJxXfrpZGzSf7pQ96MMBpPICtM5G9r7MAWKpH3GJi3deGII3ILLibA47P2qMeUbCmXml5wG6DTQS7OZFOrTIUQ==" 2402 | }, 2403 | "@ungap/structured-clone": { 2404 | "version": "1.2.0", 2405 | "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", 2406 | "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", 2407 | "dev": true 2408 | }, 2409 | "@vercel/ncc": { 2410 | "version": "0.38.3", 2411 | "resolved": "https://registry.npmjs.org/@vercel/ncc/-/ncc-0.38.3.tgz", 2412 | "integrity": "sha512-rnK6hJBS6mwc+Bkab+PGPs9OiS0i/3kdTO+CkI8V0/VrW3vmz7O2Pxjw/owOlmo6PKEIxRSeZKv/kuL9itnpYA==", 2413 | "dev": true 2414 | }, 2415 | "acorn": { 2416 | "version": "7.4.1", 2417 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", 2418 | "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", 2419 | "dev": true 2420 | }, 2421 | "acorn-jsx": { 2422 | "version": "5.3.2", 2423 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 2424 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 2425 | "dev": true, 2426 | "requires": {} 2427 | }, 2428 | "ajv": { 2429 | "version": "6.12.6", 2430 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 2431 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 2432 | "dev": true, 2433 | "requires": { 2434 | "fast-deep-equal": "^3.1.1", 2435 | "fast-json-stable-stringify": "^2.0.0", 2436 | "json-schema-traverse": "^0.4.1", 2437 | "uri-js": "^4.2.2" 2438 | } 2439 | }, 2440 | "ansi-regex": { 2441 | "version": "5.0.1", 2442 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2443 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==" 2444 | }, 2445 | "ansi-styles": { 2446 | "version": "6.2.1", 2447 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 2448 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==" 2449 | }, 2450 | "argparse": { 2451 | "version": "2.0.1", 2452 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 2453 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 2454 | "dev": true 2455 | }, 2456 | "balanced-match": { 2457 | "version": "1.0.0", 2458 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.0.tgz", 2459 | "integrity": "sha1-ibTRmasr7kneFk6gK4nORi1xt2c=" 2460 | }, 2461 | "before-after-hook": { 2462 | "version": "2.2.3", 2463 | "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.3.tgz", 2464 | "integrity": "sha512-NzUnlZexiaH/46WDhANlyR2bXRopNg4F/zuSA3OpZnllCUgRaOF2znDioDWrmbNVsuZk6l9pMquQB38cfBZwkQ==" 2465 | }, 2466 | "brace-expansion": { 2467 | "version": "1.1.11", 2468 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 2469 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 2470 | "requires": { 2471 | "balanced-match": "^1.0.0", 2472 | "concat-map": "0.0.1" 2473 | } 2474 | }, 2475 | "callsites": { 2476 | "version": "3.1.0", 2477 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 2478 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 2479 | "dev": true 2480 | }, 2481 | "chalk": { 2482 | "version": "4.1.0", 2483 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.0.tgz", 2484 | "integrity": "sha512-qwx12AxXe2Q5xQ43Ac//I6v5aXTipYrSESdOgzrN+9XjgEpyjpKuvSGaN4qE93f7TQTlerQQ8S+EQ0EyDoVL1A==", 2485 | "dev": true, 2486 | "requires": { 2487 | "ansi-styles": "^4.1.0", 2488 | "supports-color": "^7.1.0" 2489 | }, 2490 | "dependencies": { 2491 | "ansi-styles": { 2492 | "version": "4.3.0", 2493 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 2494 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 2495 | "dev": true, 2496 | "requires": { 2497 | "color-convert": "^2.0.1" 2498 | } 2499 | }, 2500 | "has-flag": { 2501 | "version": "4.0.0", 2502 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2503 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2504 | "dev": true 2505 | }, 2506 | "supports-color": { 2507 | "version": "7.2.0", 2508 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2509 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2510 | "dev": true, 2511 | "requires": { 2512 | "has-flag": "^4.0.0" 2513 | } 2514 | } 2515 | } 2516 | }, 2517 | "color-convert": { 2518 | "version": "2.0.1", 2519 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 2520 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 2521 | "requires": { 2522 | "color-name": "~1.1.4" 2523 | } 2524 | }, 2525 | "color-name": { 2526 | "version": "1.1.4", 2527 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 2528 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" 2529 | }, 2530 | "concat-map": { 2531 | "version": "0.0.1", 2532 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 2533 | "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" 2534 | }, 2535 | "cross-spawn": { 2536 | "version": "7.0.5", 2537 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", 2538 | "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", 2539 | "requires": { 2540 | "path-key": "^3.1.0", 2541 | "shebang-command": "^2.0.0", 2542 | "which": "^2.0.1" 2543 | } 2544 | }, 2545 | "debug": { 2546 | "version": "4.3.4", 2547 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 2548 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 2549 | "dev": true, 2550 | "requires": { 2551 | "ms": "2.1.2" 2552 | } 2553 | }, 2554 | "deep-is": { 2555 | "version": "0.1.4", 2556 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 2557 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 2558 | "dev": true 2559 | }, 2560 | "deprecation": { 2561 | "version": "2.3.1", 2562 | "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", 2563 | "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==" 2564 | }, 2565 | "doctrine": { 2566 | "version": "3.0.0", 2567 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 2568 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 2569 | "dev": true, 2570 | "requires": { 2571 | "esutils": "^2.0.2" 2572 | } 2573 | }, 2574 | "eastasianwidth": { 2575 | "version": "0.2.0", 2576 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 2577 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" 2578 | }, 2579 | "emoji-regex": { 2580 | "version": "9.2.2", 2581 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 2582 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" 2583 | }, 2584 | "eslint": { 2585 | "version": "8.57.0", 2586 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", 2587 | "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", 2588 | "dev": true, 2589 | "requires": { 2590 | "@eslint-community/eslint-utils": "^4.2.0", 2591 | "@eslint-community/regexpp": "^4.6.1", 2592 | "@eslint/eslintrc": "^2.1.4", 2593 | "@eslint/js": "8.57.0", 2594 | "@humanwhocodes/config-array": "^0.11.14", 2595 | "@humanwhocodes/module-importer": "^1.0.1", 2596 | "@nodelib/fs.walk": "^1.2.8", 2597 | "@ungap/structured-clone": "^1.2.0", 2598 | "ajv": "^6.12.4", 2599 | "chalk": "^4.0.0", 2600 | "cross-spawn": "^7.0.2", 2601 | "debug": "^4.3.2", 2602 | "doctrine": "^3.0.0", 2603 | "escape-string-regexp": "^4.0.0", 2604 | "eslint-scope": "^7.2.2", 2605 | "eslint-visitor-keys": "^3.4.3", 2606 | "espree": "^9.6.1", 2607 | "esquery": "^1.4.2", 2608 | "esutils": "^2.0.2", 2609 | "fast-deep-equal": "^3.1.3", 2610 | "file-entry-cache": "^6.0.1", 2611 | "find-up": "^5.0.0", 2612 | "glob-parent": "^6.0.2", 2613 | "globals": "^13.19.0", 2614 | "graphemer": "^1.4.0", 2615 | "ignore": "^5.2.0", 2616 | "imurmurhash": "^0.1.4", 2617 | "is-glob": "^4.0.0", 2618 | "is-path-inside": "^3.0.3", 2619 | "js-yaml": "^4.1.0", 2620 | "json-stable-stringify-without-jsonify": "^1.0.1", 2621 | "levn": "^0.4.1", 2622 | "lodash.merge": "^4.6.2", 2623 | "minimatch": "^3.1.2", 2624 | "natural-compare": "^1.4.0", 2625 | "optionator": "^0.9.3", 2626 | "strip-ansi": "^6.0.1", 2627 | "text-table": "^0.2.0" 2628 | }, 2629 | "dependencies": { 2630 | "escape-string-regexp": { 2631 | "version": "4.0.0", 2632 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 2633 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 2634 | "dev": true 2635 | } 2636 | } 2637 | }, 2638 | "eslint-config-prettier": { 2639 | "version": "10.1.5", 2640 | "resolved": "https://registry.npmjs.org/eslint-config-prettier/-/eslint-config-prettier-10.1.5.tgz", 2641 | "integrity": "sha512-zc1UmCpNltmVY34vuLRV61r1K27sWuX39E+uyUnY8xS2Bex88VV9cugG+UZbRSRGtGyFboj+D8JODyme1plMpw==", 2642 | "dev": true, 2643 | "requires": {} 2644 | }, 2645 | "eslint-plugin-es": { 2646 | "version": "3.0.1", 2647 | "resolved": "https://registry.npmjs.org/eslint-plugin-es/-/eslint-plugin-es-3.0.1.tgz", 2648 | "integrity": "sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==", 2649 | "dev": true, 2650 | "requires": { 2651 | "eslint-utils": "^2.0.0", 2652 | "regexpp": "^3.0.0" 2653 | } 2654 | }, 2655 | "eslint-plugin-node": { 2656 | "version": "11.1.0", 2657 | "resolved": "https://registry.npmjs.org/eslint-plugin-node/-/eslint-plugin-node-11.1.0.tgz", 2658 | "integrity": "sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==", 2659 | "dev": true, 2660 | "requires": { 2661 | "eslint-plugin-es": "^3.0.0", 2662 | "eslint-utils": "^2.0.0", 2663 | "ignore": "^5.1.1", 2664 | "minimatch": "^3.0.4", 2665 | "resolve": "^1.10.1", 2666 | "semver": "^6.1.0" 2667 | } 2668 | }, 2669 | "eslint-plugin-prettier": { 2670 | "version": "5.4.1", 2671 | "resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-5.4.1.tgz", 2672 | "integrity": "sha512-9dF+KuU/Ilkq27A8idRP7N2DH8iUR6qXcjF3FR2wETY21PZdBrIjwCau8oboyGj9b7etWmTGEeM8e7oOed6ZWg==", 2673 | "dev": true, 2674 | "requires": { 2675 | "prettier-linter-helpers": "^1.0.0", 2676 | "synckit": "^0.11.7" 2677 | } 2678 | }, 2679 | "eslint-plugin-sort-keys-fix": { 2680 | "version": "1.1.2", 2681 | "resolved": "https://registry.npmjs.org/eslint-plugin-sort-keys-fix/-/eslint-plugin-sort-keys-fix-1.1.2.tgz", 2682 | "integrity": "sha512-DNPHFGCA0/hZIsfODbeLZqaGY/+q3vgtshF85r+YWDNCQ2apd9PNs/zL6ttKm0nD1IFwvxyg3YOTI7FHl4unrw==", 2683 | "dev": true, 2684 | "requires": { 2685 | "espree": "^6.1.2", 2686 | "esutils": "^2.0.2", 2687 | "natural-compare": "^1.4.0", 2688 | "requireindex": "~1.2.0" 2689 | }, 2690 | "dependencies": { 2691 | "eslint-visitor-keys": { 2692 | "version": "1.3.0", 2693 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 2694 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 2695 | "dev": true 2696 | }, 2697 | "espree": { 2698 | "version": "6.2.1", 2699 | "resolved": "https://registry.npmjs.org/espree/-/espree-6.2.1.tgz", 2700 | "integrity": "sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==", 2701 | "dev": true, 2702 | "requires": { 2703 | "acorn": "^7.1.1", 2704 | "acorn-jsx": "^5.2.0", 2705 | "eslint-visitor-keys": "^1.1.0" 2706 | } 2707 | } 2708 | } 2709 | }, 2710 | "eslint-scope": { 2711 | "version": "7.2.2", 2712 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 2713 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 2714 | "dev": true, 2715 | "requires": { 2716 | "esrecurse": "^4.3.0", 2717 | "estraverse": "^5.2.0" 2718 | } 2719 | }, 2720 | "eslint-utils": { 2721 | "version": "2.1.0", 2722 | "resolved": "https://registry.npmjs.org/eslint-utils/-/eslint-utils-2.1.0.tgz", 2723 | "integrity": "sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==", 2724 | "dev": true, 2725 | "requires": { 2726 | "eslint-visitor-keys": "^1.1.0" 2727 | }, 2728 | "dependencies": { 2729 | "eslint-visitor-keys": { 2730 | "version": "1.3.0", 2731 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-1.3.0.tgz", 2732 | "integrity": "sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==", 2733 | "dev": true 2734 | } 2735 | } 2736 | }, 2737 | "eslint-visitor-keys": { 2738 | "version": "3.4.3", 2739 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 2740 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 2741 | "dev": true 2742 | }, 2743 | "espree": { 2744 | "version": "9.6.1", 2745 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 2746 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 2747 | "dev": true, 2748 | "requires": { 2749 | "acorn": "^8.9.0", 2750 | "acorn-jsx": "^5.3.2", 2751 | "eslint-visitor-keys": "^3.4.1" 2752 | }, 2753 | "dependencies": { 2754 | "acorn": { 2755 | "version": "8.11.2", 2756 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", 2757 | "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", 2758 | "dev": true 2759 | } 2760 | } 2761 | }, 2762 | "esquery": { 2763 | "version": "1.5.0", 2764 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 2765 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 2766 | "dev": true, 2767 | "requires": { 2768 | "estraverse": "^5.1.0" 2769 | } 2770 | }, 2771 | "esrecurse": { 2772 | "version": "4.3.0", 2773 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 2774 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 2775 | "dev": true, 2776 | "requires": { 2777 | "estraverse": "^5.2.0" 2778 | } 2779 | }, 2780 | "estraverse": { 2781 | "version": "5.3.0", 2782 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 2783 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 2784 | "dev": true 2785 | }, 2786 | "esutils": { 2787 | "version": "2.0.3", 2788 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 2789 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 2790 | "dev": true 2791 | }, 2792 | "fast-deep-equal": { 2793 | "version": "3.1.3", 2794 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 2795 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 2796 | "dev": true 2797 | }, 2798 | "fast-diff": { 2799 | "version": "1.2.0", 2800 | "resolved": "https://registry.npmjs.org/fast-diff/-/fast-diff-1.2.0.tgz", 2801 | "integrity": "sha512-xJuoT5+L99XlZ8twedaRf6Ax2TgQVxvgZOYoPKqZufmJib0tL2tegPBOZb1pVNgIhlqDlA0eO0c3wBvQcmzx4w==", 2802 | "dev": true 2803 | }, 2804 | "fast-json-stable-stringify": { 2805 | "version": "2.1.0", 2806 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 2807 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 2808 | "dev": true 2809 | }, 2810 | "fast-levenshtein": { 2811 | "version": "2.0.6", 2812 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 2813 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 2814 | "dev": true 2815 | }, 2816 | "fastq": { 2817 | "version": "1.13.0", 2818 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", 2819 | "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", 2820 | "dev": true, 2821 | "requires": { 2822 | "reusify": "^1.0.4" 2823 | } 2824 | }, 2825 | "file-entry-cache": { 2826 | "version": "6.0.1", 2827 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 2828 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 2829 | "dev": true, 2830 | "requires": { 2831 | "flat-cache": "^3.0.4" 2832 | } 2833 | }, 2834 | "find-up": { 2835 | "version": "5.0.0", 2836 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 2837 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 2838 | "dev": true, 2839 | "requires": { 2840 | "locate-path": "^6.0.0", 2841 | "path-exists": "^4.0.0" 2842 | } 2843 | }, 2844 | "flat-cache": { 2845 | "version": "3.0.4", 2846 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.0.4.tgz", 2847 | "integrity": "sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==", 2848 | "dev": true, 2849 | "requires": { 2850 | "flatted": "^3.1.0", 2851 | "rimraf": "^3.0.2" 2852 | }, 2853 | "dependencies": { 2854 | "glob": { 2855 | "version": "7.2.3", 2856 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 2857 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 2858 | "dev": true, 2859 | "requires": { 2860 | "fs.realpath": "^1.0.0", 2861 | "inflight": "^1.0.4", 2862 | "inherits": "2", 2863 | "minimatch": "^3.1.1", 2864 | "once": "^1.3.0", 2865 | "path-is-absolute": "^1.0.0" 2866 | } 2867 | }, 2868 | "rimraf": { 2869 | "version": "3.0.2", 2870 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 2871 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 2872 | "dev": true, 2873 | "requires": { 2874 | "glob": "^7.1.3" 2875 | } 2876 | } 2877 | } 2878 | }, 2879 | "flatted": { 2880 | "version": "3.1.1", 2881 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.1.1.tgz", 2882 | "integrity": "sha512-zAoAQiudy+r5SvnSw3KJy5os/oRJYHzrzja/tBDqrZtNhUw8bt6y8OBzMWcjWr+8liV8Eb6yOhw8WZ7VFZ5ZzA==", 2883 | "dev": true 2884 | }, 2885 | "foreground-child": { 2886 | "version": "3.2.1", 2887 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.2.1.tgz", 2888 | "integrity": "sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==", 2889 | "requires": { 2890 | "cross-spawn": "^7.0.0", 2891 | "signal-exit": "^4.0.1" 2892 | } 2893 | }, 2894 | "fs.realpath": { 2895 | "version": "1.0.0", 2896 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2897 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 2898 | "dev": true 2899 | }, 2900 | "function-bind": { 2901 | "version": "1.1.1", 2902 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", 2903 | "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", 2904 | "dev": true 2905 | }, 2906 | "glob": { 2907 | "version": "11.0.0", 2908 | "resolved": "https://registry.npmjs.org/glob/-/glob-11.0.0.tgz", 2909 | "integrity": "sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==", 2910 | "requires": { 2911 | "foreground-child": "^3.1.0", 2912 | "jackspeak": "^4.0.1", 2913 | "minimatch": "^10.0.0", 2914 | "minipass": "^7.1.2", 2915 | "package-json-from-dist": "^1.0.0", 2916 | "path-scurry": "^2.0.0" 2917 | }, 2918 | "dependencies": { 2919 | "brace-expansion": { 2920 | "version": "2.0.1", 2921 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 2922 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 2923 | "requires": { 2924 | "balanced-match": "^1.0.0" 2925 | } 2926 | }, 2927 | "minimatch": { 2928 | "version": "10.0.1", 2929 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-10.0.1.tgz", 2930 | "integrity": "sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==", 2931 | "requires": { 2932 | "brace-expansion": "^2.0.1" 2933 | } 2934 | } 2935 | } 2936 | }, 2937 | "glob-parent": { 2938 | "version": "6.0.2", 2939 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 2940 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2941 | "dev": true, 2942 | "requires": { 2943 | "is-glob": "^4.0.3" 2944 | } 2945 | }, 2946 | "globals": { 2947 | "version": "13.23.0", 2948 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.23.0.tgz", 2949 | "integrity": "sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==", 2950 | "dev": true, 2951 | "requires": { 2952 | "type-fest": "^0.20.2" 2953 | } 2954 | }, 2955 | "graphemer": { 2956 | "version": "1.4.0", 2957 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 2958 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 2959 | "dev": true 2960 | }, 2961 | "has": { 2962 | "version": "1.0.3", 2963 | "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", 2964 | "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", 2965 | "dev": true, 2966 | "requires": { 2967 | "function-bind": "^1.1.1" 2968 | } 2969 | }, 2970 | "husky": { 2971 | "version": "9.1.7", 2972 | "resolved": "https://registry.npmjs.org/husky/-/husky-9.1.7.tgz", 2973 | "integrity": "sha512-5gs5ytaNjBrh5Ow3zrvdUUY+0VxIuWVL4i9irt6friV+BqdCfmV11CQTWMiBYWHbXhco+J1kHfTOUkePhCDvMA==", 2974 | "dev": true 2975 | }, 2976 | "ignore": { 2977 | "version": "5.2.0", 2978 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.0.tgz", 2979 | "integrity": "sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==", 2980 | "dev": true 2981 | }, 2982 | "import-fresh": { 2983 | "version": "3.3.0", 2984 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2985 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2986 | "dev": true, 2987 | "requires": { 2988 | "parent-module": "^1.0.0", 2989 | "resolve-from": "^4.0.0" 2990 | } 2991 | }, 2992 | "imurmurhash": { 2993 | "version": "0.1.4", 2994 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2995 | "integrity": "sha1-khi5srkoojixPcT7a21XbyMUU+o=", 2996 | "dev": true 2997 | }, 2998 | "inflight": { 2999 | "version": "1.0.6", 3000 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 3001 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 3002 | "dev": true, 3003 | "requires": { 3004 | "once": "^1.3.0", 3005 | "wrappy": "1" 3006 | } 3007 | }, 3008 | "inherits": { 3009 | "version": "2.0.4", 3010 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 3011 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 3012 | "dev": true 3013 | }, 3014 | "is-core-module": { 3015 | "version": "2.2.0", 3016 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.2.0.tgz", 3017 | "integrity": "sha512-XRAfAdyyY5F5cOXn7hYQDqh2Xmii+DEfIcQGxK/uNwMHhIkPWO0g8msXcbzLe+MpGoR951MlqM/2iIlU4vKDdQ==", 3018 | "dev": true, 3019 | "requires": { 3020 | "has": "^1.0.3" 3021 | } 3022 | }, 3023 | "is-extglob": { 3024 | "version": "2.1.1", 3025 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 3026 | "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", 3027 | "dev": true 3028 | }, 3029 | "is-fullwidth-code-point": { 3030 | "version": "3.0.0", 3031 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 3032 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==" 3033 | }, 3034 | "is-glob": { 3035 | "version": "4.0.3", 3036 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 3037 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 3038 | "dev": true, 3039 | "requires": { 3040 | "is-extglob": "^2.1.1" 3041 | } 3042 | }, 3043 | "is-path-inside": { 3044 | "version": "3.0.3", 3045 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 3046 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 3047 | "dev": true 3048 | }, 3049 | "isexe": { 3050 | "version": "2.0.0", 3051 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 3052 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" 3053 | }, 3054 | "jackspeak": { 3055 | "version": "4.0.1", 3056 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-4.0.1.tgz", 3057 | "integrity": "sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==", 3058 | "requires": { 3059 | "@isaacs/cliui": "^8.0.2", 3060 | "@pkgjs/parseargs": "^0.11.0" 3061 | } 3062 | }, 3063 | "js-yaml": { 3064 | "version": "4.1.0", 3065 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 3066 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 3067 | "dev": true, 3068 | "requires": { 3069 | "argparse": "^2.0.1" 3070 | } 3071 | }, 3072 | "json-schema-traverse": { 3073 | "version": "0.4.1", 3074 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 3075 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 3076 | "dev": true 3077 | }, 3078 | "json-stable-stringify-without-jsonify": { 3079 | "version": "1.0.1", 3080 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 3081 | "integrity": "sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE=", 3082 | "dev": true 3083 | }, 3084 | "levn": { 3085 | "version": "0.4.1", 3086 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 3087 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 3088 | "dev": true, 3089 | "requires": { 3090 | "prelude-ls": "^1.2.1", 3091 | "type-check": "~0.4.0" 3092 | } 3093 | }, 3094 | "locate-path": { 3095 | "version": "6.0.0", 3096 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 3097 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 3098 | "dev": true, 3099 | "requires": { 3100 | "p-locate": "^5.0.0" 3101 | } 3102 | }, 3103 | "lodash.merge": { 3104 | "version": "4.6.2", 3105 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 3106 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 3107 | "dev": true 3108 | }, 3109 | "lru-cache": { 3110 | "version": "11.0.0", 3111 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-11.0.0.tgz", 3112 | "integrity": "sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==" 3113 | }, 3114 | "minimatch": { 3115 | "version": "3.1.2", 3116 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 3117 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 3118 | "requires": { 3119 | "brace-expansion": "^1.1.7" 3120 | } 3121 | }, 3122 | "minipass": { 3123 | "version": "7.1.2", 3124 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 3125 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==" 3126 | }, 3127 | "ms": { 3128 | "version": "2.1.2", 3129 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 3130 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 3131 | "dev": true 3132 | }, 3133 | "natural-compare": { 3134 | "version": "1.4.0", 3135 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 3136 | "integrity": "sha1-Sr6/7tdUHywnrPspvbvRXI1bpPc=", 3137 | "dev": true 3138 | }, 3139 | "once": { 3140 | "version": "1.4.0", 3141 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 3142 | "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", 3143 | "requires": { 3144 | "wrappy": "1" 3145 | } 3146 | }, 3147 | "optionator": { 3148 | "version": "0.9.3", 3149 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 3150 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 3151 | "dev": true, 3152 | "requires": { 3153 | "@aashutoshrathi/word-wrap": "^1.2.3", 3154 | "deep-is": "^0.1.3", 3155 | "fast-levenshtein": "^2.0.6", 3156 | "levn": "^0.4.1", 3157 | "prelude-ls": "^1.2.1", 3158 | "type-check": "^0.4.0" 3159 | } 3160 | }, 3161 | "p-limit": { 3162 | "version": "3.1.0", 3163 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 3164 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 3165 | "dev": true, 3166 | "requires": { 3167 | "yocto-queue": "^0.1.0" 3168 | } 3169 | }, 3170 | "p-locate": { 3171 | "version": "5.0.0", 3172 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 3173 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 3174 | "dev": true, 3175 | "requires": { 3176 | "p-limit": "^3.0.2" 3177 | } 3178 | }, 3179 | "package-json-from-dist": { 3180 | "version": "1.0.0", 3181 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", 3182 | "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==" 3183 | }, 3184 | "parent-module": { 3185 | "version": "1.0.1", 3186 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 3187 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 3188 | "dev": true, 3189 | "requires": { 3190 | "callsites": "^3.0.0" 3191 | } 3192 | }, 3193 | "path-exists": { 3194 | "version": "4.0.0", 3195 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 3196 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 3197 | "dev": true 3198 | }, 3199 | "path-is-absolute": { 3200 | "version": "1.0.1", 3201 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3202 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 3203 | "dev": true 3204 | }, 3205 | "path-key": { 3206 | "version": "3.1.1", 3207 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3208 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==" 3209 | }, 3210 | "path-parse": { 3211 | "version": "1.0.7", 3212 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 3213 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 3214 | "dev": true 3215 | }, 3216 | "path-scurry": { 3217 | "version": "2.0.0", 3218 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-2.0.0.tgz", 3219 | "integrity": "sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==", 3220 | "requires": { 3221 | "lru-cache": "^11.0.0", 3222 | "minipass": "^7.1.2" 3223 | } 3224 | }, 3225 | "prelude-ls": { 3226 | "version": "1.2.1", 3227 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 3228 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 3229 | "dev": true 3230 | }, 3231 | "prettier": { 3232 | "version": "3.5.3", 3233 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.5.3.tgz", 3234 | "integrity": "sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==", 3235 | "dev": true 3236 | }, 3237 | "prettier-linter-helpers": { 3238 | "version": "1.0.0", 3239 | "resolved": "https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.0.tgz", 3240 | "integrity": "sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==", 3241 | "dev": true, 3242 | "requires": { 3243 | "fast-diff": "^1.1.2" 3244 | } 3245 | }, 3246 | "punycode": { 3247 | "version": "2.3.1", 3248 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 3249 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 3250 | "dev": true 3251 | }, 3252 | "queue-microtask": { 3253 | "version": "1.2.3", 3254 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 3255 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 3256 | "dev": true 3257 | }, 3258 | "recursive-readdir": { 3259 | "version": "2.2.3", 3260 | "resolved": "https://registry.npmjs.org/recursive-readdir/-/recursive-readdir-2.2.3.tgz", 3261 | "integrity": "sha512-8HrF5ZsXk5FAH9dgsx3BlUer73nIhuj+9OrQwEbLTPOBzGkL1lsFCR01am+v+0m2Cmbs1nP12hLDl5FA7EszKA==", 3262 | "requires": { 3263 | "minimatch": "^3.0.5" 3264 | } 3265 | }, 3266 | "regexpp": { 3267 | "version": "3.2.0", 3268 | "resolved": "https://registry.npmjs.org/regexpp/-/regexpp-3.2.0.tgz", 3269 | "integrity": "sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==", 3270 | "dev": true 3271 | }, 3272 | "requireindex": { 3273 | "version": "1.2.0", 3274 | "resolved": "https://registry.npmjs.org/requireindex/-/requireindex-1.2.0.tgz", 3275 | "integrity": "sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww==", 3276 | "dev": true 3277 | }, 3278 | "resolve": { 3279 | "version": "1.19.0", 3280 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.19.0.tgz", 3281 | "integrity": "sha512-rArEXAgsBG4UgRGcynxWIWKFvh/XZCcS8UJdHhwy91zwAvCZIbcs+vAbflgBnNjYMs/i/i+/Ux6IZhML1yPvxg==", 3282 | "dev": true, 3283 | "requires": { 3284 | "is-core-module": "^2.1.0", 3285 | "path-parse": "^1.0.6" 3286 | } 3287 | }, 3288 | "resolve-from": { 3289 | "version": "4.0.0", 3290 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3291 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3292 | "dev": true 3293 | }, 3294 | "reusify": { 3295 | "version": "1.0.4", 3296 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 3297 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 3298 | "dev": true 3299 | }, 3300 | "rimraf": { 3301 | "version": "6.0.1", 3302 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-6.0.1.tgz", 3303 | "integrity": "sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==", 3304 | "requires": { 3305 | "glob": "^11.0.0", 3306 | "package-json-from-dist": "^1.0.0" 3307 | } 3308 | }, 3309 | "run-parallel": { 3310 | "version": "1.2.0", 3311 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3312 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3313 | "dev": true, 3314 | "requires": { 3315 | "queue-microtask": "^1.2.2" 3316 | } 3317 | }, 3318 | "semver": { 3319 | "version": "6.3.1", 3320 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 3321 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 3322 | "dev": true 3323 | }, 3324 | "shebang-command": { 3325 | "version": "2.0.0", 3326 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3327 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3328 | "requires": { 3329 | "shebang-regex": "^3.0.0" 3330 | } 3331 | }, 3332 | "shebang-regex": { 3333 | "version": "3.0.0", 3334 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3335 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==" 3336 | }, 3337 | "signal-exit": { 3338 | "version": "4.1.0", 3339 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 3340 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==" 3341 | }, 3342 | "string-width": { 3343 | "version": "5.1.2", 3344 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 3345 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 3346 | "requires": { 3347 | "eastasianwidth": "^0.2.0", 3348 | "emoji-regex": "^9.2.2", 3349 | "strip-ansi": "^7.0.1" 3350 | }, 3351 | "dependencies": { 3352 | "ansi-regex": { 3353 | "version": "6.0.1", 3354 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 3355 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" 3356 | }, 3357 | "strip-ansi": { 3358 | "version": "7.1.0", 3359 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 3360 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 3361 | "requires": { 3362 | "ansi-regex": "^6.0.1" 3363 | } 3364 | } 3365 | } 3366 | }, 3367 | "string-width-cjs": { 3368 | "version": "npm:string-width@4.2.3", 3369 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3370 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3371 | "requires": { 3372 | "emoji-regex": "^8.0.0", 3373 | "is-fullwidth-code-point": "^3.0.0", 3374 | "strip-ansi": "^6.0.1" 3375 | }, 3376 | "dependencies": { 3377 | "emoji-regex": { 3378 | "version": "8.0.0", 3379 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 3380 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 3381 | } 3382 | } 3383 | }, 3384 | "strip-ansi": { 3385 | "version": "6.0.1", 3386 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3387 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3388 | "requires": { 3389 | "ansi-regex": "^5.0.1" 3390 | } 3391 | }, 3392 | "strip-ansi-cjs": { 3393 | "version": "npm:strip-ansi@6.0.1", 3394 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3395 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3396 | "requires": { 3397 | "ansi-regex": "^5.0.1" 3398 | } 3399 | }, 3400 | "strip-json-comments": { 3401 | "version": "3.1.1", 3402 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3403 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3404 | "dev": true 3405 | }, 3406 | "synckit": { 3407 | "version": "0.11.8", 3408 | "resolved": "https://registry.npmjs.org/synckit/-/synckit-0.11.8.tgz", 3409 | "integrity": "sha512-+XZ+r1XGIJGeQk3VvXhT6xx/VpbHsRzsTkGgF6E5RX9TTXD0118l87puaEBZ566FhqblC6U0d4XnubznJDm30A==", 3410 | "dev": true, 3411 | "requires": { 3412 | "@pkgr/core": "^0.2.4" 3413 | } 3414 | }, 3415 | "text-table": { 3416 | "version": "0.2.0", 3417 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3418 | "integrity": "sha1-f17oI66AUgfACvLfSoTsP8+lcLQ=", 3419 | "dev": true 3420 | }, 3421 | "tunnel": { 3422 | "version": "0.0.6", 3423 | "resolved": "https://registry.npmjs.org/tunnel/-/tunnel-0.0.6.tgz", 3424 | "integrity": "sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==" 3425 | }, 3426 | "type-check": { 3427 | "version": "0.4.0", 3428 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3429 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3430 | "dev": true, 3431 | "requires": { 3432 | "prelude-ls": "^1.2.1" 3433 | } 3434 | }, 3435 | "type-fest": { 3436 | "version": "0.20.2", 3437 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 3438 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 3439 | "dev": true 3440 | }, 3441 | "undici": { 3442 | "version": "5.29.0", 3443 | "resolved": "https://registry.npmjs.org/undici/-/undici-5.29.0.tgz", 3444 | "integrity": "sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg==", 3445 | "requires": { 3446 | "@fastify/busboy": "^2.0.0" 3447 | } 3448 | }, 3449 | "universal-user-agent": { 3450 | "version": "6.0.0", 3451 | "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", 3452 | "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==" 3453 | }, 3454 | "uri-js": { 3455 | "version": "4.4.1", 3456 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3457 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3458 | "dev": true, 3459 | "requires": { 3460 | "punycode": "^2.1.0" 3461 | } 3462 | }, 3463 | "which": { 3464 | "version": "2.0.2", 3465 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3466 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3467 | "requires": { 3468 | "isexe": "^2.0.0" 3469 | } 3470 | }, 3471 | "wrap-ansi": { 3472 | "version": "8.1.0", 3473 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 3474 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 3475 | "requires": { 3476 | "ansi-styles": "^6.1.0", 3477 | "string-width": "^5.0.1", 3478 | "strip-ansi": "^7.0.1" 3479 | }, 3480 | "dependencies": { 3481 | "ansi-regex": { 3482 | "version": "6.0.1", 3483 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 3484 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==" 3485 | }, 3486 | "strip-ansi": { 3487 | "version": "7.1.0", 3488 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 3489 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 3490 | "requires": { 3491 | "ansi-regex": "^6.0.1" 3492 | } 3493 | } 3494 | } 3495 | }, 3496 | "wrap-ansi-cjs": { 3497 | "version": "npm:wrap-ansi@7.0.0", 3498 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 3499 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 3500 | "requires": { 3501 | "ansi-styles": "^4.0.0", 3502 | "string-width": "^4.1.0", 3503 | "strip-ansi": "^6.0.0" 3504 | }, 3505 | "dependencies": { 3506 | "ansi-styles": { 3507 | "version": "4.3.0", 3508 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 3509 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 3510 | "requires": { 3511 | "color-convert": "^2.0.1" 3512 | } 3513 | }, 3514 | "emoji-regex": { 3515 | "version": "8.0.0", 3516 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 3517 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" 3518 | }, 3519 | "string-width": { 3520 | "version": "4.2.3", 3521 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 3522 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 3523 | "requires": { 3524 | "emoji-regex": "^8.0.0", 3525 | "is-fullwidth-code-point": "^3.0.0", 3526 | "strip-ansi": "^6.0.1" 3527 | } 3528 | } 3529 | } 3530 | }, 3531 | "wrappy": { 3532 | "version": "1.0.2", 3533 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 3534 | "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=" 3535 | }, 3536 | "yocto-queue": { 3537 | "version": "0.1.0", 3538 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 3539 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 3540 | "dev": true 3541 | } 3542 | } 3543 | } 3544 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "files-sync-action", 3 | "version": "0.0.0", 4 | "description": "Files sync action for Github", 5 | "main": "dist/index.js", 6 | "scripts": { 7 | "build": "ncc build index.js -o dist -m", 8 | "lint:all": "npx eslint --ext .js .", 9 | "lint:all:fix": "npm run lint:all -- --fix", 10 | "lint": "npm run lint:all:fix" 11 | }, 12 | "keywords": [ 13 | "actions", 14 | "node", 15 | "setup" 16 | ], 17 | "repository": { 18 | "type": "git", 19 | "url": "git+https://github.com/adrianjost/files-sync-action.git" 20 | }, 21 | "author": "Adrian Jost", 22 | "dependencies": { 23 | "@actions/core": "^1.11.1", 24 | "@actions/github": "^6.0.1", 25 | "@putout/git-status-porcelain": "^3.0.0", 26 | "recursive-readdir": "^2.2.3", 27 | "rimraf": "^6.0.1" 28 | }, 29 | "devDependencies": { 30 | "@vercel/ncc": "^0.38.3", 31 | "eslint": "^8.57.0", 32 | "eslint-config-prettier": "^10.1.5", 33 | "eslint-plugin-node": "^11.1.0", 34 | "eslint-plugin-prettier": "^5.4.1", 35 | "eslint-plugin-sort-keys-fix": "^1.1.2", 36 | "husky": "^9.1.7", 37 | "prettier": "^3.5.3" 38 | }, 39 | "husky": { 40 | "hooks": { 41 | "pre-commit": "npm run lint && npm run build && git add dist/*" 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /src/context.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs"); 2 | 3 | const core = require("@actions/core"); 4 | 5 | const log = require("./log"); 6 | 7 | const parseMultilineInput = (multilineInput) => { 8 | return multilineInput.split("\n").map((e) => e.trim()); 9 | }; 10 | 11 | const context = { 12 | get COMMIT_MESSAGE() { 13 | return ( 14 | core.getInput("COMMIT_MESSAGE", { required: false }) || 15 | `Update file(s) from \"%SRC_REPO%\"` 16 | ); 17 | }, 18 | DRY_RUN: ["1", "true"].includes( 19 | core.getInput("DRY_RUN", { required: false }).toLowerCase() 20 | ), 21 | FILE_PATTERNS: parseMultilineInput(core.getInput("FILE_PATTERNS")).map( 22 | (s) => new RegExp(s) 23 | ), 24 | GITHUB_SERVER: 25 | core.getInput("GITHUB_SERVER", { required: false }) || "github.com", 26 | GITHUB_TOKEN: core.getInput("GITHUB_TOKEN", { required: true }), 27 | GIT_EMAIL: 28 | core.getInput("GIT_EMAIL") || 29 | `${process.env.GITHUB_ACTOR}@users.noreply.github.com`, 30 | GIT_USERNAME: 31 | core.getInput("GIT_USERNAME", { required: false }) || 32 | process.env.GITHUB_ACTOR, 33 | SKIP_CLEANUP: ["1", "true"].includes( 34 | core.getInput("SKIP_CLEANUP", { required: false }).toLowerCase() 35 | ), 36 | SKIP_DELETE: ["1", "true"].includes( 37 | core.getInput("SKIP_DELETE", { required: false }).toLowerCase() 38 | ), 39 | SKIP_REPLACE: ["1", "true"].includes( 40 | core.getInput("SKIP_REPLACE", { required: false }).toLowerCase() 41 | ), 42 | SRC_REPO: 43 | core.getInput("SRC_REPO", { required: false }) || 44 | process.env.GITHUB_REPOSITORY, 45 | SRC_ROOT: core.getInput("SRC_ROOT", { required: false }) || "/", 46 | TARGET_REPOS: parseMultilineInput( 47 | core.getInput("TARGET_REPOS", { required: true }) 48 | ), 49 | TARGET_ROOT: core.getInput("TARGET_ROOT", { required: false }) || "/", 50 | TMPDIR: 51 | core.getInput("TEMP_DIR", { required: false }) || 52 | `tmp-${Date.now().toString()}`, 53 | }; 54 | 55 | while (fs.existsSync(context.TMPDIR)) { 56 | context.TMPDIR = `tmp-${Date.now().toString()}`; 57 | log.info(`TEMP_DIR already exists. Using "${context.TMPDIR}" now.`); 58 | } 59 | 60 | log.info("Context:", { 61 | ...context, 62 | GITHUB_TOKEN: "", 63 | }); 64 | 65 | module.exports = context; 66 | -------------------------------------------------------------------------------- /src/git.js: -------------------------------------------------------------------------------- 1 | const { exec } = require("child_process"); 2 | const { parse: porcelainParse } = require("@putout/git-status-porcelain"); 3 | 4 | const { 5 | GITHUB_TOKEN, 6 | GITHUB_SERVER, 7 | SRC_REPO, 8 | COMMIT_MESSAGE, 9 | GIT_USERNAME, 10 | GIT_EMAIL, 11 | DRY_RUN, 12 | } = require("./context"); 13 | 14 | const utils = require("./utils"); 15 | const log = require("./log"); 16 | 17 | const interpolateCommitMessage = (message, data) => { 18 | let newMessage = message; 19 | Object.keys(data).forEach((key) => { 20 | if (key === "COMMIT_MESSAGE") { 21 | return; 22 | } 23 | newMessage = newMessage.replace(new RegExp(`%${key}%`, "g"), data[key]); 24 | }); 25 | return newMessage; 26 | }; 27 | 28 | module.exports = { 29 | init: (repoSlugAndBranch) => { 30 | const { getRepoPath, getRepoSlug, getRepoBranch } = 31 | utils.init(repoSlugAndBranch); 32 | 33 | function execCmd(command, workingDir) { 34 | log.info(`EXEC: "${command}" IN "${workingDir || "./"}"`); 35 | return new Promise((resolve, reject) => { 36 | exec( 37 | command, 38 | { 39 | cwd: workingDir, 40 | }, 41 | function (error, stdout) { 42 | if (error) { 43 | log.info(`OUTPUT ERROR: ${error}`); 44 | } 45 | log.info(`OUTPUT STDOUT: ${stdout ? `"${stdout}"` : "none"}`); 46 | error ? reject(error) : resolve(stdout.trim()); 47 | } 48 | ); 49 | }); 50 | } 51 | 52 | const clone = async () => { 53 | const command = [ 54 | "GIT_LFS_SKIP_SMUDGE=1", 55 | "git clone", 56 | "--depth 1", 57 | getRepoBranch() === undefined ? false : ` -b ${getRepoBranch()}`, 58 | `https://${GITHUB_TOKEN}@${GITHUB_SERVER}/${getRepoSlug()}.git`, 59 | getRepoPath(), 60 | ]; 61 | return execCmd(command.filter(Boolean).join(" ")); 62 | }; 63 | 64 | const hasChanges = async () => { 65 | const statusOutput = await execCmd( 66 | `git status --porcelain`, 67 | getRepoPath() 68 | ); 69 | return porcelainParse(statusOutput).length !== 0; 70 | }; 71 | 72 | const commitAll = async () => { 73 | if (!(await hasChanges())) { 74 | log.info("NO CHANGES DETECTED"); 75 | return; 76 | } 77 | log.info("CHANGES DETECTED"); 78 | log.info("COMMIT CHANGES..."); 79 | const commitMessage = interpolateCommitMessage(COMMIT_MESSAGE, { 80 | SRC_REPO: SRC_REPO, 81 | TARGET_REPO: repoSlugAndBranch, 82 | }); 83 | if (!DRY_RUN) { 84 | const commands = [ 85 | `git config --local user.name "${GIT_USERNAME}"`, 86 | `git config --local user.email "${GIT_EMAIL}"`, 87 | `git add --all`, 88 | `git status`, 89 | `git commit --message "${commitMessage}"`, 90 | `git push`, 91 | ]; 92 | try { 93 | for (cmd of commands) { 94 | await execCmd(cmd, getRepoPath()); 95 | } 96 | } catch (error) { 97 | log.error(error); 98 | throw new Error("failed to commit changes"); 99 | } 100 | } 101 | log.info("CHANGES COMMITED"); 102 | }; 103 | 104 | return { 105 | clone, 106 | commitAll, 107 | }; 108 | }, 109 | }; 110 | -------------------------------------------------------------------------------- /src/index.js: -------------------------------------------------------------------------------- 1 | const path = require("path"); 2 | 3 | const { SRC_REPO, TARGET_REPOS, TMPDIR, SKIP_CLEANUP } = require("./context"); 4 | const git = require("./git"); 5 | const { removeDir } = require("./utils"); 6 | 7 | const utils = require("./utils"); 8 | 9 | const main = async () => { 10 | let error; 11 | try { 12 | // PREPARE SRC 13 | const gitSrc = git.init(SRC_REPO); 14 | const utilsSrc = utils.init(SRC_REPO); 15 | 16 | await gitSrc.clone(); 17 | const srcFiles = await utilsSrc.getFiles(); 18 | const relativeSrcFiles = srcFiles.map((file) => 19 | utilsSrc.getRepoRelativeFilePath(file) 20 | ); 21 | 22 | // EXEC IN TARGET REPOS 23 | for (const repo of TARGET_REPOS) { 24 | const utilsRepo = utils.init(repo); 25 | const gitRepo = git.init(repo); 26 | 27 | // PREPARE TARGET 28 | await gitRepo.clone(); 29 | const targetFiles = await utilsRepo.getFiles(); 30 | const removedFiles = targetFiles.filter( 31 | (file) => 32 | !relativeSrcFiles.includes(utilsRepo.getRepoRelativeFilePath(file)) 33 | ); 34 | 35 | // UPDATE FILES 36 | await Promise.all([ 37 | utilsRepo.removeFiles(removedFiles), 38 | ...srcFiles.map(async (srcFile) => 39 | utilsRepo.copyFile( 40 | srcFile, 41 | path.join( 42 | utilsRepo.getRepoFilePath(), 43 | utilsSrc.getRepoRelativeFilePath(srcFile) 44 | ) 45 | ) 46 | ), 47 | ]); 48 | 49 | // COMMIT UPDATES 50 | await gitRepo.commitAll(); 51 | } 52 | } catch (err) { 53 | log.error("ERROR:", err); 54 | error = err; 55 | } 56 | 57 | if (!SKIP_CLEANUP) { 58 | await removeDir(TMPDIR); 59 | } 60 | if (error) { 61 | throw error; 62 | } 63 | }; 64 | 65 | module.exports = main; 66 | -------------------------------------------------------------------------------- /src/log.js: -------------------------------------------------------------------------------- 1 | const core = require("@actions/core"); 2 | 3 | const joinAttributes = (...attrs) => 4 | attrs 5 | .map((p) => 6 | Array.isArray(p) || 7 | Object.prototype.toString.call(p) === "[object Object]" 8 | ? JSON.stringify(p, undefined, 2) 9 | : p 10 | ) 11 | .join(" "); 12 | 13 | const debug = (...attrs) => { 14 | core.debug(joinAttributes(...attrs)); 15 | }; 16 | 17 | const error = (...attrs) => { 18 | core.error(joinAttributes(...attrs)); 19 | }; 20 | 21 | const info = (...attrs) => { 22 | core.info(joinAttributes(...attrs)); 23 | }; 24 | 25 | const warn = (...attrs) => { 26 | core.warning(joinAttributes(...attrs)); 27 | }; 28 | module.exports = { 29 | debug, 30 | error, 31 | info, 32 | warn, 33 | }; 34 | -------------------------------------------------------------------------------- /src/utils.js: -------------------------------------------------------------------------------- 1 | const fs = require("fs").promises; 2 | const path = require("path"); 3 | const listDir = require("recursive-readdir"); 4 | const { rimraf } = require("rimraf"); 5 | 6 | const { 7 | TMPDIR, 8 | FILE_PATTERNS, 9 | DRY_RUN, 10 | SKIP_DELETE, 11 | SKIP_REPLACE, 12 | SRC_REPO, 13 | SRC_ROOT, 14 | TARGET_ROOT, 15 | } = require("./context"); 16 | const log = require("./log"); 17 | 18 | const init = (repoFullname) => { 19 | const getRepoSlug = () => { 20 | return repoFullname.split(":")[0]; 21 | }; 22 | 23 | const getRepoBranch = () => { 24 | return repoFullname.split(":")[1] || undefined; 25 | }; 26 | 27 | const getRepoPath = () => { 28 | return path.join( 29 | TMPDIR, 30 | `${getRepoSlug()}${ 31 | getRepoBranch() === undefined ? "" : `-${getRepoBranch()}` 32 | }` 33 | ); 34 | }; 35 | 36 | const getRepoRoot = () => 37 | repoFullname === SRC_REPO ? SRC_ROOT : TARGET_ROOT; 38 | 39 | const getRepoFilePath = () => path.join(getRepoPath(), getRepoRoot()); 40 | 41 | const getRepoRelativeFilePath = (filePath) => { 42 | return path.relative(getRepoFilePath(), filePath); 43 | }; 44 | 45 | const getPrettyPath = (file) => 46 | file 47 | .replace(/\\/g, "/") 48 | .replace(/^\//, "") 49 | .replace(new RegExp(`^${TMPDIR}/${repoFullname}${getRepoRoot()}`), ""); 50 | 51 | const getMatchingFiles = (files) => { 52 | log.info( 53 | "FILE_PATTERNS", 54 | FILE_PATTERNS.map((a) => a.toString()) 55 | ); 56 | return files.filter((file) => { 57 | cleanFile = getPrettyPath(file); 58 | const hasMatch = FILE_PATTERNS.some((r) => r.test(cleanFile)); 59 | return hasMatch; 60 | }); 61 | }; 62 | 63 | const getFiles = async () => { 64 | const files = await listDir(getRepoPath(), [".git"]); 65 | log.debug("FILES:", JSON.stringify(files.map(getPrettyPath), undefined, 2)); 66 | const matchingFiles = getMatchingFiles(files); 67 | log.info( 68 | "MATCHING FILES:", 69 | JSON.stringify(matchingFiles.map(getPrettyPath), undefined, 2) 70 | ); 71 | return matchingFiles; 72 | }; 73 | 74 | const copyFile = async (from, to) => { 75 | const targetExists = await fs 76 | .access(to) 77 | .then(() => true) 78 | .catch(() => false); 79 | if (SKIP_REPLACE && targetExists) { 80 | log.info( 81 | "skip copying", 82 | from.replace(/\\/g, "/").replace(/^\//, ""), 83 | "to", 84 | to.replace(/\\/g, "/").replace(/^\//, ""), 85 | "because SKIP_REPLACE = true" 86 | ); 87 | return; 88 | } 89 | log.info( 90 | "copy", 91 | from.replace(/\\/g, "/").replace(/^\//, ""), 92 | "to", 93 | to.replace(/\\/g, "/").replace(/^\//, "") 94 | ); 95 | if (DRY_RUN) { 96 | return; 97 | } 98 | await fs.mkdir(path.dirname(to), { recursive: true }); 99 | await fs.copyFile(from, to); 100 | }; 101 | 102 | const removeFiles = async (filePaths) => { 103 | if (SKIP_DELETE) { 104 | log.info( 105 | "SKIP REMOVING FILES because `SKIP_DELETE` is set to `true`", 106 | filePaths.map((f) => `"${f}"`).join(", ") 107 | ); 108 | return; 109 | } 110 | log.info("REMOVE FILES", filePaths); 111 | if (DRY_RUN) { 112 | return; 113 | } 114 | return Promise.all(filePaths.map((file) => fs.unlink(file))); 115 | }; 116 | 117 | return { 118 | copyFile, 119 | getFiles, 120 | getRepoBranch, 121 | getRepoFilePath, 122 | getRepoPath, 123 | getRepoRelativeFilePath, 124 | getRepoSlug, 125 | removeFiles, 126 | }; 127 | }; 128 | 129 | const removeDir = async (dir) => { 130 | new Promise((resolve, reject) => { 131 | rimraf( 132 | dir, 133 | { 134 | disableGlob: true, 135 | }, 136 | (error) => { 137 | if (error) { 138 | return reject(error); 139 | } 140 | resolve(); 141 | } 142 | ); 143 | }); 144 | }; 145 | 146 | module.exports = { 147 | init, 148 | removeDir, 149 | }; 150 | --------------------------------------------------------------------------------