├── .github ├── CODEOWNERS └── workflows │ ├── add-asana-comment.yml │ ├── ci.yml │ ├── example.yml │ ├── mergeabot.yml │ └── release.yml ├── .gitignore ├── .nvmrc ├── .releaserc.yaml ├── .restyled.yaml ├── LICENSE ├── README.md ├── action.yml ├── dist └── index.js ├── example ├── .gitignore ├── example.cabal ├── hie.yaml ├── package.yaml ├── src │ └── Foo.hs ├── stack-link.yaml ├── stack-nightly.yaml ├── stack-nightly.yaml.lock ├── stack.yaml └── stack.yaml.lock ├── generate-matrix └── action.yml ├── jest.config.ts ├── package.json ├── renovate.json ├── src ├── dirty-files.test.ts ├── dirty-files.ts ├── envsubst.test.ts ├── envsubst.ts ├── get-cache-keys.test.ts ├── get-cache-keys.ts ├── hash-project.ts ├── hie.ts ├── inputs.ts ├── main.ts ├── parse-stack-path.test.ts ├── parse-stack-path.ts ├── parse-stack-query.test.ts ├── parse-stack-query.ts ├── stack-cli.test.ts ├── stack-cli.ts ├── stack-yaml.test.ts ├── stack-yaml.ts ├── with-cache.test.ts └── with-cache.ts ├── tsconfig.json └── yarn.lock /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | * @freckle/backenders 2 | -------------------------------------------------------------------------------- /.github/workflows/add-asana-comment.yml: -------------------------------------------------------------------------------- 1 | name: Asana 2 | 3 | on: 4 | pull_request: 5 | types: [opened] 6 | 7 | jobs: 8 | link-asana-task: 9 | if: ${{ github.actor != 'dependabot[bot]' }} 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: Asana/create-app-attachment-github-action@v1.3 13 | id: postAttachment 14 | with: 15 | asana-secret: ${{ secrets.ASANA_API_ACCESS_KEY }} 16 | - run: echo "Status is ${{ steps.postAttachment.outputs.status }}" 17 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | pull_request: 5 | 6 | jobs: 7 | build: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - uses: actions/checkout@v4 11 | - uses: actions/setup-node@v4 12 | with: 13 | cache: yarn 14 | node-version-file: ".nvmrc" 15 | - run: yarn install 16 | - run: yarn build 17 | - run: yarn test 18 | -------------------------------------------------------------------------------- /.github/workflows/example.yml: -------------------------------------------------------------------------------- 1 | name: Example 2 | 3 | on: 4 | pull_request: 5 | push: 6 | branches: main 7 | 8 | concurrency: 9 | group: ${{ github.workflow }}-${{ github.ref }} 10 | cancel-in-progress: true 11 | 12 | defaults: 13 | run: 14 | working-directory: example 15 | 16 | jobs: 17 | # Make sure we use an updated dist/index.js in the examples, which are 18 | # effectively integration tests. In the case of a Dependabot PR, index.js 19 | # won't be rebuilt otherwise. 20 | dist: 21 | runs-on: ubuntu-latest 22 | steps: 23 | - uses: actions/checkout@v4 24 | - uses: actions/setup-node@v4 25 | with: 26 | cache: yarn 27 | node-version-file: ".nvmrc" 28 | - run: yarn install 29 | - run: yarn build 30 | - uses: actions/upload-artifact@v4 31 | with: 32 | name: dist 33 | path: dist/index.js 34 | 35 | test: 36 | needs: dist 37 | 38 | strategy: 39 | matrix: 40 | runner: 41 | - ubuntu-latest 42 | - macOS-latest 43 | - windows-latest 44 | 45 | stack: 46 | - resolver: nightly 47 | - resolver: lts 48 | - resolver: lts-22.7 49 | ghc: "9.6.4" 50 | - resolver: lts-12.26 51 | ghc: "8.4.4" 52 | 53 | exclude: 54 | # Binary distributions for older GHCs don't exist on macOS-latest 55 | - runner: macOS-latest 56 | stack: { ghc: "8.4.4" } 57 | 58 | fail-fast: false 59 | 60 | runs-on: ${{ matrix.runner }} 61 | 62 | steps: 63 | - uses: actions/checkout@v4 64 | - uses: actions/download-artifact@v4 65 | with: 66 | name: dist 67 | path: dist # overwrite dist/index.js 68 | 69 | - id: stack 70 | uses: ./ 71 | with: 72 | cache-prefix: v1/ 73 | working-directory: example 74 | stack-arguments: --resolver ${{ matrix.stack.resolver }} 75 | 76 | - name: Check compiler[-*] outputs 77 | if: matrix.stack.ghc 78 | shell: bash 79 | run: | 80 | [[ "${{ steps.stack.outputs.compiler }}" = ghc-${{ matrix.stack.ghc }} ]] 81 | [[ "${{ steps.stack.outputs.compiler-version }}" = ${{ matrix.stack.ghc }} ]] 82 | 83 | - name: Check presence of other outputs 84 | shell: bash 85 | run: | 86 | # stack path | cut -d: -f1 87 | [[ -n "${{ steps.stack.outputs.snapshot-doc-root }}" ]] 88 | [[ -n "${{ steps.stack.outputs.local-doc-root }}" ]] 89 | [[ -n "${{ steps.stack.outputs.local-hoogle-root }}" ]] 90 | [[ -n "${{ steps.stack.outputs.stack-root }}" ]] 91 | [[ -n "${{ steps.stack.outputs.project-root }}" ]] 92 | [[ -n "${{ steps.stack.outputs.config-location }}" ]] 93 | [[ -n "${{ steps.stack.outputs.bin-path }}" ]] 94 | [[ -n "${{ steps.stack.outputs.programs }}" ]] 95 | [[ -n "${{ steps.stack.outputs.compiler-exe }}" ]] 96 | [[ -n "${{ steps.stack.outputs.compiler-bin }}" ]] 97 | [[ -n "${{ steps.stack.outputs.compiler-tools-bin }}" ]] 98 | [[ -n "${{ steps.stack.outputs.local-bin }}" ]] 99 | 100 | # Actually blank in default setup 101 | # [[ -n "${{ steps.stack.outputs.extra-include-dirs }}" ]] 102 | # [[ -n "${{ steps.stack.outputs.extra-library-dirs }}" ]] 103 | 104 | [[ -n "${{ steps.stack.outputs.snapshot-pkg-db }}" ]] 105 | [[ -n "${{ steps.stack.outputs.local-pkg-db }}" ]] 106 | [[ -n "${{ steps.stack.outputs.global-pkg-db }}" ]] 107 | [[ -n "${{ steps.stack.outputs.ghc-package-path }}" ]] 108 | [[ -n "${{ steps.stack.outputs.snapshot-install-root }}" ]] 109 | [[ -n "${{ steps.stack.outputs.local-install-root }}" ]] 110 | [[ -n "${{ steps.stack.outputs.dist-dir }}" ]] 111 | [[ -n "${{ steps.stack.outputs.local-hpc-root }}" ]] 112 | 113 | test-generate: 114 | runs-on: ubuntu-latest 115 | steps: 116 | - uses: actions/checkout@v4 117 | - id: generate 118 | uses: ./generate-matrix 119 | with: 120 | working-directory: example 121 | outputs: 122 | stack-yamls: ${{ steps.generate.outputs.stack-yamls }} 123 | 124 | test-stack-yamls: 125 | needs: [dist, test-generate] 126 | runs-on: ubuntu-latest 127 | 128 | strategy: 129 | matrix: 130 | stack-yaml: ${{ fromJSON(needs.test-generate.outputs.stack-yamls) }} 131 | fail-fast: false 132 | 133 | steps: 134 | - uses: actions/checkout@v4 135 | - uses: actions/download-artifact@v4 136 | with: 137 | name: dist 138 | path: dist # overwrite dist/index.js 139 | 140 | - run: | 141 | if [[ -L '${{ matrix.stack-yaml }}' ]]; then 142 | echo "generate-matrix incorrectly included a symlink" >&2 143 | exit 1 144 | fi 145 | - uses: ./ 146 | with: 147 | working-directory: example 148 | stack-arguments: --stack-yaml ${{ matrix.stack-yaml }} 149 | 150 | test-fails-on-error: 151 | needs: dist 152 | runs-on: ubuntu-latest 153 | steps: 154 | - uses: actions/checkout@v4 155 | - uses: actions/download-artifact@v4 156 | with: 157 | name: dist 158 | path: dist # overwrite dist/index.js 159 | 160 | - name: Should fail 161 | id: stack-action-step 162 | continue-on-error: true 163 | uses: ./ 164 | with: 165 | working-directory: example 166 | stack-arguments: --resolver bad-resolver 167 | - name: Check failure 168 | if: steps.stack-action-step.outcome != 'failure' 169 | run: exit 1 170 | -------------------------------------------------------------------------------- /.github/workflows/mergeabot.yml: -------------------------------------------------------------------------------- 1 | name: Mergeabot 2 | 3 | on: 4 | pull_request: 5 | schedule: 6 | - cron: "0 0 * * *" 7 | 8 | permissions: 9 | contents: write 10 | pull-requests: write 11 | 12 | jobs: 13 | mergeabot: 14 | runs-on: ubuntu-latest 15 | steps: 16 | # Use an app token so further workflows (e.g. release) are triggered 17 | - id: token 18 | uses: actions/create-github-app-token@v2 19 | with: 20 | app-id: ${{ vars.FRECKLE_AUTOMATION_APP_ID }} 21 | private-key: ${{ secrets.FRECKLE_AUTOMATION_PRIVATE_KEY }} 22 | 23 | - uses: freckle/mergeabot-action@v2 24 | with: 25 | quarantine-days: -1 26 | github-token: ${{ steps.token.outputs.token }} 27 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | name: Release 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | - rc/* 8 | workflow_dispatch: 9 | 10 | jobs: 11 | release: 12 | runs-on: ubuntu-latest 13 | steps: 14 | - id: token 15 | uses: actions/create-github-app-token@v2 16 | with: 17 | app-id: ${{ vars.FRECKLE_AUTOMATION_APP_ID }} 18 | private-key: ${{ secrets.FRECKLE_AUTOMATION_PRIVATE_KEY }} 19 | 20 | - uses: actions/checkout@v4 21 | with: 22 | token: ${{ steps.token.outputs.token }} 23 | 24 | - id: release 25 | uses: cycjimmy/semantic-release-action@v4 26 | with: 27 | extra_plugins: | 28 | @semantic-release/exec 29 | semantic-release-major-tag 30 | env: 31 | FORCE_COLOR: 1 32 | GITHUB_TOKEN: ${{ steps.token.outputs.token }} 33 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | lib 3 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | v20 2 | -------------------------------------------------------------------------------- /.releaserc.yaml: -------------------------------------------------------------------------------- 1 | plugins: 2 | - "@semantic-release/commit-analyzer" 3 | - "@semantic-release/release-notes-generator" 4 | - - "@semantic-release/github" 5 | - successCommentCondition: false 6 | 7 | - "semantic-release-major-tag" 8 | 9 | # Update dist, in case Dependabot PRs merged without doing so 10 | - - "@semantic-release/exec" 11 | - prepareCmd: "yarn install && yarn run build" 12 | 13 | - - "@semantic-release/git" 14 | - assets: "dist/index.js" 15 | message: "chore(release): build dist" 16 | 17 | branches: 18 | - main 19 | - name: rc/* 20 | prerelease: '${name.replace(/^rc\//, "rc-")}' 21 | -------------------------------------------------------------------------------- /.restyled.yaml: -------------------------------------------------------------------------------- 1 | restylers: 2 | - clang-format: 3 | enabled: false 4 | - jq: 5 | enabled: false # prefer prettier-json 6 | - prettier: 7 | include: 8 | - "src/**/*.ts" 9 | - whitespace: 10 | include: 11 | - "**/*" 12 | - "!dist/index.js" 13 | - "*" 14 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright (c) 2021 Renaissance Learning Inc 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Stack Action 2 | 3 | GitHub Action to build and test a stack-based Haskell project. 4 | 5 | ## Usage 6 | 7 | ```yaml 8 | jobs: 9 | test: 10 | runs-on: ubuntu-latest 11 | steps: 12 | - uses: actions/checkout@v4 13 | - uses: freckle/stack-action@v5 14 | ``` 15 | 16 | ## Notable Changes in v5 17 | 18 | As of version 5, the single `stack-arguments` input has been broken up into 19 | various, distinct `stack-[*-]arguments[-*]` inputs that are used in more 20 | specific ways. See the _Inputs_ section, or `action.yml` for documentation of 21 | the new options. 22 | 23 | The `fast` and `pedantic` inputs were removed. Use a ternary operator (see 24 | [Operators](https://docs.github.com/en/actions/learn-github-actions/expressions#operators)) 25 | to pass a flag conditionally. Example: 26 | 27 | ```yaml 28 | stack-build-arguments: ${{ github.ref_name != 'main' && '--fast' || '' }} --pedantic 29 | ``` 30 | 31 | ## Notable Changes in v4 32 | 33 | As of version 4, this action automatically handles caching. You do not need to 34 | use a separate `stack-cache-action` step any more. 35 | 36 | ## Notable Changes in v3 37 | 38 | Previous versions of this Action ran HLint and Weeder for you. We recommend 39 | doing that as separate actions now, so, as of `v3`, those options have been 40 | removed. 41 | 42 | Here is an example of running separate Actions: 43 | 44 | ```yaml 45 | jobs: 46 | test: 47 | # ... 48 | steps: 49 | - uses: actions/checkout@v4 50 | - id: stack 51 | uses: freckle/stack-action@v5 52 | 53 | # Weeder requires running in the same Job (to access .hie artifacts) 54 | - uses: freckle/weeder-action@v2 55 | with: 56 | ghc-version: ${{ steps.stack.outputs.compiler-version }} 57 | 58 | # HLint can be a distinct Job, possibly limited to changed files 59 | hlint: 60 | # ... 61 | steps: 62 | - uses: actions/checkout@v4 63 | - uses: haskell-actions/hlint-setup@v1 64 | - uses: haskell-actions/hlint-run@v2 65 | ``` 66 | 67 | 68 | 69 | ## Inputs 70 | 71 | | name | description | required | default | 72 | | ------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | ------------------- | 73 | | `working-directory` |

Working directory for run commands

| `false` | `""` | 74 | | `test` |

Whether to run tests

| `false` | `true` | 75 | | `color` |

Whether to force --color=always

| `false` | `true` | 76 | | `stack-arguments` |

Additional arguments for all top-level stack command invocations.

| `false` | `""` | 77 | | `stack-query-arguments` |

Additional arguments in stack query invocations.

| `false` | `""` | 78 | | `stack-path-arguments` |

Additional arguments in stack path invocations.

| `false` | `""` | 79 | | `stack-setup-arguments` |

Additional arguments in stack setup invocations.

| `false` | `""` | 80 | | `stack-build-arguments` |

Additional arguments for all stack build invocations.

| `false` | `--fast --pedantic` | 81 | | `stack-build-arguments-dependencies` |

Additional arguments passed after stack-build-arguments in stack build invocations on the Dependencies step.

| `false` | `""` | 82 | | `stack-build-arguments-build` |

Additional arguments passed after stack-build-arguments in stack build invocations on the Build step.

| `false` | `""` | 83 | | `stack-build-arguments-test` |

Additional arguments passed after stack-build-arguments in stack build invocations on the Test step.

| `false` | `""` | 84 | | `cache-prefix` |

Prefix applied to all cache keys. This can be any value you like, but teams often use v{N} and bump it to v{N+1} when/if they need to explicitly bust caches.

| `false` | `""` | 85 | | `cache-save-always` |

Save artifacts to the cache even if the build fails. This may speed up builds in subsequent runs at the expense of slightly-longer builds when a full cache-hit occurs. Since @v4.2.0.

| `false` | `false` | 86 | | `on-dirty-files` |

What to do if we find changes to the cabal or lock file after a build. Value can be warn, or error. Default is warn.

| `false` | `warn` | 87 | | `install-stack` |

Install stack, if necessary

| `false` | `true` | 88 | | `upgrade-stack` |

Upgrade stack

| `false` | `true` | 89 | | `compiler-tools` |

A list of packages to install as compiler tools, one per line. This is useful to do here rather than separate run commands so that their installation is incorporated in the dependency cache. Since @v5.2.0.

| `false` | `""` | 90 | | `stack-yaml` |

Deprecated use env.STACK_YAML or stack-arguments instead.

| `false` | `""` | 91 | 92 | 93 | 94 | ## Outputs 95 | 96 | | name | description | 97 | | ----------------------- | ---------------------------------------------------------------------------- | 98 | | `compiler` |

compiler.actual value from stack query

| 99 | | `compiler-version` |

The GHC version part of compiler

| 100 | | `snapshot-doc-root` |

snapshot-doc-root value from stack path

| 101 | | `local-doc-root` |

local-doc-root value from stack path

| 102 | | `local-hoogle-root` |

local-hoogle-root value from stack path

| 103 | | `stack-root` |

stack-root value from stack path

| 104 | | `project-root` |

project-root value from stack path

| 105 | | `config-location` |

config-location value from stack path

| 106 | | `bin-path` |

bin-path value from stack path

| 107 | | `programs` |

programs value from stack path

| 108 | | `compiler-exe` |

compiler-exe value from stack path

| 109 | | `compiler-bin` |

compiler-bin value from stack path

| 110 | | `compiler-tools-bin` |

compiler-tools-bin value from stack path

| 111 | | `local-bin` |

local-bin value from stack path

| 112 | | `extra-include-dirs` |

extra-include-dirs value from stack path

| 113 | | `extra-library-dirs` |

extra-library-dirs value from stack path

| 114 | | `snapshot-pkg-db` |

snapshot-pkg-db value from stack path

| 115 | | `local-pkg-db` |

local-pkg-db value from stack path

| 116 | | `global-pkg-db` |

global-pkg-db value from stack path

| 117 | | `ghc-package-path` |

ghc-package-path value from stack path

| 118 | | `snapshot-install-root` |

snapshot-install-root value from stack path

| 119 | | `local-install-root` |

local-install-root value from stack path

| 120 | | `dist-dir` |

dist-dir value from stack path

| 121 | | `local-hpc-root` |

local-hpc-root value from stack path

| 122 | 123 | ## Installing Compiler Tools 124 | 125 | The `compiler-tools` input can be used to install packages (with 126 | `--copy-compiler-tool`) as part of the _Dependencies_ step. The installed tools 127 | can be used by other parts of the build via `stack exec`, such as to reformat 128 | and upload coverage: 129 | 130 | ```yaml 131 | - id: stack 132 | uses: freckle/stack-action@v5 133 | with: 134 | compiler-tools: hpc-lcov 135 | stack-build-arguments: --coverage 136 | 137 | - run: stack --no-terminal exec -- hpc-lcov --file "$HPC_ROOT"/combined/all/all.tix 138 | env: 139 | HPC_ROOT: ${{ steps.stack.outputs.local-hpc-root }} 140 | 141 | - uses: codecov/codecov-action@v2 142 | with: 143 | files: ./lcov.info 144 | ``` 145 | 146 | Doing it this way, vs a separate `run: stack install...`, means the building of 147 | these tools will be included in the dependencies cache. 148 | 149 | ## Generating a Build Matrix of `stack.yaml`s 150 | 151 | The following automatically discovers all files matching `stack*.yaml` and runs 152 | this action with each of them: 153 | 154 | ```yaml 155 | jobs: 156 | generate: 157 | runs-on: ubuntu-latest 158 | steps: 159 | - uses: actions/checkout@v4 160 | - id: generate 161 | uses: freckle/stack-action/generate-matrix@v5 162 | outputs: 163 | stack-yamls: ${{ steps.generate.outputs.stack-yamls }} 164 | 165 | test: 166 | needs: generate 167 | strategy: 168 | matrix: 169 | stack-yaml: ${{ fromJSON(needs.generate.outputs.stack-yamls) }} 170 | fail-fast: false 171 | 172 | runs-on: ubuntu-latest 173 | steps: 174 | - uses: actions/checkout@v4 175 | - uses: freckle/stack-action@v5 176 | with: 177 | stack-arguments: --stack-yaml ${{ matrix.stack-yaml }} 178 | ``` 179 | 180 | See [generate-matrix/action.yml](./generate-matrix/action.yml) for more details. 181 | This has been available since version 4 of this action. 182 | 183 | ## Release 184 | 185 | To trigger a release (and update the `@v{major}` tag), merge a commit to `main` 186 | that follows [Conventional Commits][]. In short, 187 | 188 | - `fix:` to trigger a patch release, 189 | - `feat:` for minor, and 190 | - `feat!:` and major 191 | 192 | We don't enforce conventional commits generally (though you are free do so), 193 | it's only required if you want to trigger release. 194 | 195 | [conventional commits]: https://www.conventionalcommits.org/en/v1.0.0/#summary 196 | 197 | --- 198 | 199 | [LICENSE](./LICENSE) 200 | -------------------------------------------------------------------------------- /action.yml: -------------------------------------------------------------------------------- 1 | name: Stack 2 | description: Build and test a stack-based Haskell project 3 | inputs: 4 | working-directory: 5 | description: | 6 | Working directory for run commands 7 | test: 8 | description: | 9 | Whether to run tests 10 | default: true 11 | color: 12 | description: | 13 | Whether to force `--color=always` 14 | default: true 15 | stack-arguments: 16 | description: | 17 | Additional arguments for all top-level `stack` command invocations. 18 | default: "" 19 | stack-query-arguments: 20 | description: | 21 | Additional arguments in `stack query` invocations. 22 | stack-path-arguments: 23 | description: | 24 | Additional arguments in ``stack path`` invocations. 25 | stack-setup-arguments: 26 | description: | 27 | Additional arguments in `stack setup` invocations. 28 | stack-build-arguments: 29 | description: | 30 | Additional arguments for all `stack build` invocations. 31 | default: "--fast --pedantic" 32 | stack-build-arguments-dependencies: 33 | description: | 34 | Additional arguments passed after `stack-build-arguments` in `stack build` 35 | invocations on the _Dependencies_ step. 36 | stack-build-arguments-build: 37 | description: | 38 | Additional arguments passed after `stack-build-arguments` in `stack build` 39 | invocations on the _Build_ step. 40 | stack-build-arguments-test: 41 | description: | 42 | Additional arguments passed after `stack-build-arguments` in `stack build` 43 | invocations on the _Test_ step. 44 | cache-prefix: 45 | description: | 46 | Prefix applied to all cache keys. This can be any value you like, but 47 | teams often use `v{N}` and bump it to `v{N+1}` when/if they need to 48 | explicitly bust caches. 49 | cache-save-always: 50 | description: | 51 | Save artifacts to the cache even if the build fails. This may speed up 52 | builds in subsequent runs at the expense of slightly-longer builds when a 53 | full cache-hit occurs. Since `@v4.2.0`. 54 | default: false 55 | on-dirty-files: 56 | description: | 57 | What to do if we find changes to the cabal or lock file after a build. 58 | Value can be `warn`, or `error`. Default is `warn`. 59 | default: warn 60 | install-stack: 61 | description: | 62 | Install stack, if necessary 63 | default: true 64 | upgrade-stack: 65 | description: | 66 | Upgrade stack 67 | default: true 68 | compiler-tools: 69 | description: | 70 | A list of packages to install as compiler tools, one per line. This is 71 | useful to do here rather than separate `run` commands so that their 72 | installation is incorporated in the dependency cache. Since `@v5.2.0`. 73 | stack-yaml: 74 | description: | 75 | **Deprecated** use `env.STACK_YAML` or `stack-arguments` instead. 76 | runs: 77 | using: "node20" 78 | main: "dist/index.js" 79 | -------------------------------------------------------------------------------- /example/.gitignore: -------------------------------------------------------------------------------- 1 | .stack-work 2 | -------------------------------------------------------------------------------- /example/example.cabal: -------------------------------------------------------------------------------- 1 | cabal-version: 1.12 2 | 3 | -- This file has been generated from package.yaml by hpack version 0.37.0. 4 | -- 5 | -- see: https://github.com/sol/hpack 6 | 7 | name: example 8 | version: 0.0.0.0 9 | build-type: Simple 10 | 11 | library 12 | exposed-modules: 13 | Foo 14 | other-modules: 15 | Paths_example 16 | hs-source-dirs: 17 | src 18 | build-depends: 19 | base 20 | default-language: Haskell2010 21 | -------------------------------------------------------------------------------- /example/hie.yaml: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/freckle/stack-action/29f75f8eea896f2259d9a98c350203ed8aad4938/example/hie.yaml -------------------------------------------------------------------------------- /example/package.yaml: -------------------------------------------------------------------------------- 1 | name: example 2 | version: 0.0.0.0 3 | library: 4 | source-dirs: src 5 | dependencies: 6 | - base 7 | -------------------------------------------------------------------------------- /example/src/Foo.hs: -------------------------------------------------------------------------------- 1 | module Foo where 2 | 3 | data Foo = Foo 4 | -------------------------------------------------------------------------------- /example/stack-link.yaml: -------------------------------------------------------------------------------- 1 | ./stack.yaml -------------------------------------------------------------------------------- /example/stack-nightly.yaml: -------------------------------------------------------------------------------- 1 | resolver: nightly-2022-03-30 2 | -------------------------------------------------------------------------------- /example/stack-nightly.yaml.lock: -------------------------------------------------------------------------------- 1 | # This file was autogenerated by Stack. 2 | # You should not edit this file by hand. 3 | # For more information, please see the documentation at: 4 | # https://docs.haskellstack.org/en/stable/lock_files 5 | 6 | packages: [] 7 | snapshots: 8 | - completed: 9 | size: 539378 10 | url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/nightly/2022/3/30.yaml 11 | sha256: 745431a4c5b78cc93d81e99b2253a1e0eacd4f94e00cf17dab7cc14e665332e3 12 | original: nightly-2022-03-30 13 | -------------------------------------------------------------------------------- /example/stack.yaml: -------------------------------------------------------------------------------- 1 | resolver: lts-18.3 2 | -------------------------------------------------------------------------------- /example/stack.yaml.lock: -------------------------------------------------------------------------------- 1 | # This file was autogenerated by Stack. 2 | # You should not edit this file by hand. 3 | # For more information, please see the documentation at: 4 | # https://docs.haskellstack.org/en/stable/lock_files 5 | 6 | packages: [] 7 | snapshots: 8 | - completed: 9 | size: 585603 10 | url: https://raw.githubusercontent.com/commercialhaskell/stackage-snapshots/master/lts/18/3.yaml 11 | sha256: 694573e96dca34db5636edb1fe6c96bb233ca0f9fb96c1ead1671cdfa9bd73e9 12 | original: lts-18.3 13 | -------------------------------------------------------------------------------- /generate-matrix/action.yml: -------------------------------------------------------------------------------- 1 | name: Generate Matrix 2 | description: Sub-action to generate a matrix of stack-yamls 3 | inputs: 4 | working-directory: 5 | description: "Working directory for run commands" 6 | required: true 7 | default: . 8 | find-options: 9 | description: "Arguments to find(1) stack-yaml files" 10 | required: true 11 | default: "-type f -maxdepth 1 -name 'stack*.yaml'" 12 | outputs: 13 | stack-yamls: 14 | description: Version-sorted list of all files matching stack*.yaml 15 | value: ${{ steps.generate.outputs.stack-yamls }} 16 | runs: 17 | using: composite 18 | steps: 19 | - id: generate 20 | name: Generate 21 | shell: bash 22 | working-directory: ${{ inputs.working-directory }} 23 | run: | 24 | { 25 | echo 'stack-yamls<>"$GITHUB_OUTPUT" 29 | -------------------------------------------------------------------------------- /jest.config.ts: -------------------------------------------------------------------------------- 1 | import { createDefaultPreset, type JestConfigWithTsJest } from "ts-jest"; 2 | 3 | const presetConfig = createDefaultPreset({ 4 | isolatedModules: true, 5 | }); 6 | 7 | const jestConfig: JestConfigWithTsJest = { 8 | ...presetConfig, 9 | resetMocks: true, 10 | testEnvironment: "node", 11 | }; 12 | 13 | export default jestConfig; 14 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "stack-action", 3 | "version": "0.0.0", 4 | "description": "Build and test stack-based Haskell projects", 5 | "main": "lib/main.js", 6 | "scripts": { 7 | "build": "tsc && ncc build lib/main.js && sed -i 's/\\x0D$//' ./dist/index.js", 8 | "format": "prettier --write \"**/*.ts\"", 9 | "format-check": "prettier --check \"**/*.ts\"", 10 | "test": "jest", 11 | "readme": "npx action-docs -u && prettier --write README.md" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "git+https://github.com/freckle/stack-action.git" 16 | }, 17 | "author": "Freckle", 18 | "license": "MIT", 19 | "dependencies": { 20 | "@actions/cache": "^4.0.3", 21 | "@actions/core": "^1.11.1", 22 | "@actions/exec": "^1.1.0", 23 | "@actions/glob": "^0.5.0", 24 | "js-yaml": "^4.1.0", 25 | "shellwords-ts": "^3.0.1" 26 | }, 27 | "devDependencies": { 28 | "@types/jest": "^29.5.14", 29 | "@types/js-yaml": "^4.0.5", 30 | "@types/node": "^22.14.1", 31 | "@vercel/ncc": "^0.38.3", 32 | "action-docs": "^2.5.1", 33 | "jest": "^29.7.0", 34 | "prettier": "^3.5.3", 35 | "ts-jest": "^29.3.2", 36 | "ts-node": "^10.9.2", 37 | "typescript": "^5.8.3" 38 | } 39 | } 40 | -------------------------------------------------------------------------------- /renovate.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": [ 4 | "local>freckle/renovate-config" 5 | ], 6 | "minimumReleaseAge": "0 days" 7 | } 8 | -------------------------------------------------------------------------------- /src/dirty-files.test.ts: -------------------------------------------------------------------------------- 1 | import { parseGitStatus, isInterestingFile } from "./dirty-files"; 2 | 3 | describe("parseGitStatus", () => { 4 | test("parse file name, and filters untracked", () => { 5 | const paths = parseGitStatus( 6 | [ 7 | "A staged-file.rb", 8 | " M action.yml", 9 | " M src/inputs.ts", 10 | "?? src/new-file.ts", 11 | " M src/path with spaces.md", 12 | ].join("\n"), 13 | ); 14 | 15 | expect(paths).toEqual([ 16 | "staged-file.rb", 17 | "action.yml", 18 | "src/inputs.ts", 19 | "src/path with spaces.md", 20 | ]); 21 | }); 22 | 23 | const empties = [ 24 | ["empty", ""], 25 | ["newline", "\n"], 26 | ["spaces", " "], 27 | ["spaces+newline", " \n"], 28 | ]; 29 | 30 | test.each(empties)("handles %s as no paths", (_arg, str) => { 31 | expect(parseGitStatus(str)).toEqual([]); 32 | }); 33 | }); 34 | 35 | describe("isInterestingFile", () => { 36 | const interesting = [ 37 | "foo.cabal", 38 | "bar.cabal", 39 | "stack.yaml.lock", 40 | "stack-lts20.yaml.lock", 41 | "hie.yaml", 42 | "example/hie.yaml", 43 | ]; 44 | 45 | test.each(interesting)("considers %p interesting", (path) => { 46 | expect(isInterestingFile(path)).toBe(true); 47 | }); 48 | 49 | const uninteresting = [ 50 | "some-file.md", 51 | "other file.txt", 52 | "foo.cabal.lock", 53 | "foo.yaml.lock2", 54 | "routhie.yaml", 55 | ]; 56 | 57 | test.each(uninteresting)("considers %p uninteresting", (path) => { 58 | expect(isInterestingFile(path)).toBe(false); 59 | }); 60 | }); 61 | -------------------------------------------------------------------------------- /src/dirty-files.ts: -------------------------------------------------------------------------------- 1 | import * as core from "@actions/core"; 2 | import * as exec from "@actions/exec"; 3 | 4 | export type OnDirtyFiles = "warn" | "error"; 5 | 6 | export function parseOnDirtyFiles(input: string): OnDirtyFiles { 7 | switch (input) { 8 | case "warn": 9 | case "error": 10 | return input as OnDirtyFiles; 11 | default: 12 | throw new Error( 13 | `Invalid on-dirty-files, must be warn or error, saw: ${input}`, 14 | ); 15 | } 16 | } 17 | 18 | export async function checkDirtyFiles(onDirtyFiles: OnDirtyFiles) { 19 | const stdout = await readGitStatus(); 20 | const paths = parseGitStatus(stdout).filter(isInterestingFile); 21 | 22 | if (paths.length === 0) { 23 | return; 24 | } 25 | 26 | const message = `Build caused changes to ${paths.join(", ")}`; 27 | 28 | switch (onDirtyFiles) { 29 | case "warn": 30 | core.warning(message); 31 | break; 32 | case "error": 33 | throw new Error(message); 34 | } 35 | } 36 | 37 | async function readGitStatus(): Promise { 38 | let stdout = ""; 39 | 40 | const options: exec.ExecOptions = { 41 | listeners: { 42 | stdout: (data: Buffer) => { 43 | stdout += data.toString(); 44 | }, 45 | }, 46 | ignoreReturnCode: true, 47 | }; 48 | 49 | await exec.exec("git", ["status", "--porcelain"], options); 50 | 51 | return stdout; 52 | } 53 | 54 | // Exported for testing 55 | export function parseGitStatus(stdout: string): string[] { 56 | return stdout 57 | .split("\n") 58 | .filter((path) => { 59 | // We don't care about untracked files because users may be choosing not 60 | // to commit generated files -- in which case it showing up here is 61 | // expected. 62 | return !path.startsWith("??"); 63 | }) 64 | .map((path) => { 65 | // Drop leading space, split on space, drop first column and rejoin 66 | return path.replace(/^\s*/, "").split(/\s+/).slice(1).join(" "); 67 | }) 68 | .filter((path) => { 69 | return path.trim() !== ""; 70 | }); 71 | } 72 | 73 | const INTERESTING_REGEXPS: RegExp[] = [ 74 | /^.*\.cabal$/, 75 | /^.*\.yaml\.lock$/, 76 | /^(.*\/)?hie\.yaml$/, 77 | ]; 78 | 79 | // Exported for testing 80 | export function isInterestingFile(path: string): boolean { 81 | return INTERESTING_REGEXPS.some((re, _index, _array) => { 82 | return path.match(re); 83 | }); 84 | } 85 | -------------------------------------------------------------------------------- /src/envsubst.test.ts: -------------------------------------------------------------------------------- 1 | import { envsubst } from "./envsubst"; 2 | 3 | const HOME = process.env.HOME; 4 | 5 | describe("envsubst", () => { 6 | test("known variables are replaced", () => { 7 | expect(envsubst("Home is $HOME.")).toEqual(`Home is ${HOME}.`); 8 | }); 9 | 10 | test("known variables with braces are replaced", () => { 11 | expect(envsubst("Home is ${HOME}.")).toEqual(`Home is ${HOME}.`); 12 | }); 13 | 14 | test("unknown variables are replaced by whitespace", () => { 15 | expect(envsubst("Home is $XNOPE.")).toEqual("Home is ."); 16 | }); 17 | 18 | test("unknown variables with braces are replaced by whitespace", () => { 19 | expect(envsubst("Home is ${XNOPE}.")).toEqual("Home is ."); 20 | }); 21 | 22 | test("invalid braces are not replaced", () => { 23 | expect(envsubst("Home is ${ HOME}.")).toEqual("Home is ${ HOME}."); 24 | expect(envsubst("Home is ${HOME }.")).toEqual("Home is ${HOME }."); 25 | }); 26 | 27 | test("mismatched left brace is not replaced", () => { 28 | expect(envsubst("Home is ${HOME.")).toEqual("Home is ${HOME."); 29 | }); 30 | 31 | test("mismatched right brace is replaced before the brace", () => { 32 | expect(envsubst("Home is $HOME}.")).toEqual(`Home is ${HOME}}.`); 33 | }); 34 | }); 35 | -------------------------------------------------------------------------------- /src/envsubst.ts: -------------------------------------------------------------------------------- 1 | const REGEXP = new RegExp("\\$([A-Z_]+)|\\$\\{([A-Z_]+)\\}"); 2 | 3 | function replacer(_match: string, p1: string, p2: string): string { 4 | return process.env[p2 ?? p1] ?? ""; 5 | } 6 | 7 | /* replace environment variables in an input string, like envsubst(1) */ 8 | export function envsubst(str: string): string { 9 | return str.replace(REGEXP, replacer); 10 | } 11 | -------------------------------------------------------------------------------- /src/get-cache-keys.test.ts: -------------------------------------------------------------------------------- 1 | import { getCacheKeys } from "./get-cache-keys"; 2 | 3 | test("getCacheKeys", () => { 4 | const keys = getCacheKeys(["prefix-os-compiler", "package", "source"]); 5 | 6 | expect(keys.primaryKey).toEqual("prefix-os-compiler-package-source"); 7 | expect(keys.restoreKeys).toEqual([ 8 | "prefix-os-compiler-package-", 9 | "prefix-os-compiler-", 10 | ]); 11 | }); 12 | -------------------------------------------------------------------------------- /src/get-cache-keys.ts: -------------------------------------------------------------------------------- 1 | export type CacheKeys = { 2 | primaryKey: string; 3 | restoreKeys: string[]; 4 | }; 5 | 6 | export function getCacheKeys(parts: string[]): CacheKeys { 7 | const primaryKey = parts.join("-"); 8 | const restoreKeys: string[] = []; 9 | 10 | let restoreParts = parts.slice(0, -1); 11 | 12 | while (restoreParts.length > 0) { 13 | restoreKeys.push(`${restoreParts.join("-")}-`); 14 | restoreParts = restoreParts.slice(0, -1); 15 | } 16 | 17 | return { primaryKey, restoreKeys }; 18 | } 19 | -------------------------------------------------------------------------------- /src/hash-project.ts: -------------------------------------------------------------------------------- 1 | import * as path from "path"; 2 | import { hashFiles } from "@actions/glob"; 3 | 4 | export const ALL_SOURCES_PATTERNS = `**\n!**${path.sep}.stack-work\n!.git\n`; 5 | export const BUILD_FILES_PATTERNS = `**${path.sep}package.yaml\n**${path.sep}*.cabal\n`; 6 | 7 | export type Hashes = { 8 | snapshot: string; 9 | package: string; 10 | sources: string; 11 | }; 12 | 13 | export async function hashProject(stackYaml: string): Promise { 14 | return { 15 | snapshot: await hashFiles(stackYaml), 16 | package: await hashFiles(BUILD_FILES_PATTERNS), 17 | sources: await hashFiles(ALL_SOURCES_PATTERNS), 18 | }; 19 | } 20 | -------------------------------------------------------------------------------- /src/hie.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs"; 2 | import * as core from "@actions/core"; 3 | 4 | import { StackCLI } from "./stack-cli"; 5 | 6 | export const HIE_YAML: string = "hie.yaml"; 7 | 8 | export class GenHIE { 9 | public readonly path: string; 10 | 11 | private readonly stack: StackCLI; 12 | private readonly exists: boolean; 13 | 14 | constructor(stack: StackCLI, path?: string) { 15 | this.stack = stack; 16 | this.path = path ? path : HIE_YAML; 17 | this.exists = fs.existsSync(this.path); 18 | } 19 | 20 | async install(): Promise { 21 | if (this.exists) { 22 | try { 23 | await this.stack.installCompilerTools(["implicit-hie"]); 24 | } catch { 25 | core.warning( 26 | `Failed to install implicit-hie, ${this.path} will not be maintained`, 27 | ); 28 | } 29 | } 30 | } 31 | 32 | async generate(): Promise { 33 | if (!this.exists) { 34 | core.info(`Skipping, ${this.path} does not exist`); 35 | return; 36 | } 37 | 38 | const installed = await this.stack.which("gen-hie"); 39 | 40 | if (!installed) { 41 | core.info(`Skipping, implicit-hie was not successfully installed`); 42 | return; 43 | } 44 | 45 | core.info(`gen-hie --stack > ${this.path}`); 46 | const yaml = await this.stack.read(["exec", "--", "gen-hie", "--stack"]); 47 | fs.writeFileSync(this.path, yaml); 48 | } 49 | } 50 | -------------------------------------------------------------------------------- /src/inputs.ts: -------------------------------------------------------------------------------- 1 | import * as core from "@actions/core"; 2 | import * as Shellwords from "shellwords-ts"; 3 | import { envsubst } from "./envsubst"; 4 | import { type OnDirtyFiles, parseOnDirtyFiles } from "./dirty-files"; 5 | 6 | export type Inputs = { 7 | workingDirectory: string | null; 8 | test: boolean; 9 | color: boolean; 10 | stackArguments: string[]; 11 | stackSetupArguments: string[]; 12 | stackQueryArguments: string[]; 13 | stackBuildArgumentsDependencies: string[]; 14 | stackBuildArgumentsBuild: string[]; 15 | stackBuildArgumentsTest: string[]; 16 | cachePrefix: string; 17 | cacheSaveAlways: boolean; 18 | onDirtyFiles: OnDirtyFiles; 19 | installStack: boolean; 20 | upgradeStack: boolean; 21 | compilerTools: string[]; 22 | 23 | // Deprecated 24 | stackYaml: string | null; 25 | }; 26 | 27 | export function getInputs(): Inputs { 28 | const getBuildArguments = (step: string): string[] => { 29 | return getShellWordsInput("stack-build-arguments").concat( 30 | getShellWordsInput(`stack-build-arguments-${step}`), 31 | ); 32 | }; 33 | 34 | const rawOnDirtyFiles = core.getInput("on-dirty-files", { required: true }); 35 | 36 | return { 37 | workingDirectory: getInputDefault("working-directory", null), 38 | test: core.getBooleanInput("test"), 39 | color: core.getBooleanInput("color"), 40 | stackArguments: getShellWordsInput("stack-arguments"), 41 | stackSetupArguments: getShellWordsInput("stack-setup-arguments"), 42 | stackQueryArguments: getShellWordsInput("stack-query-arguments"), 43 | stackBuildArgumentsDependencies: getBuildArguments("dependencies"), 44 | stackBuildArgumentsBuild: getBuildArguments("build"), 45 | stackBuildArgumentsTest: getBuildArguments("test"), 46 | cachePrefix: core.getInput("cache-prefix"), 47 | cacheSaveAlways: core.getBooleanInput("cache-save-always"), 48 | onDirtyFiles: parseOnDirtyFiles(rawOnDirtyFiles), 49 | installStack: core.getBooleanInput("install-stack"), 50 | upgradeStack: core.getBooleanInput("upgrade-stack"), 51 | compilerTools: core.getMultilineInput("compiler-tools"), 52 | stackYaml: getInputDefault("stack-yaml", null), 53 | }; 54 | } 55 | 56 | function getInputDefault(name: string, d: T): string | T { 57 | const raw = core.getInput(name, { trimWhitespace: true }); 58 | return raw === "" ? d : raw; 59 | } 60 | 61 | function getShellWordsInput( 62 | name: string, 63 | options?: core.InputOptions, 64 | ): string[] { 65 | const raw = core.getMultilineInput(name, options).join(" "); 66 | return Shellwords.split(raw).map(envsubst); 67 | } 68 | -------------------------------------------------------------------------------- /src/main.ts: -------------------------------------------------------------------------------- 1 | import * as core from "@actions/core"; 2 | 3 | import { checkDirtyFiles } from "./dirty-files"; 4 | import { StackCLI } from "./stack-cli"; 5 | import { getCacheKeys } from "./get-cache-keys"; 6 | import { hashProject } from "./hash-project"; 7 | import { getInputs } from "./inputs"; 8 | import { readStackYamlSync, getStackDirectories } from "./stack-yaml"; 9 | import { DEFAULT_CACHE_OPTIONS, withCache } from "./with-cache"; 10 | import { GenHIE } from "./hie"; 11 | 12 | async function run() { 13 | try { 14 | const inputs = getInputs(); 15 | 16 | if (inputs.color) { 17 | inputs.stackArguments.unshift("--color=always"); 18 | } 19 | 20 | if (inputs.workingDirectory) { 21 | core.debug(`Change directory: ${inputs.workingDirectory}`); 22 | process.chdir(inputs.workingDirectory); 23 | } 24 | 25 | if (inputs.stackYaml) { 26 | core.warning( 27 | "inputs.stack-yaml is deprecated. Set env.STACK_YAML or use inputs.stack-arguments instead.", 28 | ); 29 | 30 | // Maintain original behavior for now 31 | inputs.stackArguments.unshift(inputs.stackYaml); 32 | inputs.stackArguments.unshift("--stack-yaml"); 33 | } 34 | 35 | const stack = new StackCLI(inputs.stackArguments, core.isDebug()); 36 | const genHIE = new GenHIE(stack); 37 | 38 | await core.group("Install/upgrade stack", async () => { 39 | const installed = await stack.installed(); 40 | 41 | if (installed) { 42 | if (inputs.upgradeStack) { 43 | core.info("Upgrading stack"); 44 | await stack.upgrade(); 45 | } 46 | } else { 47 | if (inputs.installStack) { 48 | core.info("Installing stack"); 49 | await stack.install(); 50 | } else { 51 | throw new Error( 52 | [ 53 | "The executable stack is not present on $PATH", 54 | "Make sure it is installed in a preceding step, or use", 55 | "`install-stack: true` to have it installed for you.", 56 | ].join("\n"), 57 | ); 58 | } 59 | } 60 | }); 61 | 62 | const hashes = await core.group("Calculate hashes", async () => { 63 | const hashes = await hashProject(stack.config); 64 | core.info(`Snapshot: ${hashes.snapshot}`); 65 | core.info(`Packages: ${hashes.package}`); 66 | core.info(`Sources: ${hashes.sources}`); 67 | return hashes; 68 | }); 69 | 70 | const { stackYaml, stackDirectories } = await core.group( 71 | "Determine stack directories", 72 | async () => { 73 | const stackYaml = readStackYamlSync(stack.config); 74 | const stackDirectories = await getStackDirectories(stackYaml, stack); 75 | 76 | core.info( 77 | [ 78 | `Stack root: ${stackDirectories.stackRoot}`, 79 | `Stack programs: ${stackDirectories.stackPrograms}`, 80 | `Stack works:\n - ${stackDirectories.stackWorks.join("\n - ")}`, 81 | ].join("\n"), 82 | ); 83 | 84 | return { stackYaml, stackDirectories }; 85 | }, 86 | ); 87 | 88 | // Can't use compiler here because stack-query requires setting up the Stack 89 | // environment, installing GHC, etc. And we never want to do that outside of 90 | // caching. Use the resolver itself instead. This will use either --resolver 91 | // from stack-arguments, if given, or fall back to reading resolver from the 92 | // stack.yaml file in use. 93 | const cachePrefix = `${inputs.cachePrefix}${process.platform}/${ 94 | stack.resolver ?? stackYaml.resolver 95 | }`; 96 | 97 | await core.group("Setup and install dependencies", async () => { 98 | const { stackRoot, stackPrograms, stackWorks } = stackDirectories; 99 | 100 | await withCache( 101 | [stackRoot, stackPrograms].concat(stackWorks), 102 | getCacheKeys([`${cachePrefix}/deps`, hashes.snapshot, hashes.package]), 103 | async () => { 104 | await stack.setup(inputs.stackSetupArguments); 105 | await stack.buildDependencies(inputs.stackBuildArgumentsDependencies); 106 | await stack.installCompilerTools(inputs.compilerTools); 107 | await genHIE.install(); 108 | }, 109 | { 110 | ...DEFAULT_CACHE_OPTIONS, 111 | saveOnError: inputs.cacheSaveAlways, 112 | }, 113 | ); 114 | }); 115 | 116 | await core.group("Build", async () => { 117 | await withCache( 118 | stackDirectories.stackWorks, 119 | getCacheKeys([ 120 | `${cachePrefix}/build`, 121 | hashes.snapshot, 122 | hashes.package, 123 | hashes.sources, 124 | ]), 125 | async () => { 126 | await stack.buildNoTest(inputs.stackBuildArgumentsBuild); 127 | }, 128 | { 129 | ...DEFAULT_CACHE_OPTIONS, 130 | skipOnHit: false, // always Build 131 | saveOnError: inputs.cacheSaveAlways, 132 | }, 133 | ); 134 | }); 135 | 136 | await core.group(`Maintain ${genHIE.path}`, async () => { 137 | await genHIE.generate(); 138 | }); 139 | 140 | await core.group("Check for dirty files", async () => { 141 | await checkDirtyFiles(inputs.onDirtyFiles); 142 | }); 143 | 144 | if (inputs.test) { 145 | await core.group("Test", async () => { 146 | await stack.buildTest(inputs.stackBuildArgumentsTest); 147 | }); 148 | } 149 | 150 | await core.group("Set outputs", async () => { 151 | const stackQuery = await stack.query(); 152 | const compiler = stackQuery.compiler.actual; 153 | const compilerVersion = compiler.replace(/^ghc-/, ""); 154 | 155 | core.info("Setting query-compiler outputs"); 156 | core.setOutput("compiler", compiler); 157 | core.setOutput("compiler-version", compilerVersion); 158 | 159 | const stackPath = await stack.path(); 160 | 161 | core.info("Setting stack-path outputs"); 162 | for (const k in stackPath) { 163 | const v = stackPath[k]; 164 | core.debug(`Setting stack-path output: ${k}=${v}`); 165 | core.setOutput(k, v); 166 | } 167 | }); 168 | // https://github.com/actions/cache/blob/0c45773b623bea8c8e75f6c82b208c3cf94ea4f9/src/restoreImpl.ts#L99-L106 169 | process.exit(0); 170 | } catch (error) { 171 | if (error instanceof Error) { 172 | core.error(error); 173 | core.setFailed(error.message); 174 | } else if (typeof error === "string") { 175 | core.error(error); 176 | core.setFailed(error); 177 | } else { 178 | core.error("Non-Error exception"); 179 | core.setFailed("Non-Error exception"); 180 | } 181 | // https://github.com/actions/cache/blob/0c45773b623bea8c8e75f6c82b208c3cf94ea4f9/src/restoreImpl.ts#L88 182 | process.exit(1); 183 | } 184 | } 185 | 186 | run(); 187 | -------------------------------------------------------------------------------- /src/parse-stack-path.test.ts: -------------------------------------------------------------------------------- 1 | import { parseStackPath } from "./parse-stack-path"; 2 | 3 | const EXAMPLE = [ 4 | "snapshot-doc-root: /home/patrick/.stack/snapshots/x86_64-linux-tinfo6/0dd02c1d8a380045321779c4567c2aa8873910743eac342f72d56f3d26881028/9.2.7/doc", 5 | "local-doc-root: /home/patrick/code/freckle/megarepo/backend/.stack-work/install/x86_64-linux-tinfo6/0dd02c1d8a380045321779c4567c2aa8873910743eac342f72d56f3d26881028/9.2.7/doc", 6 | "local-hoogle-root: /home/patrick/code/freckle/megarepo/backend/.stack-work/hoogle/x86_64-linux-tinfo6/0dd02c1d8a380045321779c4567c2aa8873910743eac342f72d56f3d26881028/9.2.7", 7 | "stack-root: /home/patrick/.stack", 8 | "global-config: /home/patrick/.stack/config.yaml", 9 | "project-root: /home/patrick/code/freckle/megarepo/backend", 10 | "config-location: /home/patrick/code/freckle/megarepo/backend/stack.yaml", 11 | "bin-path: /home/patrick/.stack/snapshots/x86_64-linux-tinfo6/7eed7816433ae7cc7801479e88c42a76f77602f2a5c39ec077837318841a4e18/9.2.7/bin:/home/patrick/.stack/compiler-tools/x86_64-linux-tinfo6/ghc-9.2.7/bin:/home/patrick/.stack/programs/x86_64-linux/ghc-tinfo6-9.2.7/bin:/home/patrick/.nvm/versions/node/v16.13.1/bin:/home/patrick/.local/bin:/home/patrick/.local/share/gem/ruby/3.0.0/bin:/home/patrick/.nix-profile/bin:/nix/var/nix/profiles/default/bin:/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl", 12 | "programs: /home/patrick/.stack/programs/x86_64-linux", 13 | "compiler-exe: /home/patrick/.stack/programs/x86_64-linux/ghc-tinfo6-9.2.7/bin/ghc-9.2.7", 14 | "compiler-bin: /home/patrick/.stack/programs/x86_64-linux/ghc-tinfo6-9.2.7/bin", 15 | "compiler-tools-bin: /home/patrick/.stack/compiler-tools/x86_64-linux-tinfo6/ghc-9.2.7/bin", 16 | "local-bin: /home/patrick/.local/bin", 17 | "extra-include-dirs:", 18 | "extra-library-dirs:", 19 | "snapshot-pkg-db: /home/patrick/.stack/snapshots/x86_64-linux-tinfo6/7eed7816433ae7cc7801479e88c42a76f77602f2a5c39ec077837318841a4e18/9.2.7/pkgdb", 20 | "local-pkg-db: /home/patrick/code/freckle/megarepo/backend/.stack-work/install/x86_64-linux-tinfo6/7eed7816433ae7cc7801479e88c42a76f77602f2a5c39ec077837318841a4e18/9.2.7/pkgdb", 21 | "global-pkg-db: /home/patrick/.stack/programs/x86_64-linux/ghc-tinfo6-9.2.7/lib/ghc-9.2.7/package.conf.d", 22 | "ghc-package-path: /home/patrick/code/freckle/megarepo/backend/.stack-work/install/x86_64-linux-tinfo6/7eed7816433ae7cc7801479e88c42a76f77602f2a5c39ec077837318841a4e18/9.2.7/pkgdb:/home/patrick/.stack/snapshots/x86_64-linux-tinfo6/7eed7816433ae7cc7801479e88c42a76f77602f2a5c39ec077837318841a4e18/9.2.7/pkgdb:/home/patrick/.stack/programs/x86_64-linux/ghc-tinfo6-9.2.7/lib/ghc-9.2.7/package.conf.d", 23 | "snapshot-install-root: /home/patrick/.stack/snapshots/x86_64-linux-tinfo6/7eed7816433ae7cc7801479e88c42a76f77602f2a5c39ec077837318841a4e18/9.2.7", 24 | "local-install-root: /home/patrick/code/freckle/megarepo/backend/.stack-work/install/x86_64-linux-tinfo6/7eed7816433ae7cc7801479e88c42a76f77602f2a5c39ec077837318841a4e18/9.2.7", 25 | "dist-dir: .stack-work/dist/x86_64-linux-tinfo6/ghc-9.2.7", 26 | "local-hpc-root: /home/patrick/code/freckle/megarepo/backend/.stack-work/install/x86_64-linux-tinfo6/7eed7816433ae7cc7801479e88c42a76f77602f2a5c39ec077837318841a4e18/9.2.7/hpc", 27 | ].join("\n"); 28 | 29 | test("parseStackPath", () => { 30 | const stackPath = parseStackPath(EXAMPLE); 31 | 32 | // Test one non-null and one nullable 33 | expect(stackPath["stack-root"]).toBe("/home/patrick/.stack"); 34 | expect(stackPath["extra-include-dirs"]).toBeNull(); 35 | }); 36 | -------------------------------------------------------------------------------- /src/parse-stack-path.ts: -------------------------------------------------------------------------------- 1 | import * as yaml from "js-yaml"; 2 | 3 | export type StackPath = { 4 | [key: string]: string | null; 5 | }; 6 | 7 | export function parseStackPath(stdout: string): StackPath { 8 | return yaml.load(stdout) as StackPath; 9 | } 10 | -------------------------------------------------------------------------------- /src/parse-stack-query.test.ts: -------------------------------------------------------------------------------- 1 | import { parseStackQuery } from "./parse-stack-query"; 2 | 3 | const EXAMPLE = [ 4 | "compiler:", 5 | " actual: ghc-9.2.7", 6 | " wanted: ghc-9.2.7", 7 | "locals:", 8 | " core:", 9 | " path: /home/patrick/code/freckle/megarepo/backend/core/", 10 | " version: 0.0.0", 11 | " entities:", 12 | " path: /home/patrick/code/freckle/megarepo/backend/entities/", 13 | " version: 0.0.0", 14 | " fancy-api:", 15 | " path: /home/patrick/code/freckle/megarepo/backend/fancy-api/", 16 | " version: 0.0.0", 17 | ].join("\n"); 18 | 19 | test("parseStackQuery", () => { 20 | const stackQuery = parseStackQuery(EXAMPLE); 21 | expect(stackQuery.compiler.actual).toBe("ghc-9.2.7"); 22 | expect(stackQuery.compiler.wanted).toBe("ghc-9.2.7"); 23 | }); 24 | -------------------------------------------------------------------------------- /src/parse-stack-query.ts: -------------------------------------------------------------------------------- 1 | import * as yaml from "js-yaml"; 2 | 3 | export type StackQuery = { 4 | compiler: Compiler; 5 | }; 6 | 7 | export type Compiler = { 8 | actual: string; 9 | wanted: string; 10 | }; 11 | 12 | export function parseStackQuery(stdout: string): StackQuery { 13 | return yaml.load(stdout) as StackQuery; 14 | } 15 | -------------------------------------------------------------------------------- /src/stack-cli.test.ts: -------------------------------------------------------------------------------- 1 | import * as exec from "@actions/exec"; 2 | 3 | import { StackCLI } from "./stack-cli"; 4 | 5 | jest.spyOn(exec, "exec"); 6 | 7 | describe("StackCLI", () => { 8 | test("Respects --resolver given", async () => { 9 | const stackCLI = new StackCLI(["--resolver", "lts"], false); 10 | 11 | await stackCLI.setup([]); 12 | 13 | expect(exec.exec).toHaveBeenCalledWith( 14 | "stack", 15 | ["--resolver", "lts", "setup"], 16 | undefined, // ExecOptions 17 | ); 18 | }); 19 | 20 | test("Adds --resolver nightly", async () => { 21 | const stackCLI = new StackCLI( 22 | ["--stack-yaml", "sub/stack-nightly.yaml"], 23 | false, 24 | ); 25 | 26 | await stackCLI.setup([]); 27 | 28 | expect(exec.exec).toHaveBeenCalledWith( 29 | "stack", 30 | [ 31 | "--stack-yaml", 32 | "sub/stack-nightly.yaml", 33 | "--resolver", 34 | "nightly", 35 | "setup", 36 | ], 37 | undefined, // ExecOptions 38 | ); 39 | }); 40 | 41 | test("Doesn't add --resolver nightly if given", async () => { 42 | const stackCLI = new StackCLI( 43 | [ 44 | "--stack-yaml", 45 | "sub/stack-nightly.yaml", 46 | "--resolver", 47 | "nightly-20240201", 48 | ], 49 | false, 50 | ); 51 | 52 | await stackCLI.setup([]); 53 | 54 | expect(exec.exec).toHaveBeenCalledWith( 55 | "stack", 56 | [ 57 | "--stack-yaml", 58 | "sub/stack-nightly.yaml", 59 | "--resolver", 60 | "nightly-20240201", 61 | "setup", 62 | ], 63 | undefined, // ExecOptions 64 | ); 65 | }); 66 | 67 | test("installCompilerTools", async () => { 68 | const stackCLI = new StackCLI([], false); 69 | await stackCLI.installCompilerTools(["hlint", "weeder"]); 70 | 71 | expect(exec.exec).toHaveBeenCalledWith( 72 | "stack", 73 | ["install", "--copy-compiler-tool", "hlint", "weeder"], 74 | undefined, 75 | ); 76 | }); 77 | 78 | test("installCompilerTools with empty arguments", async () => { 79 | const stackCLI = new StackCLI([], false); 80 | await stackCLI.installCompilerTools([]); 81 | 82 | expect(exec.exec).not.toHaveBeenCalled(); 83 | }); 84 | 85 | test("buildDependencies", async () => { 86 | const stackCLI = new StackCLI([], false); 87 | 88 | await stackCLI.buildDependencies(["--coverage"]); 89 | 90 | expect(exec.exec).toHaveBeenCalledWith( 91 | "stack", 92 | [ 93 | "build", 94 | "--test", 95 | "--no-run-tests", 96 | "--dependencies-only", 97 | "--coverage", 98 | ], 99 | undefined, 100 | ); 101 | }); 102 | 103 | test("buildNoTest", async () => { 104 | const stackCLI = new StackCLI([], false); 105 | 106 | await stackCLI.buildNoTest(["--coverage"]); 107 | 108 | expect(exec.exec).toHaveBeenCalledWith( 109 | "stack", 110 | ["build", "--test", "--no-run-tests", "--coverage"], 111 | undefined, 112 | ); 113 | }); 114 | 115 | test("buildTest", async () => { 116 | const stackCLI = new StackCLI([], false); 117 | 118 | await stackCLI.buildTest(["--coverage"]); 119 | 120 | expect(exec.exec).toHaveBeenCalledWith( 121 | "stack", 122 | ["build", "--test", "--coverage"], 123 | undefined, 124 | ); 125 | }); 126 | 127 | test("build", async () => { 128 | const stackCLI = new StackCLI([], false); 129 | 130 | await stackCLI.build(["--coverage"]); 131 | 132 | expect(exec.exec).toHaveBeenCalledWith( 133 | "stack", 134 | ["build", "--coverage"], 135 | undefined, 136 | ); 137 | }); 138 | }); 139 | -------------------------------------------------------------------------------- /src/stack-cli.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs"; 2 | import * as path from "path"; 3 | import { devNull } from "os"; 4 | import type { ExecOptions } from "@actions/exec"; 5 | import * as exec from "@actions/exec"; 6 | 7 | import type { StackPath } from "./parse-stack-path"; 8 | import { parseStackPath } from "./parse-stack-path"; 9 | import type { StackQuery } from "./parse-stack-query"; 10 | import { parseStackQuery } from "./parse-stack-query"; 11 | 12 | export interface ExecDelegate { 13 | exec: ( 14 | command: string, 15 | args: string[], 16 | options?: ExecOptions, 17 | ) => Promise; 18 | } 19 | 20 | export class StackCLI { 21 | public config: string; 22 | public resolver: string | null; 23 | 24 | private debug: boolean; 25 | private globalArgs: string[]; 26 | 27 | constructor(args: string[], debug?: boolean) { 28 | this.debug = debug ?? false; 29 | this.globalArgs = args; 30 | 31 | // Capture --stack-yaml if given 32 | const stackYamlIdx = args.indexOf("--stack-yaml"); 33 | const stackYamlArg = stackYamlIdx >= 0 ? args[stackYamlIdx + 1] : null; 34 | 35 | this.config = stackYamlArg ?? process.env.STACK_YAML ?? "stack.yaml"; 36 | 37 | // Capture --resolver if given 38 | const resolverIdx = args.indexOf("--resolver"); 39 | const resolverArg = resolverIdx >= 0 ? args[resolverIdx + 1] : null; 40 | 41 | this.resolver = resolverArg; 42 | 43 | // Infer nightly if not given 44 | if (!this.resolver && path.basename(this.config) === "stack-nightly.yaml") { 45 | this.resolver = "nightly"; 46 | this.globalArgs.push("--resolver"); 47 | this.globalArgs.push("nightly"); 48 | } 49 | } 50 | 51 | async installed(): Promise { 52 | const ec = await exec.exec("which", ["stack"], { 53 | silent: true, 54 | ignoreReturnCode: true, 55 | }); 56 | return ec == 0; 57 | } 58 | 59 | async install(): Promise { 60 | const url = "https://get.haskellstack.org"; 61 | const tmp = "install-stack.sh"; 62 | await exec.exec("curl", ["-sSL", "-o", tmp, url]); 63 | await exec.exec("sh", [tmp]); 64 | fs.rmSync(tmp); 65 | } 66 | 67 | async upgrade(): Promise { 68 | // Avoid this.exec because we don't need/want globalArgs 69 | return await exec.exec("stack", ["upgrade"]); 70 | } 71 | 72 | async setup(args: string[]): Promise { 73 | return await this.exec(["setup"].concat(args)); 74 | } 75 | 76 | async installCompilerTools(tools: string[]): Promise { 77 | if (tools.length > 0) { 78 | return await this.exec(["install", "--copy-compiler-tool"].concat(tools)); 79 | } 80 | 81 | // No tools to install 82 | return 0; 83 | } 84 | 85 | async buildDependencies(args: string[]): Promise { 86 | return await this.buildNoTest(["--dependencies-only"].concat(args)); 87 | } 88 | 89 | async buildNoTest(args: string[]): Promise { 90 | return await this.build(["--test", "--no-run-tests"].concat(args)); 91 | } 92 | 93 | async buildTest(args: string[]): Promise { 94 | return await this.build(["--test"].concat(args)); 95 | } 96 | 97 | async build(args: string[]): Promise { 98 | return await this.exec(["build"].concat(args)); 99 | } 100 | 101 | async path(): Promise { 102 | return await this.parse(["path"], parseStackPath); 103 | } 104 | 105 | async query(): Promise { 106 | return await this.parse(["query"], parseStackQuery); 107 | } 108 | 109 | async which(cmd: string): Promise { 110 | const ec = await this.exec(["exec", "--", "which", cmd], { 111 | ignoreReturnCode: true, 112 | }); 113 | return ec === 0; 114 | } 115 | 116 | async parse(args: string[], f: (stdout: string) => A): Promise { 117 | const stdout = await this.read(args); 118 | return f(stdout); 119 | } 120 | 121 | async read(args: string[]): Promise { 122 | let stdout = ""; 123 | 124 | const options: ExecOptions = { 125 | listeners: { 126 | stdout: (data: Buffer) => { 127 | stdout += data.toString(); 128 | }, 129 | }, 130 | }; 131 | 132 | if (!this.debug) { 133 | // If not debugging, hide the output being read 134 | options.outStream = fs.createWriteStream(devNull); 135 | } 136 | 137 | await this.exec(args, options); 138 | return stdout; 139 | } 140 | 141 | private async exec(args: string[], options?: ExecOptions): Promise { 142 | return await exec.exec("stack", this.globalArgs.concat(args), options); 143 | } 144 | } 145 | -------------------------------------------------------------------------------- /src/stack-yaml.test.ts: -------------------------------------------------------------------------------- 1 | import { parseStackYaml, getStackDirectories } from "./stack-yaml"; 2 | import { StackCLI } from "./stack-cli"; 3 | 4 | const testStackRoot = "/home/me/.stack"; 5 | const testPrograms = `${testStackRoot}/programs/x86_64-linux`; 6 | const testStackPathYaml = ` 7 | stack-root: ${testStackRoot} 8 | programs: ${testPrograms} 9 | `; 10 | 11 | function mockStackCLI(): StackCLI { 12 | const stack = new StackCLI([]); 13 | 14 | jest 15 | .spyOn(stack, "read") 16 | .mockImplementation((args: string[]): Promise => { 17 | // Stringify to avoid array-comparison pitfalls 18 | const expected = ["path", "--stack-root", "--programs"].toString(); 19 | const given = args.toString(); 20 | 21 | if (given !== expected) { 22 | throw new Error( 23 | `StackCLI.read() is only mocked for ${expected}, saw ${given}`, 24 | ); 25 | } 26 | 27 | return Promise.resolve(testStackPathYaml); 28 | }); 29 | 30 | return stack; 31 | } 32 | 33 | describe("getStackDirectories", () => { 34 | test("stackRoot, stackPrograms", async () => { 35 | const stackYaml = parseStackYaml("resolver: lts-22\n"); 36 | const stack = mockStackCLI(); 37 | 38 | const stackDirectories = await getStackDirectories(stackYaml, stack, ""); 39 | 40 | expect(stackDirectories.stackRoot).toEqual(testStackRoot); 41 | expect(stackDirectories.stackPrograms).toEqual(testPrograms); 42 | }); 43 | 44 | describe("stackWorks", () => { 45 | test("without packages", async () => { 46 | const stackYaml = parseStackYaml("resolver: lts-22\n"); 47 | const stack = mockStackCLI(); 48 | 49 | const stackDirectories = await getStackDirectories( 50 | stackYaml, 51 | stack, 52 | "/home/me/code/project", 53 | ); 54 | 55 | expect(stackDirectories.stackWorks).toEqual([ 56 | "/home/me/code/project/.stack-work", 57 | ]); 58 | }); 59 | 60 | test("with packages: [.]", async () => { 61 | const stackYaml = parseStackYaml("resolver: lts-22\npackages:\n- ."); 62 | const stack = mockStackCLI(); 63 | 64 | const stackDirectories = await getStackDirectories( 65 | stackYaml, 66 | stack, 67 | "/home/me/code/project", 68 | ); 69 | 70 | expect(stackDirectories.stackWorks).toEqual([ 71 | "/home/me/code/project/.stack-work", 72 | ]); 73 | }); 74 | 75 | test("with subpackages", async () => { 76 | const stackYaml = parseStackYaml( 77 | [ 78 | "resolver: lts-22", 79 | "packages:", 80 | " - subproject1", 81 | " - subproject2", 82 | ].join("\n"), 83 | ); 84 | const stack = mockStackCLI(); 85 | 86 | const stackDirectories = await getStackDirectories( 87 | stackYaml, 88 | stack, 89 | "/home/me/code/project", 90 | ); 91 | 92 | expect(stackDirectories.stackWorks).toEqual([ 93 | "/home/me/code/project/.stack-work", 94 | "/home/me/code/project/subproject1/.stack-work", 95 | "/home/me/code/project/subproject2/.stack-work", 96 | ]); 97 | }); 98 | }); 99 | }); 100 | -------------------------------------------------------------------------------- /src/stack-yaml.ts: -------------------------------------------------------------------------------- 1 | import * as fs from "fs"; 2 | import { join as pathJoin } from "path"; 3 | import * as yaml from "js-yaml"; 4 | 5 | import { StackCLI } from "./stack-cli"; 6 | 7 | export type StackYaml = { 8 | resolver: string; 9 | packages: string[] | null; 10 | "local-programs-path": string | null; 11 | }; 12 | 13 | export function readStackYamlSync(path: string): StackYaml { 14 | const contents = fs.readFileSync(path, { encoding: "utf-8" }); 15 | return parseStackYaml(contents); 16 | } 17 | 18 | export function parseStackYaml(contents: string): StackYaml { 19 | return yaml.load(contents) as StackYaml; 20 | } 21 | 22 | export type StackDirectories = { 23 | stackRoot: string; 24 | stackPrograms: string; 25 | stackWorks: string[]; 26 | }; 27 | 28 | // Internal type for parsing Yaml output from `stack path` 29 | type StackPath = { 30 | "stack-root": string; 31 | programs: string; 32 | }; 33 | 34 | export async function getStackDirectories( 35 | stackYaml: StackYaml, 36 | stack: StackCLI, 37 | workingDirectory?: string, 38 | ): Promise { 39 | const cwd = workingDirectory ?? process.cwd(); 40 | 41 | // Only use --stack-root and --programs, which (as of stack v2.15.3) won't 42 | // load the environment and install GHC, etc. These are the only options 43 | // currently safe to make use of outside of caching. 44 | const output = await stack.read(["path", "--stack-root", "--programs"]); 45 | const stackPath = yaml.load(output) as StackPath; 46 | const stackWorks = packagesStackWorks(stackYaml, cwd); 47 | 48 | return { 49 | stackRoot: stackPath["stack-root"], 50 | stackPrograms: stackPath.programs, 51 | stackWorks, 52 | }; 53 | } 54 | 55 | function packagesStackWorks(stackYaml: StackYaml, cwd: string): string[] { 56 | // We always include ./.stack-work, so filter the "." element if present 57 | const packageStackWorks = (stackYaml.packages ?? []) 58 | .filter((p) => p !== ".") 59 | .map((p) => pathJoin(cwd, p, ".stack-work")); 60 | 61 | return [pathJoin(cwd, ".stack-work")].concat(packageStackWorks); 62 | } 63 | -------------------------------------------------------------------------------- /src/with-cache.test.ts: -------------------------------------------------------------------------------- 1 | import * as core from "@actions/core"; 2 | import * as cache from "@actions/cache"; 3 | 4 | import { getCacheKeys } from "./get-cache-keys"; 5 | import { DEFAULT_CACHE_OPTIONS, withCache } from "./with-cache"; 6 | 7 | const restoreCacheMock = jest.spyOn(cache, "restoreCache"); 8 | jest.spyOn(cache, "saveCache"); 9 | jest.spyOn(core, "info"); 10 | 11 | async function testFunction(): Promise { 12 | return 42; 13 | } 14 | 15 | async function testFunctionThrows(): Promise { 16 | throw new Error("Boom"); 17 | } 18 | 19 | function simulateCacheHit( 20 | _paths: string[], 21 | primaryKey: string, 22 | _restoreKeys?: string[], 23 | ): Promise { 24 | return Promise.resolve(primaryKey); 25 | } 26 | 27 | function simulateCacheMiss( 28 | _paths: string[], 29 | primaryKey: string, 30 | _restoreKeys?: string[], 31 | ): Promise { 32 | return Promise.resolve(primaryKey.replace(/-*$/, "-XXX")); 33 | } 34 | 35 | test("withCache skips on primary-key hit", async () => { 36 | const cachePaths = ["/a", "/b"]; 37 | const cacheKeys = getCacheKeys(["a-b", "c", "d"]); 38 | restoreCacheMock.mockImplementation(simulateCacheHit); 39 | 40 | const result = await withCache( 41 | cachePaths, 42 | cacheKeys, 43 | testFunction, 44 | DEFAULT_CACHE_OPTIONS, 45 | ); 46 | 47 | expect(result).toBeUndefined(); 48 | expect(cache.restoreCache).toHaveBeenCalledWith( 49 | cachePaths, 50 | cacheKeys.primaryKey, 51 | cacheKeys.restoreKeys, 52 | ); 53 | expect(cache.saveCache).not.toHaveBeenCalled(); 54 | }); 55 | 56 | test("withCache acts and saves if no primary-key hit", async () => { 57 | const cachePaths = ["/a", "/b"]; 58 | const cacheKeys = getCacheKeys(["a-b", "c", "d"]); 59 | restoreCacheMock.mockImplementation(simulateCacheMiss); 60 | 61 | const result = await withCache( 62 | cachePaths, 63 | cacheKeys, 64 | testFunction, 65 | DEFAULT_CACHE_OPTIONS, 66 | ); 67 | 68 | expect(result).toEqual(42); 69 | expect(cache.restoreCache).toHaveBeenCalledWith( 70 | cachePaths, 71 | cacheKeys.primaryKey, 72 | cacheKeys.restoreKeys, 73 | ); 74 | expect(cache.saveCache).toHaveBeenCalledWith( 75 | cachePaths, 76 | cacheKeys.primaryKey, 77 | ); 78 | }); 79 | 80 | test("withCache can be configured to act and save anyway", async () => { 81 | const cachePaths = ["/a", "/b"]; 82 | const cacheKeys = getCacheKeys(["a-b", "c", "d"]); 83 | restoreCacheMock.mockImplementation(simulateCacheHit); 84 | 85 | const result = await withCache(cachePaths, cacheKeys, testFunction, { 86 | ...DEFAULT_CACHE_OPTIONS, 87 | skipOnHit: false, 88 | }); 89 | 90 | expect(result).toEqual(42); 91 | expect(cache.restoreCache).toHaveBeenCalledWith( 92 | cachePaths, 93 | cacheKeys.primaryKey, 94 | cacheKeys.restoreKeys, 95 | ); 96 | 97 | // This step is still skipped 98 | expect(cache.saveCache).not.toHaveBeenCalled(); 99 | }); 100 | 101 | test("withCache does not save on error", async () => { 102 | const cachePaths = ["/a", "/b"]; 103 | const cacheKeys = getCacheKeys(["a-b", "c", "d"]); 104 | restoreCacheMock.mockImplementation(simulateCacheMiss); 105 | 106 | await expect(async () => { 107 | await withCache( 108 | cachePaths, 109 | cacheKeys, 110 | testFunctionThrows, 111 | DEFAULT_CACHE_OPTIONS, 112 | ); 113 | }).rejects.toThrow(); 114 | 115 | expect(cache.restoreCache).toHaveBeenCalledWith( 116 | cachePaths, 117 | cacheKeys.primaryKey, 118 | cacheKeys.restoreKeys, 119 | ); 120 | 121 | // This step is skipped 122 | expect(cache.saveCache).not.toHaveBeenCalled(); 123 | }); 124 | 125 | test("withCache can be configured to save on error", async () => { 126 | const cachePaths = ["/a", "/b"]; 127 | const cacheKeys = getCacheKeys(["a-b", "c", "d"]); 128 | restoreCacheMock.mockImplementation(simulateCacheMiss); 129 | 130 | await expect(async () => { 131 | await withCache(cachePaths, cacheKeys, testFunctionThrows, { 132 | ...DEFAULT_CACHE_OPTIONS, 133 | saveOnError: true, 134 | }); 135 | }).rejects.toThrow(); 136 | 137 | expect(cache.restoreCache).toHaveBeenCalledWith( 138 | cachePaths, 139 | cacheKeys.primaryKey, 140 | cacheKeys.restoreKeys, 141 | ); 142 | 143 | expect(cache.saveCache).toHaveBeenCalledWith( 144 | cachePaths, 145 | cacheKeys.primaryKey, 146 | ); 147 | }); 148 | -------------------------------------------------------------------------------- /src/with-cache.ts: -------------------------------------------------------------------------------- 1 | import * as core from "@actions/core"; 2 | import * as cache from "@actions/cache"; 3 | import type { CacheKeys } from "./get-cache-keys"; 4 | 5 | export type CacheOptions = { 6 | skipOnHit: boolean; 7 | saveOnError: boolean; 8 | }; 9 | 10 | export const DEFAULT_CACHE_OPTIONS = { 11 | skipOnHit: true, 12 | saveOnError: false, 13 | }; 14 | 15 | export async function withCache( 16 | paths: string[], 17 | keys: CacheKeys, 18 | fn: () => Promise, 19 | options: CacheOptions = DEFAULT_CACHE_OPTIONS, 20 | ): Promise { 21 | const { skipOnHit, saveOnError } = options; 22 | 23 | core.info(`Cached paths:\n - ${paths.join("\n - ")}`); 24 | core.info(`Cache key: ${keys.primaryKey}`); 25 | core.info(`Cache restore keys:\n - ${keys.restoreKeys.join("\n - ")}`); 26 | 27 | const restoredKey = await cache.restoreCache( 28 | paths, 29 | keys.primaryKey, 30 | keys.restoreKeys, 31 | ); 32 | 33 | const primaryKeyHit = restoredKey == keys.primaryKey; 34 | 35 | if (restoredKey) { 36 | core.info(`Cache restored from key: ${restoredKey}`); 37 | } else { 38 | core.warning("No cache found"); 39 | } 40 | 41 | if (primaryKeyHit && skipOnHit && !saveOnError) { 42 | core.info("Skipping due to primary key hit"); 43 | return; 44 | } 45 | 46 | let result: T; 47 | 48 | try { 49 | result = await fn(); 50 | 51 | if (!primaryKeyHit) { 52 | await cache.saveCache(paths, keys.primaryKey); 53 | } 54 | } catch (ex) { 55 | if (saveOnError && !primaryKeyHit) { 56 | await cache.saveCache(paths, keys.primaryKey); 57 | } 58 | 59 | throw ex; 60 | } 61 | 62 | return result; 63 | } 64 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://json.schemastore.org/tsconfig", 3 | "compilerOptions": { 4 | "outDir": "./lib", 5 | "allowJs": true, 6 | "target": "ES2022", 7 | "noImplicitAny": true, 8 | "noImplicitReturns": true, 9 | "noFallthroughCasesInSwitch": true, 10 | "strictNullChecks": true, 11 | "noImplicitThis": true, 12 | "allowUnreachableCode": false, 13 | "allowUnusedLabels": false, 14 | "noEmitOnError": true, 15 | "removeComments": true, 16 | "module": "NodeNext", 17 | "esModuleInterop": true, 18 | "strict": true 19 | }, 20 | "include": ["./src/**/*"], 21 | "exclude": ["./src/**/*.test.ts"] 22 | } 23 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. 2 | # yarn lockfile v1 3 | 4 | 5 | "@actions/cache@^4.0.3": 6 | version "4.0.3" 7 | resolved "https://registry.yarnpkg.com/@actions/cache/-/cache-4.0.3.tgz#7b08ede6ae2c0b2fb0b7b452ed0f40ba9f0c53d3" 8 | integrity sha512-SvrqFtYJ7I48A/uXNkoJrnukx5weQv1fGquhs3+4nkByZThBH109KTIqj5x/cGV7JGNvb8dLPVywUOqX1fjiXg== 9 | dependencies: 10 | "@actions/core" "^1.11.1" 11 | "@actions/exec" "^1.0.1" 12 | "@actions/glob" "^0.1.0" 13 | "@actions/http-client" "^2.1.1" 14 | "@actions/io" "^1.0.1" 15 | "@azure/abort-controller" "^1.1.0" 16 | "@azure/ms-rest-js" "^2.6.0" 17 | "@azure/storage-blob" "^12.13.0" 18 | "@protobuf-ts/plugin" "^2.9.4" 19 | semver "^6.3.1" 20 | 21 | "@actions/core@^1.11.1", "@actions/core@^1.2.6", "@actions/core@^1.9.1": 22 | version "1.11.1" 23 | resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.11.1.tgz#ae683aac5112438021588030efb53b1adb86f172" 24 | integrity sha512-hXJCSrkwfA46Vd9Z3q4cpEpHB1rL5NG04+/rbqW9d3+CSvtB1tYe8UTpAlixa1vj0m/ULglfEK2UKxMGxCxv5A== 25 | dependencies: 26 | "@actions/exec" "^1.1.1" 27 | "@actions/http-client" "^2.0.1" 28 | 29 | "@actions/exec@^1.0.1", "@actions/exec@^1.1.0", "@actions/exec@^1.1.1": 30 | version "1.1.1" 31 | resolved "https://registry.yarnpkg.com/@actions/exec/-/exec-1.1.1.tgz#2e43f28c54022537172819a7cf886c844221a611" 32 | integrity sha512-+sCcHHbVdk93a0XT19ECtO/gIXoxvdsgQLzb2fE2/5sIZmWQuluYyjPQtrtTHdU1YzTZ7bAPN4sITq2xi1679w== 33 | dependencies: 34 | "@actions/io" "^1.0.1" 35 | 36 | "@actions/glob@^0.1.0": 37 | version "0.1.2" 38 | resolved "https://registry.yarnpkg.com/@actions/glob/-/glob-0.1.2.tgz#9685ed2d6583093479c8f137d067c4329d7d0974" 39 | integrity sha512-SclLR7Ia5sEqjkJTPs7Sd86maMDw43p769YxBOxvPvEWuPEhpAnBsQfENOpXjFYMmhCqd127bmf+YdvJqVqR4A== 40 | dependencies: 41 | "@actions/core" "^1.2.6" 42 | minimatch "^3.0.4" 43 | 44 | "@actions/glob@^0.5.0": 45 | version "0.5.0" 46 | resolved "https://registry.yarnpkg.com/@actions/glob/-/glob-0.5.0.tgz#72853048c6f84c05d8d9e0aad2bb926f6e3bc873" 47 | integrity sha512-tST2rjPvJLRZLuT9NMUtyBjvj9Yo0MiJS3ow004slMvm8GFM+Zv9HvMJ7HWzfUyJnGrJvDsYkWBaaG3YKXRtCw== 48 | dependencies: 49 | "@actions/core" "^1.9.1" 50 | minimatch "^3.0.4" 51 | 52 | "@actions/http-client@^2.0.1", "@actions/http-client@^2.1.1": 53 | version "2.2.3" 54 | resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.3.tgz#31fc0b25c0e665754ed39a9f19a8611fc6dab674" 55 | integrity sha512-mx8hyJi/hjFvbPokCg4uRd4ZX78t+YyRPtnKWwIl+RzNaVuFpQHfmlGVfsKEJN8LwTCvL+DfVgAM04XaHkm6bA== 56 | dependencies: 57 | tunnel "^0.0.6" 58 | undici "^5.25.4" 59 | 60 | "@actions/io@^1.0.1": 61 | version "1.1.3" 62 | resolved "https://registry.yarnpkg.com/@actions/io/-/io-1.1.3.tgz#4cdb6254da7962b07473ff5c335f3da485d94d71" 63 | integrity sha512-wi9JjgKLYS7U/z8PPbco+PvTb/nRWjeoFlJ1Qer83k/3C5PHQi28hiVdeE2kHXmIL99mQFawx8qt/JPjZilJ8Q== 64 | 65 | "@ampproject/remapping@^2.2.0": 66 | version "2.3.0" 67 | resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" 68 | integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== 69 | dependencies: 70 | "@jridgewell/gen-mapping" "^0.3.5" 71 | "@jridgewell/trace-mapping" "^0.3.24" 72 | 73 | "@azure/abort-controller@^1.1.0": 74 | version "1.1.0" 75 | resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.1.0.tgz#788ee78457a55af8a1ad342acb182383d2119249" 76 | integrity sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw== 77 | dependencies: 78 | tslib "^2.2.0" 79 | 80 | "@azure/abort-controller@^2.0.0", "@azure/abort-controller@^2.1.2": 81 | version "2.1.2" 82 | resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-2.1.2.tgz#42fe0ccab23841d9905812c58f1082d27784566d" 83 | integrity sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA== 84 | dependencies: 85 | tslib "^2.6.2" 86 | 87 | "@azure/core-auth@^1.1.4", "@azure/core-auth@^1.4.0", "@azure/core-auth@^1.8.0": 88 | version "1.9.0" 89 | resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.9.0.tgz#ac725b03fabe3c892371065ee9e2041bee0fd1ac" 90 | integrity sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw== 91 | dependencies: 92 | "@azure/abort-controller" "^2.0.0" 93 | "@azure/core-util" "^1.11.0" 94 | tslib "^2.6.2" 95 | 96 | "@azure/core-client@^1.3.0", "@azure/core-client@^1.6.2": 97 | version "1.9.2" 98 | resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.9.2.tgz#6fc69cee2816883ab6c5cdd653ee4f2ff9774f74" 99 | integrity sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w== 100 | dependencies: 101 | "@azure/abort-controller" "^2.0.0" 102 | "@azure/core-auth" "^1.4.0" 103 | "@azure/core-rest-pipeline" "^1.9.1" 104 | "@azure/core-tracing" "^1.0.0" 105 | "@azure/core-util" "^1.6.1" 106 | "@azure/logger" "^1.0.0" 107 | tslib "^2.6.2" 108 | 109 | "@azure/core-http-compat@^2.0.0": 110 | version "2.1.2" 111 | resolved "https://registry.yarnpkg.com/@azure/core-http-compat/-/core-http-compat-2.1.2.tgz#d1585ada24ba750dc161d816169b33b35f762f0d" 112 | integrity sha512-5MnV1yqzZwgNLLjlizsU3QqOeQChkIXw781Fwh1xdAqJR5AA32IUaq6xv1BICJvfbHoa+JYcaij2HFkhLbNTJQ== 113 | dependencies: 114 | "@azure/abort-controller" "^2.0.0" 115 | "@azure/core-client" "^1.3.0" 116 | "@azure/core-rest-pipeline" "^1.3.0" 117 | 118 | "@azure/core-lro@^2.2.0": 119 | version "2.7.2" 120 | resolved "https://registry.yarnpkg.com/@azure/core-lro/-/core-lro-2.7.2.tgz#787105027a20e45c77651a98b01a4d3b01b75a08" 121 | integrity sha512-0YIpccoX8m/k00O7mDDMdJpbr6mf1yWo2dfmxt5A8XVZVVMz2SSKaEbMCeJRvgQ0IaSlqhjT47p4hVIRRy90xw== 122 | dependencies: 123 | "@azure/abort-controller" "^2.0.0" 124 | "@azure/core-util" "^1.2.0" 125 | "@azure/logger" "^1.0.0" 126 | tslib "^2.6.2" 127 | 128 | "@azure/core-paging@^1.1.1": 129 | version "1.6.2" 130 | resolved "https://registry.yarnpkg.com/@azure/core-paging/-/core-paging-1.6.2.tgz#40d3860dc2df7f291d66350b2cfd9171526433e7" 131 | integrity sha512-YKWi9YuCU04B55h25cnOYZHxXYtEvQEbKST5vqRga7hWY9ydd3FZHdeQF8pyh+acWZvppw13M/LMGx0LABUVMA== 132 | dependencies: 133 | tslib "^2.6.2" 134 | 135 | "@azure/core-rest-pipeline@^1.10.1", "@azure/core-rest-pipeline@^1.3.0", "@azure/core-rest-pipeline@^1.9.1": 136 | version "1.18.2" 137 | resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.18.2.tgz#fa3a83b412d4b3e33edca30a71b1d5838306c075" 138 | integrity sha512-IkTf/DWKyCklEtN/WYW3lqEsIaUDshlzWRlZNNwSYtFcCBQz++OtOjxNpm8rr1VcbMS6RpjybQa3u6B6nG0zNw== 139 | dependencies: 140 | "@azure/abort-controller" "^2.0.0" 141 | "@azure/core-auth" "^1.8.0" 142 | "@azure/core-tracing" "^1.0.1" 143 | "@azure/core-util" "^1.11.0" 144 | "@azure/logger" "^1.0.0" 145 | http-proxy-agent "^7.0.0" 146 | https-proxy-agent "^7.0.0" 147 | tslib "^2.6.2" 148 | 149 | "@azure/core-tracing@^1.0.0", "@azure/core-tracing@^1.0.1", "@azure/core-tracing@^1.1.2": 150 | version "1.2.0" 151 | resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.2.0.tgz#7be5d53c3522d639cf19042cbcdb19f71bc35ab2" 152 | integrity sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg== 153 | dependencies: 154 | tslib "^2.6.2" 155 | 156 | "@azure/core-util@^1.11.0", "@azure/core-util@^1.2.0", "@azure/core-util@^1.6.1": 157 | version "1.11.0" 158 | resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.11.0.tgz#f530fc67e738aea872fbdd1cc8416e70219fada7" 159 | integrity sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g== 160 | dependencies: 161 | "@azure/abort-controller" "^2.0.0" 162 | tslib "^2.6.2" 163 | 164 | "@azure/core-xml@^1.4.3": 165 | version "1.4.4" 166 | resolved "https://registry.yarnpkg.com/@azure/core-xml/-/core-xml-1.4.4.tgz#a8656751943bf492762f758d147d33dfcd933d9e" 167 | integrity sha512-J4FYAqakGXcbfeZjwjMzjNcpcH4E+JtEBv+xcV1yL0Ydn/6wbQfeFKTCHh9wttAi0lmajHw7yBbHPRG+YHckZQ== 168 | dependencies: 169 | fast-xml-parser "^4.4.1" 170 | tslib "^2.6.2" 171 | 172 | "@azure/logger@^1.0.0": 173 | version "1.1.4" 174 | resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.1.4.tgz#223cbf2b424dfa66478ce9a4f575f59c6f379768" 175 | integrity sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ== 176 | dependencies: 177 | tslib "^2.6.2" 178 | 179 | "@azure/ms-rest-js@^2.6.0": 180 | version "2.7.0" 181 | resolved "https://registry.yarnpkg.com/@azure/ms-rest-js/-/ms-rest-js-2.7.0.tgz#8639065577ffdf4946951e1d246334ebfd72d537" 182 | integrity sha512-ngbzWbqF+NmztDOpLBVDxYM+XLcUj7nKhxGbSU9WtIsXfRB//cf2ZbAG5HkOrhU9/wd/ORRB6lM/d69RKVjiyA== 183 | dependencies: 184 | "@azure/core-auth" "^1.1.4" 185 | abort-controller "^3.0.0" 186 | form-data "^2.5.0" 187 | node-fetch "^2.6.7" 188 | tslib "^1.10.0" 189 | tunnel "0.0.6" 190 | uuid "^8.3.2" 191 | xml2js "^0.5.0" 192 | 193 | "@azure/storage-blob@^12.13.0": 194 | version "12.26.0" 195 | resolved "https://registry.yarnpkg.com/@azure/storage-blob/-/storage-blob-12.26.0.tgz#1fae3a0b68d8a91b56c89f353507916bf8705d1c" 196 | integrity sha512-SriLPKezypIsiZ+TtlFfE46uuBIap2HeaQVS78e1P7rz5OSbq0rsd52WE1mC5f7vAeLiXqv7I7oRhL3WFZEw3Q== 197 | dependencies: 198 | "@azure/abort-controller" "^2.1.2" 199 | "@azure/core-auth" "^1.4.0" 200 | "@azure/core-client" "^1.6.2" 201 | "@azure/core-http-compat" "^2.0.0" 202 | "@azure/core-lro" "^2.2.0" 203 | "@azure/core-paging" "^1.1.1" 204 | "@azure/core-rest-pipeline" "^1.10.1" 205 | "@azure/core-tracing" "^1.1.2" 206 | "@azure/core-util" "^1.6.1" 207 | "@azure/core-xml" "^1.4.3" 208 | "@azure/logger" "^1.0.0" 209 | events "^3.0.0" 210 | tslib "^2.2.0" 211 | 212 | "@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.25.9", "@babel/code-frame@^7.26.2": 213 | version "7.26.2" 214 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" 215 | integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== 216 | dependencies: 217 | "@babel/helper-validator-identifier" "^7.25.9" 218 | js-tokens "^4.0.0" 219 | picocolors "^1.0.0" 220 | 221 | "@babel/compat-data@^7.26.5": 222 | version "7.26.5" 223 | resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.5.tgz#df93ac37f4417854130e21d72c66ff3d4b897fc7" 224 | integrity sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg== 225 | 226 | "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": 227 | version "7.26.7" 228 | resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.7.tgz#0439347a183b97534d52811144d763a17f9d2b24" 229 | integrity sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA== 230 | dependencies: 231 | "@ampproject/remapping" "^2.2.0" 232 | "@babel/code-frame" "^7.26.2" 233 | "@babel/generator" "^7.26.5" 234 | "@babel/helper-compilation-targets" "^7.26.5" 235 | "@babel/helper-module-transforms" "^7.26.0" 236 | "@babel/helpers" "^7.26.7" 237 | "@babel/parser" "^7.26.7" 238 | "@babel/template" "^7.25.9" 239 | "@babel/traverse" "^7.26.7" 240 | "@babel/types" "^7.26.7" 241 | convert-source-map "^2.0.0" 242 | debug "^4.1.0" 243 | gensync "^1.0.0-beta.2" 244 | json5 "^2.2.3" 245 | semver "^6.3.1" 246 | 247 | "@babel/generator@^7.26.5", "@babel/generator@^7.7.2": 248 | version "7.26.5" 249 | resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.26.5.tgz#e44d4ab3176bbcaf78a5725da5f1dc28802a9458" 250 | integrity sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw== 251 | dependencies: 252 | "@babel/parser" "^7.26.5" 253 | "@babel/types" "^7.26.5" 254 | "@jridgewell/gen-mapping" "^0.3.5" 255 | "@jridgewell/trace-mapping" "^0.3.25" 256 | jsesc "^3.0.2" 257 | 258 | "@babel/helper-compilation-targets@^7.26.5": 259 | version "7.26.5" 260 | resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.26.5.tgz#75d92bb8d8d51301c0d49e52a65c9a7fe94514d8" 261 | integrity sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA== 262 | dependencies: 263 | "@babel/compat-data" "^7.26.5" 264 | "@babel/helper-validator-option" "^7.25.9" 265 | browserslist "^4.24.0" 266 | lru-cache "^5.1.1" 267 | semver "^6.3.1" 268 | 269 | "@babel/helper-module-imports@^7.25.9": 270 | version "7.25.9" 271 | resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" 272 | integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== 273 | dependencies: 274 | "@babel/traverse" "^7.25.9" 275 | "@babel/types" "^7.25.9" 276 | 277 | "@babel/helper-module-transforms@^7.26.0": 278 | version "7.26.0" 279 | resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" 280 | integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== 281 | dependencies: 282 | "@babel/helper-module-imports" "^7.25.9" 283 | "@babel/helper-validator-identifier" "^7.25.9" 284 | "@babel/traverse" "^7.25.9" 285 | 286 | "@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.8.0": 287 | version "7.26.5" 288 | resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" 289 | integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== 290 | 291 | "@babel/helper-string-parser@^7.25.9": 292 | version "7.25.9" 293 | resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" 294 | integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== 295 | 296 | "@babel/helper-validator-identifier@^7.25.9": 297 | version "7.25.9" 298 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" 299 | integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== 300 | 301 | "@babel/helper-validator-option@^7.25.9": 302 | version "7.25.9" 303 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" 304 | integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== 305 | 306 | "@babel/helpers@^7.26.7": 307 | version "7.26.7" 308 | resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.26.7.tgz#fd1d2a7c431b6e39290277aacfd8367857c576a4" 309 | integrity sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A== 310 | dependencies: 311 | "@babel/template" "^7.25.9" 312 | "@babel/types" "^7.26.7" 313 | 314 | "@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.25.9", "@babel/parser@^7.26.5", "@babel/parser@^7.26.7": 315 | version "7.26.7" 316 | resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.26.7.tgz#e114cd099e5f7d17b05368678da0fb9f69b3385c" 317 | integrity sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w== 318 | dependencies: 319 | "@babel/types" "^7.26.7" 320 | 321 | "@babel/plugin-syntax-async-generators@^7.8.4": 322 | version "7.8.4" 323 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" 324 | integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== 325 | dependencies: 326 | "@babel/helper-plugin-utils" "^7.8.0" 327 | 328 | "@babel/plugin-syntax-bigint@^7.8.3": 329 | version "7.8.3" 330 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" 331 | integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== 332 | dependencies: 333 | "@babel/helper-plugin-utils" "^7.8.0" 334 | 335 | "@babel/plugin-syntax-class-properties@^7.12.13": 336 | version "7.12.13" 337 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" 338 | integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== 339 | dependencies: 340 | "@babel/helper-plugin-utils" "^7.12.13" 341 | 342 | "@babel/plugin-syntax-class-static-block@^7.14.5": 343 | version "7.14.5" 344 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" 345 | integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== 346 | dependencies: 347 | "@babel/helper-plugin-utils" "^7.14.5" 348 | 349 | "@babel/plugin-syntax-import-attributes@^7.24.7": 350 | version "7.26.0" 351 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" 352 | integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== 353 | dependencies: 354 | "@babel/helper-plugin-utils" "^7.25.9" 355 | 356 | "@babel/plugin-syntax-import-meta@^7.10.4": 357 | version "7.10.4" 358 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" 359 | integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== 360 | dependencies: 361 | "@babel/helper-plugin-utils" "^7.10.4" 362 | 363 | "@babel/plugin-syntax-json-strings@^7.8.3": 364 | version "7.8.3" 365 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" 366 | integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== 367 | dependencies: 368 | "@babel/helper-plugin-utils" "^7.8.0" 369 | 370 | "@babel/plugin-syntax-jsx@^7.7.2": 371 | version "7.25.9" 372 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" 373 | integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== 374 | dependencies: 375 | "@babel/helper-plugin-utils" "^7.25.9" 376 | 377 | "@babel/plugin-syntax-logical-assignment-operators@^7.10.4": 378 | version "7.10.4" 379 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" 380 | integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== 381 | dependencies: 382 | "@babel/helper-plugin-utils" "^7.10.4" 383 | 384 | "@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": 385 | version "7.8.3" 386 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" 387 | integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== 388 | dependencies: 389 | "@babel/helper-plugin-utils" "^7.8.0" 390 | 391 | "@babel/plugin-syntax-numeric-separator@^7.10.4": 392 | version "7.10.4" 393 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" 394 | integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== 395 | dependencies: 396 | "@babel/helper-plugin-utils" "^7.10.4" 397 | 398 | "@babel/plugin-syntax-object-rest-spread@^7.8.3": 399 | version "7.8.3" 400 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" 401 | integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== 402 | dependencies: 403 | "@babel/helper-plugin-utils" "^7.8.0" 404 | 405 | "@babel/plugin-syntax-optional-catch-binding@^7.8.3": 406 | version "7.8.3" 407 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" 408 | integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== 409 | dependencies: 410 | "@babel/helper-plugin-utils" "^7.8.0" 411 | 412 | "@babel/plugin-syntax-optional-chaining@^7.8.3": 413 | version "7.8.3" 414 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" 415 | integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== 416 | dependencies: 417 | "@babel/helper-plugin-utils" "^7.8.0" 418 | 419 | "@babel/plugin-syntax-private-property-in-object@^7.14.5": 420 | version "7.14.5" 421 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" 422 | integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== 423 | dependencies: 424 | "@babel/helper-plugin-utils" "^7.14.5" 425 | 426 | "@babel/plugin-syntax-top-level-await@^7.14.5": 427 | version "7.14.5" 428 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" 429 | integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== 430 | dependencies: 431 | "@babel/helper-plugin-utils" "^7.14.5" 432 | 433 | "@babel/plugin-syntax-typescript@^7.7.2": 434 | version "7.25.9" 435 | resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" 436 | integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== 437 | dependencies: 438 | "@babel/helper-plugin-utils" "^7.25.9" 439 | 440 | "@babel/template@^7.25.9", "@babel/template@^7.3.3": 441 | version "7.25.9" 442 | resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.25.9.tgz#ecb62d81a8a6f5dc5fe8abfc3901fc52ddf15016" 443 | integrity sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg== 444 | dependencies: 445 | "@babel/code-frame" "^7.25.9" 446 | "@babel/parser" "^7.25.9" 447 | "@babel/types" "^7.25.9" 448 | 449 | "@babel/traverse@^7.25.9", "@babel/traverse@^7.26.7": 450 | version "7.26.7" 451 | resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.26.7.tgz#99a0a136f6a75e7fb8b0a1ace421e0b25994b8bb" 452 | integrity sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA== 453 | dependencies: 454 | "@babel/code-frame" "^7.26.2" 455 | "@babel/generator" "^7.26.5" 456 | "@babel/parser" "^7.26.7" 457 | "@babel/template" "^7.25.9" 458 | "@babel/types" "^7.26.7" 459 | debug "^4.3.1" 460 | globals "^11.1.0" 461 | 462 | "@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.5", "@babel/types@^7.26.7", "@babel/types@^7.3.3": 463 | version "7.26.7" 464 | resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.26.7.tgz#5e2b89c0768e874d4d061961f3a5a153d71dc17a" 465 | integrity sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg== 466 | dependencies: 467 | "@babel/helper-string-parser" "^7.25.9" 468 | "@babel/helper-validator-identifier" "^7.25.9" 469 | 470 | "@bcoe/v8-coverage@^0.2.3": 471 | version "0.2.3" 472 | resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" 473 | integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== 474 | 475 | "@cspotcode/source-map-support@^0.8.0": 476 | version "0.8.1" 477 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" 478 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== 479 | dependencies: 480 | "@jridgewell/trace-mapping" "0.3.9" 481 | 482 | "@fastify/busboy@^2.0.0": 483 | version "2.1.1" 484 | resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.1.tgz#b9da6a878a371829a0502c9b6c1c143ef6663f4d" 485 | integrity sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA== 486 | 487 | "@istanbuljs/load-nyc-config@^1.0.0": 488 | version "1.1.0" 489 | resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" 490 | integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== 491 | dependencies: 492 | camelcase "^5.3.1" 493 | find-up "^4.1.0" 494 | get-package-type "^0.1.0" 495 | js-yaml "^3.13.1" 496 | resolve-from "^5.0.0" 497 | 498 | "@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": 499 | version "0.1.3" 500 | resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" 501 | integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== 502 | 503 | "@jest/console@^29.7.0": 504 | version "29.7.0" 505 | resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" 506 | integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== 507 | dependencies: 508 | "@jest/types" "^29.6.3" 509 | "@types/node" "*" 510 | chalk "^4.0.0" 511 | jest-message-util "^29.7.0" 512 | jest-util "^29.7.0" 513 | slash "^3.0.0" 514 | 515 | "@jest/core@^29.7.0": 516 | version "29.7.0" 517 | resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" 518 | integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== 519 | dependencies: 520 | "@jest/console" "^29.7.0" 521 | "@jest/reporters" "^29.7.0" 522 | "@jest/test-result" "^29.7.0" 523 | "@jest/transform" "^29.7.0" 524 | "@jest/types" "^29.6.3" 525 | "@types/node" "*" 526 | ansi-escapes "^4.2.1" 527 | chalk "^4.0.0" 528 | ci-info "^3.2.0" 529 | exit "^0.1.2" 530 | graceful-fs "^4.2.9" 531 | jest-changed-files "^29.7.0" 532 | jest-config "^29.7.0" 533 | jest-haste-map "^29.7.0" 534 | jest-message-util "^29.7.0" 535 | jest-regex-util "^29.6.3" 536 | jest-resolve "^29.7.0" 537 | jest-resolve-dependencies "^29.7.0" 538 | jest-runner "^29.7.0" 539 | jest-runtime "^29.7.0" 540 | jest-snapshot "^29.7.0" 541 | jest-util "^29.7.0" 542 | jest-validate "^29.7.0" 543 | jest-watcher "^29.7.0" 544 | micromatch "^4.0.4" 545 | pretty-format "^29.7.0" 546 | slash "^3.0.0" 547 | strip-ansi "^6.0.0" 548 | 549 | "@jest/environment@^29.7.0": 550 | version "29.7.0" 551 | resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" 552 | integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== 553 | dependencies: 554 | "@jest/fake-timers" "^29.7.0" 555 | "@jest/types" "^29.6.3" 556 | "@types/node" "*" 557 | jest-mock "^29.7.0" 558 | 559 | "@jest/expect-utils@^29.7.0": 560 | version "29.7.0" 561 | resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" 562 | integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== 563 | dependencies: 564 | jest-get-type "^29.6.3" 565 | 566 | "@jest/expect@^29.7.0": 567 | version "29.7.0" 568 | resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" 569 | integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== 570 | dependencies: 571 | expect "^29.7.0" 572 | jest-snapshot "^29.7.0" 573 | 574 | "@jest/fake-timers@^29.7.0": 575 | version "29.7.0" 576 | resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" 577 | integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== 578 | dependencies: 579 | "@jest/types" "^29.6.3" 580 | "@sinonjs/fake-timers" "^10.0.2" 581 | "@types/node" "*" 582 | jest-message-util "^29.7.0" 583 | jest-mock "^29.7.0" 584 | jest-util "^29.7.0" 585 | 586 | "@jest/globals@^29.7.0": 587 | version "29.7.0" 588 | resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" 589 | integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== 590 | dependencies: 591 | "@jest/environment" "^29.7.0" 592 | "@jest/expect" "^29.7.0" 593 | "@jest/types" "^29.6.3" 594 | jest-mock "^29.7.0" 595 | 596 | "@jest/reporters@^29.7.0": 597 | version "29.7.0" 598 | resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" 599 | integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== 600 | dependencies: 601 | "@bcoe/v8-coverage" "^0.2.3" 602 | "@jest/console" "^29.7.0" 603 | "@jest/test-result" "^29.7.0" 604 | "@jest/transform" "^29.7.0" 605 | "@jest/types" "^29.6.3" 606 | "@jridgewell/trace-mapping" "^0.3.18" 607 | "@types/node" "*" 608 | chalk "^4.0.0" 609 | collect-v8-coverage "^1.0.0" 610 | exit "^0.1.2" 611 | glob "^7.1.3" 612 | graceful-fs "^4.2.9" 613 | istanbul-lib-coverage "^3.0.0" 614 | istanbul-lib-instrument "^6.0.0" 615 | istanbul-lib-report "^3.0.0" 616 | istanbul-lib-source-maps "^4.0.0" 617 | istanbul-reports "^3.1.3" 618 | jest-message-util "^29.7.0" 619 | jest-util "^29.7.0" 620 | jest-worker "^29.7.0" 621 | slash "^3.0.0" 622 | string-length "^4.0.1" 623 | strip-ansi "^6.0.0" 624 | v8-to-istanbul "^9.0.1" 625 | 626 | "@jest/schemas@^29.6.3": 627 | version "29.6.3" 628 | resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" 629 | integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== 630 | dependencies: 631 | "@sinclair/typebox" "^0.27.8" 632 | 633 | "@jest/source-map@^29.6.3": 634 | version "29.6.3" 635 | resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" 636 | integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== 637 | dependencies: 638 | "@jridgewell/trace-mapping" "^0.3.18" 639 | callsites "^3.0.0" 640 | graceful-fs "^4.2.9" 641 | 642 | "@jest/test-result@^29.7.0": 643 | version "29.7.0" 644 | resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" 645 | integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== 646 | dependencies: 647 | "@jest/console" "^29.7.0" 648 | "@jest/types" "^29.6.3" 649 | "@types/istanbul-lib-coverage" "^2.0.0" 650 | collect-v8-coverage "^1.0.0" 651 | 652 | "@jest/test-sequencer@^29.7.0": 653 | version "29.7.0" 654 | resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" 655 | integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== 656 | dependencies: 657 | "@jest/test-result" "^29.7.0" 658 | graceful-fs "^4.2.9" 659 | jest-haste-map "^29.7.0" 660 | slash "^3.0.0" 661 | 662 | "@jest/transform@^29.7.0": 663 | version "29.7.0" 664 | resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" 665 | integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== 666 | dependencies: 667 | "@babel/core" "^7.11.6" 668 | "@jest/types" "^29.6.3" 669 | "@jridgewell/trace-mapping" "^0.3.18" 670 | babel-plugin-istanbul "^6.1.1" 671 | chalk "^4.0.0" 672 | convert-source-map "^2.0.0" 673 | fast-json-stable-stringify "^2.1.0" 674 | graceful-fs "^4.2.9" 675 | jest-haste-map "^29.7.0" 676 | jest-regex-util "^29.6.3" 677 | jest-util "^29.7.0" 678 | micromatch "^4.0.4" 679 | pirates "^4.0.4" 680 | slash "^3.0.0" 681 | write-file-atomic "^4.0.2" 682 | 683 | "@jest/types@^29.6.3": 684 | version "29.6.3" 685 | resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" 686 | integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== 687 | dependencies: 688 | "@jest/schemas" "^29.6.3" 689 | "@types/istanbul-lib-coverage" "^2.0.0" 690 | "@types/istanbul-reports" "^3.0.0" 691 | "@types/node" "*" 692 | "@types/yargs" "^17.0.8" 693 | chalk "^4.0.0" 694 | 695 | "@jridgewell/gen-mapping@^0.3.5": 696 | version "0.3.8" 697 | resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" 698 | integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== 699 | dependencies: 700 | "@jridgewell/set-array" "^1.2.1" 701 | "@jridgewell/sourcemap-codec" "^1.4.10" 702 | "@jridgewell/trace-mapping" "^0.3.24" 703 | 704 | "@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": 705 | version "3.1.2" 706 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" 707 | integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== 708 | 709 | "@jridgewell/set-array@^1.2.1": 710 | version "1.2.1" 711 | resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" 712 | integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== 713 | 714 | "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": 715 | version "1.5.0" 716 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" 717 | integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== 718 | 719 | "@jridgewell/trace-mapping@0.3.9": 720 | version "0.3.9" 721 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" 722 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== 723 | dependencies: 724 | "@jridgewell/resolve-uri" "^3.0.3" 725 | "@jridgewell/sourcemap-codec" "^1.4.10" 726 | 727 | "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": 728 | version "0.3.25" 729 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" 730 | integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== 731 | dependencies: 732 | "@jridgewell/resolve-uri" "^3.1.0" 733 | "@jridgewell/sourcemap-codec" "^1.4.14" 734 | 735 | "@protobuf-ts/plugin-framework@^2.9.4": 736 | version "2.9.4" 737 | resolved "https://registry.yarnpkg.com/@protobuf-ts/plugin-framework/-/plugin-framework-2.9.4.tgz#d7a617dedda4a12c568fdc1db5aa67d5e4da2406" 738 | integrity sha512-9nuX1kjdMliv+Pes8dQCKyVhjKgNNfwxVHg+tx3fLXSfZZRcUHMc1PMwB9/vTvc6gBKt9QGz5ERqSqZc0++E9A== 739 | dependencies: 740 | "@protobuf-ts/runtime" "^2.9.4" 741 | typescript "^3.9" 742 | 743 | "@protobuf-ts/plugin@^2.9.4": 744 | version "2.9.4" 745 | resolved "https://registry.yarnpkg.com/@protobuf-ts/plugin/-/plugin-2.9.4.tgz#4e593e59013aaad313e7abbabe6e61964ef0ca28" 746 | integrity sha512-Db5Laq5T3mc6ERZvhIhkj1rn57/p8gbWiCKxQWbZBBl20wMuqKoHbRw4tuD7FyXi+IkwTToaNVXymv5CY3E8Rw== 747 | dependencies: 748 | "@protobuf-ts/plugin-framework" "^2.9.4" 749 | "@protobuf-ts/protoc" "^2.9.4" 750 | "@protobuf-ts/runtime" "^2.9.4" 751 | "@protobuf-ts/runtime-rpc" "^2.9.4" 752 | typescript "^3.9" 753 | 754 | "@protobuf-ts/protoc@^2.9.4": 755 | version "2.9.4" 756 | resolved "https://registry.yarnpkg.com/@protobuf-ts/protoc/-/protoc-2.9.4.tgz#a92262ee64d252998540238701d2140f4ffec081" 757 | integrity sha512-hQX+nOhFtrA+YdAXsXEDrLoGJqXHpgv4+BueYF0S9hy/Jq0VRTVlJS1Etmf4qlMt/WdigEes5LOd/LDzui4GIQ== 758 | 759 | "@protobuf-ts/runtime-rpc@^2.9.4": 760 | version "2.9.4" 761 | resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime-rpc/-/runtime-rpc-2.9.4.tgz#d6ab2316c0ba67ce5a08863bb23203a837ff2a3b" 762 | integrity sha512-y9L9JgnZxXFqH5vD4d7j9duWvIJ7AShyBRoNKJGhu9Q27qIbchfzli66H9RvrQNIFk5ER7z1Twe059WZGqERcA== 763 | dependencies: 764 | "@protobuf-ts/runtime" "^2.9.4" 765 | 766 | "@protobuf-ts/runtime@^2.9.4": 767 | version "2.9.4" 768 | resolved "https://registry.yarnpkg.com/@protobuf-ts/runtime/-/runtime-2.9.4.tgz#db8a78b1c409e26d258ca39464f4757d804add8f" 769 | integrity sha512-vHRFWtJJB/SiogWDF0ypoKfRIZ41Kq+G9cEFj6Qm1eQaAhJ1LDFvgZ7Ja4tb3iLOQhz0PaoPnnOijF1qmEqTxg== 770 | 771 | "@sinclair/typebox@^0.27.8": 772 | version "0.27.8" 773 | resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" 774 | integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== 775 | 776 | "@sinonjs/commons@^3.0.0": 777 | version "3.0.1" 778 | resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" 779 | integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== 780 | dependencies: 781 | type-detect "4.0.8" 782 | 783 | "@sinonjs/fake-timers@^10.0.2": 784 | version "10.3.0" 785 | resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" 786 | integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== 787 | dependencies: 788 | "@sinonjs/commons" "^3.0.0" 789 | 790 | "@tsconfig/node10@^1.0.7": 791 | version "1.0.11" 792 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" 793 | integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== 794 | 795 | "@tsconfig/node12@^1.0.7": 796 | version "1.0.11" 797 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" 798 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== 799 | 800 | "@tsconfig/node14@^1.0.0": 801 | version "1.0.3" 802 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" 803 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== 804 | 805 | "@tsconfig/node16@^1.0.2": 806 | version "1.0.4" 807 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" 808 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== 809 | 810 | "@types/babel__core@^7.1.14": 811 | version "7.20.5" 812 | resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" 813 | integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== 814 | dependencies: 815 | "@babel/parser" "^7.20.7" 816 | "@babel/types" "^7.20.7" 817 | "@types/babel__generator" "*" 818 | "@types/babel__template" "*" 819 | "@types/babel__traverse" "*" 820 | 821 | "@types/babel__generator@*": 822 | version "7.6.8" 823 | resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" 824 | integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== 825 | dependencies: 826 | "@babel/types" "^7.0.0" 827 | 828 | "@types/babel__template@*": 829 | version "7.4.4" 830 | resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" 831 | integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== 832 | dependencies: 833 | "@babel/parser" "^7.1.0" 834 | "@babel/types" "^7.0.0" 835 | 836 | "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": 837 | version "7.20.6" 838 | resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" 839 | integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== 840 | dependencies: 841 | "@babel/types" "^7.20.7" 842 | 843 | "@types/graceful-fs@^4.1.3": 844 | version "4.1.9" 845 | resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" 846 | integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== 847 | dependencies: 848 | "@types/node" "*" 849 | 850 | "@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": 851 | version "2.0.6" 852 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" 853 | integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== 854 | 855 | "@types/istanbul-lib-report@*": 856 | version "3.0.3" 857 | resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" 858 | integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== 859 | dependencies: 860 | "@types/istanbul-lib-coverage" "*" 861 | 862 | "@types/istanbul-reports@^3.0.0": 863 | version "3.0.4" 864 | resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" 865 | integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== 866 | dependencies: 867 | "@types/istanbul-lib-report" "*" 868 | 869 | "@types/jest@^29.5.14": 870 | version "29.5.14" 871 | resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.14.tgz#2b910912fa1d6856cadcd0c1f95af7df1d6049e5" 872 | integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ== 873 | dependencies: 874 | expect "^29.0.0" 875 | pretty-format "^29.0.0" 876 | 877 | "@types/js-yaml@^4.0.5": 878 | version "4.0.9" 879 | resolved "https://registry.yarnpkg.com/@types/js-yaml/-/js-yaml-4.0.9.tgz#cd82382c4f902fed9691a2ed79ec68c5898af4c2" 880 | integrity sha512-k4MGaQl5TGo/iipqb2UDG2UwjXziSWkh0uysQelTlJpX1qGlpUZYm8PnO4DxG1qBomtJUdYJ6qR6xdIah10JLg== 881 | 882 | "@types/node@*", "@types/node@^22.14.1": 883 | version "22.15.30" 884 | resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.30.tgz#3a20431783e28dd0b0326f84ab386a2ec81d921d" 885 | integrity sha512-6Q7lr06bEHdlfplU6YRbgG1SFBdlsfNC4/lX+SkhiTs0cpJkOElmWls8PxDFv4yY/xKb8Y6SO0OmSX4wgqTZbA== 886 | dependencies: 887 | undici-types "~6.21.0" 888 | 889 | "@types/stack-utils@^2.0.0": 890 | version "2.0.3" 891 | resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" 892 | integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== 893 | 894 | "@types/yargs-parser@*": 895 | version "21.0.3" 896 | resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" 897 | integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== 898 | 899 | "@types/yargs@^17.0.8": 900 | version "17.0.33" 901 | resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" 902 | integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== 903 | dependencies: 904 | "@types/yargs-parser" "*" 905 | 906 | "@vercel/ncc@^0.38.3": 907 | version "0.38.3" 908 | resolved "https://registry.yarnpkg.com/@vercel/ncc/-/ncc-0.38.3.tgz#5475eeee3ac0f1a439f237596911525a490a88b5" 909 | integrity sha512-rnK6hJBS6mwc+Bkab+PGPs9OiS0i/3kdTO+CkI8V0/VrW3vmz7O2Pxjw/owOlmo6PKEIxRSeZKv/kuL9itnpYA== 910 | 911 | abort-controller@^3.0.0: 912 | version "3.0.0" 913 | resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" 914 | integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== 915 | dependencies: 916 | event-target-shim "^5.0.0" 917 | 918 | acorn-walk@^8.1.1: 919 | version "8.3.4" 920 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" 921 | integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== 922 | dependencies: 923 | acorn "^8.11.0" 924 | 925 | acorn@^8.11.0, acorn@^8.4.1: 926 | version "8.14.0" 927 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0" 928 | integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA== 929 | 930 | action-docs@^2.5.1: 931 | version "2.5.1" 932 | resolved "https://registry.yarnpkg.com/action-docs/-/action-docs-2.5.1.tgz#6ec3ab8bb5e8f33ccbc34a3d879a797c0d814baf" 933 | integrity sha512-kACC20UOsuVifAEYZAAMsm+Lpq14nWXM3FDbIUqUiu7s3KtlGSfRG5btboYIGNomZQ5coTc/UR1F5H9yRqTAEw== 934 | dependencies: 935 | chalk "^5.3.0" 936 | figlet "^1.7.0" 937 | replace-in-file "^7.1.0" 938 | showdown "^2.1.0" 939 | yaml "^2.3.4" 940 | yargs "^17.7.2" 941 | 942 | agent-base@^7.1.0, agent-base@^7.1.2: 943 | version "7.1.3" 944 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" 945 | integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== 946 | 947 | ansi-escapes@^4.2.1: 948 | version "4.3.2" 949 | resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" 950 | integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== 951 | dependencies: 952 | type-fest "^0.21.3" 953 | 954 | ansi-regex@^5.0.1: 955 | version "5.0.1" 956 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" 957 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== 958 | 959 | ansi-styles@^4.0.0, ansi-styles@^4.1.0: 960 | version "4.3.0" 961 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" 962 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== 963 | dependencies: 964 | color-convert "^2.0.1" 965 | 966 | ansi-styles@^5.0.0: 967 | version "5.2.0" 968 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" 969 | integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== 970 | 971 | anymatch@^3.0.3: 972 | version "3.1.3" 973 | resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" 974 | integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== 975 | dependencies: 976 | normalize-path "^3.0.0" 977 | picomatch "^2.0.4" 978 | 979 | arg@^4.1.0: 980 | version "4.1.3" 981 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" 982 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== 983 | 984 | argparse@^1.0.7: 985 | version "1.0.10" 986 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" 987 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== 988 | dependencies: 989 | sprintf-js "~1.0.2" 990 | 991 | argparse@^2.0.1: 992 | version "2.0.1" 993 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" 994 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== 995 | 996 | async@^3.2.3: 997 | version "3.2.6" 998 | resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" 999 | integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== 1000 | 1001 | asynckit@^0.4.0: 1002 | version "0.4.0" 1003 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" 1004 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== 1005 | 1006 | babel-jest@^29.7.0: 1007 | version "29.7.0" 1008 | resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" 1009 | integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== 1010 | dependencies: 1011 | "@jest/transform" "^29.7.0" 1012 | "@types/babel__core" "^7.1.14" 1013 | babel-plugin-istanbul "^6.1.1" 1014 | babel-preset-jest "^29.6.3" 1015 | chalk "^4.0.0" 1016 | graceful-fs "^4.2.9" 1017 | slash "^3.0.0" 1018 | 1019 | babel-plugin-istanbul@^6.1.1: 1020 | version "6.1.1" 1021 | resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" 1022 | integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== 1023 | dependencies: 1024 | "@babel/helper-plugin-utils" "^7.0.0" 1025 | "@istanbuljs/load-nyc-config" "^1.0.0" 1026 | "@istanbuljs/schema" "^0.1.2" 1027 | istanbul-lib-instrument "^5.0.4" 1028 | test-exclude "^6.0.0" 1029 | 1030 | babel-plugin-jest-hoist@^29.6.3: 1031 | version "29.6.3" 1032 | resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" 1033 | integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== 1034 | dependencies: 1035 | "@babel/template" "^7.3.3" 1036 | "@babel/types" "^7.3.3" 1037 | "@types/babel__core" "^7.1.14" 1038 | "@types/babel__traverse" "^7.0.6" 1039 | 1040 | babel-preset-current-node-syntax@^1.0.0: 1041 | version "1.1.0" 1042 | resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" 1043 | integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== 1044 | dependencies: 1045 | "@babel/plugin-syntax-async-generators" "^7.8.4" 1046 | "@babel/plugin-syntax-bigint" "^7.8.3" 1047 | "@babel/plugin-syntax-class-properties" "^7.12.13" 1048 | "@babel/plugin-syntax-class-static-block" "^7.14.5" 1049 | "@babel/plugin-syntax-import-attributes" "^7.24.7" 1050 | "@babel/plugin-syntax-import-meta" "^7.10.4" 1051 | "@babel/plugin-syntax-json-strings" "^7.8.3" 1052 | "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" 1053 | "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" 1054 | "@babel/plugin-syntax-numeric-separator" "^7.10.4" 1055 | "@babel/plugin-syntax-object-rest-spread" "^7.8.3" 1056 | "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" 1057 | "@babel/plugin-syntax-optional-chaining" "^7.8.3" 1058 | "@babel/plugin-syntax-private-property-in-object" "^7.14.5" 1059 | "@babel/plugin-syntax-top-level-await" "^7.14.5" 1060 | 1061 | babel-preset-jest@^29.6.3: 1062 | version "29.6.3" 1063 | resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" 1064 | integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== 1065 | dependencies: 1066 | babel-plugin-jest-hoist "^29.6.3" 1067 | babel-preset-current-node-syntax "^1.0.0" 1068 | 1069 | balanced-match@^1.0.0: 1070 | version "1.0.2" 1071 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" 1072 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== 1073 | 1074 | brace-expansion@^1.1.7: 1075 | version "1.1.11" 1076 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" 1077 | integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== 1078 | dependencies: 1079 | balanced-match "^1.0.0" 1080 | concat-map "0.0.1" 1081 | 1082 | brace-expansion@^2.0.1: 1083 | version "2.0.1" 1084 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" 1085 | integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== 1086 | dependencies: 1087 | balanced-match "^1.0.0" 1088 | 1089 | braces@^3.0.3: 1090 | version "3.0.3" 1091 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" 1092 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== 1093 | dependencies: 1094 | fill-range "^7.1.1" 1095 | 1096 | browserslist@^4.24.0: 1097 | version "4.24.4" 1098 | resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" 1099 | integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== 1100 | dependencies: 1101 | caniuse-lite "^1.0.30001688" 1102 | electron-to-chromium "^1.5.73" 1103 | node-releases "^2.0.19" 1104 | update-browserslist-db "^1.1.1" 1105 | 1106 | bs-logger@^0.2.6: 1107 | version "0.2.6" 1108 | resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" 1109 | integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== 1110 | dependencies: 1111 | fast-json-stable-stringify "2.x" 1112 | 1113 | bser@2.1.1: 1114 | version "2.1.1" 1115 | resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" 1116 | integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== 1117 | dependencies: 1118 | node-int64 "^0.4.0" 1119 | 1120 | buffer-from@^1.0.0: 1121 | version "1.1.2" 1122 | resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" 1123 | integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== 1124 | 1125 | callsites@^3.0.0: 1126 | version "3.1.0" 1127 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" 1128 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== 1129 | 1130 | camelcase@^5.3.1: 1131 | version "5.3.1" 1132 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" 1133 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== 1134 | 1135 | camelcase@^6.2.0: 1136 | version "6.3.0" 1137 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" 1138 | integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== 1139 | 1140 | caniuse-lite@^1.0.30001688: 1141 | version "1.0.30001697" 1142 | resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001697.tgz#040bbbb54463c4b4b3377c716b34a322d16e6fc7" 1143 | integrity sha512-GwNPlWJin8E+d7Gxq96jxM6w0w+VFeyyXRsjU58emtkYqnbwHqXm5uT2uCmO0RQE9htWknOP4xtBlLmM/gWxvQ== 1144 | 1145 | chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.2: 1146 | version "4.1.2" 1147 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" 1148 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== 1149 | dependencies: 1150 | ansi-styles "^4.1.0" 1151 | supports-color "^7.1.0" 1152 | 1153 | chalk@^5.3.0: 1154 | version "5.4.1" 1155 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" 1156 | integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== 1157 | 1158 | char-regex@^1.0.2: 1159 | version "1.0.2" 1160 | resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" 1161 | integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== 1162 | 1163 | ci-info@^3.2.0: 1164 | version "3.9.0" 1165 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" 1166 | integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== 1167 | 1168 | cjs-module-lexer@^1.0.0: 1169 | version "1.4.3" 1170 | resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" 1171 | integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== 1172 | 1173 | cliui@^8.0.1: 1174 | version "8.0.1" 1175 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" 1176 | integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== 1177 | dependencies: 1178 | string-width "^4.2.0" 1179 | strip-ansi "^6.0.1" 1180 | wrap-ansi "^7.0.0" 1181 | 1182 | co@^4.6.0: 1183 | version "4.6.0" 1184 | resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" 1185 | integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== 1186 | 1187 | collect-v8-coverage@^1.0.0: 1188 | version "1.0.2" 1189 | resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" 1190 | integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== 1191 | 1192 | color-convert@^2.0.1: 1193 | version "2.0.1" 1194 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" 1195 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== 1196 | dependencies: 1197 | color-name "~1.1.4" 1198 | 1199 | color-name@~1.1.4: 1200 | version "1.1.4" 1201 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" 1202 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== 1203 | 1204 | combined-stream@^1.0.6: 1205 | version "1.0.8" 1206 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" 1207 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== 1208 | dependencies: 1209 | delayed-stream "~1.0.0" 1210 | 1211 | commander@^9.0.0: 1212 | version "9.5.0" 1213 | resolved "https://registry.yarnpkg.com/commander/-/commander-9.5.0.tgz#bc08d1eb5cedf7ccb797a96199d41c7bc3e60d30" 1214 | integrity sha512-KRs7WVDKg86PWiuAqhDrAQnTXZKraVcCc6vFdL14qrZ/DcWwuRo7VoiYXalXO7S5GKpqYiVEwCbgFDfxNHKJBQ== 1215 | 1216 | concat-map@0.0.1: 1217 | version "0.0.1" 1218 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" 1219 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== 1220 | 1221 | convert-source-map@^2.0.0: 1222 | version "2.0.0" 1223 | resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" 1224 | integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== 1225 | 1226 | create-jest@^29.7.0: 1227 | version "29.7.0" 1228 | resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" 1229 | integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== 1230 | dependencies: 1231 | "@jest/types" "^29.6.3" 1232 | chalk "^4.0.0" 1233 | exit "^0.1.2" 1234 | graceful-fs "^4.2.9" 1235 | jest-config "^29.7.0" 1236 | jest-util "^29.7.0" 1237 | prompts "^2.0.1" 1238 | 1239 | create-require@^1.1.0: 1240 | version "1.1.1" 1241 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" 1242 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== 1243 | 1244 | cross-spawn@^7.0.3: 1245 | version "7.0.6" 1246 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" 1247 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== 1248 | dependencies: 1249 | path-key "^3.1.0" 1250 | shebang-command "^2.0.0" 1251 | which "^2.0.1" 1252 | 1253 | debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.4: 1254 | version "4.4.0" 1255 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" 1256 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== 1257 | dependencies: 1258 | ms "^2.1.3" 1259 | 1260 | dedent@^1.0.0: 1261 | version "1.5.3" 1262 | resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.3.tgz#99aee19eb9bae55a67327717b6e848d0bf777e5a" 1263 | integrity sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ== 1264 | 1265 | deepmerge@^4.2.2: 1266 | version "4.3.1" 1267 | resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" 1268 | integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== 1269 | 1270 | delayed-stream@~1.0.0: 1271 | version "1.0.0" 1272 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" 1273 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== 1274 | 1275 | detect-newline@^3.0.0: 1276 | version "3.1.0" 1277 | resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" 1278 | integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== 1279 | 1280 | diff-sequences@^29.6.3: 1281 | version "29.6.3" 1282 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" 1283 | integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== 1284 | 1285 | diff@^4.0.1: 1286 | version "4.0.2" 1287 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" 1288 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== 1289 | 1290 | ejs@^3.1.10: 1291 | version "3.1.10" 1292 | resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" 1293 | integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== 1294 | dependencies: 1295 | jake "^10.8.5" 1296 | 1297 | electron-to-chromium@^1.5.73: 1298 | version "1.5.91" 1299 | resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.91.tgz#cf5567f6853062493242133aefd4dc8dc8440abd" 1300 | integrity sha512-sNSHHyq048PFmZY4S90ax61q+gLCs0X0YmcOII9wG9S2XwbVr+h4VW2wWhnbp/Eys3cCwTxVF292W3qPaxIapQ== 1301 | 1302 | emittery@^0.13.1: 1303 | version "0.13.1" 1304 | resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" 1305 | integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== 1306 | 1307 | emoji-regex@^8.0.0: 1308 | version "8.0.0" 1309 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" 1310 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== 1311 | 1312 | error-ex@^1.3.1: 1313 | version "1.3.2" 1314 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" 1315 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== 1316 | dependencies: 1317 | is-arrayish "^0.2.1" 1318 | 1319 | escalade@^3.1.1, escalade@^3.2.0: 1320 | version "3.2.0" 1321 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" 1322 | integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== 1323 | 1324 | escape-string-regexp@^2.0.0: 1325 | version "2.0.0" 1326 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" 1327 | integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== 1328 | 1329 | esprima@^4.0.0: 1330 | version "4.0.1" 1331 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" 1332 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== 1333 | 1334 | event-target-shim@^5.0.0: 1335 | version "5.0.1" 1336 | resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" 1337 | integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== 1338 | 1339 | events@^3.0.0: 1340 | version "3.3.0" 1341 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" 1342 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== 1343 | 1344 | execa@^5.0.0: 1345 | version "5.1.1" 1346 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" 1347 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== 1348 | dependencies: 1349 | cross-spawn "^7.0.3" 1350 | get-stream "^6.0.0" 1351 | human-signals "^2.1.0" 1352 | is-stream "^2.0.0" 1353 | merge-stream "^2.0.0" 1354 | npm-run-path "^4.0.1" 1355 | onetime "^5.1.2" 1356 | signal-exit "^3.0.3" 1357 | strip-final-newline "^2.0.0" 1358 | 1359 | exit@^0.1.2: 1360 | version "0.1.2" 1361 | resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" 1362 | integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== 1363 | 1364 | expect@^29.0.0, expect@^29.7.0: 1365 | version "29.7.0" 1366 | resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" 1367 | integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== 1368 | dependencies: 1369 | "@jest/expect-utils" "^29.7.0" 1370 | jest-get-type "^29.6.3" 1371 | jest-matcher-utils "^29.7.0" 1372 | jest-message-util "^29.7.0" 1373 | jest-util "^29.7.0" 1374 | 1375 | fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.1.0: 1376 | version "2.1.0" 1377 | resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" 1378 | integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== 1379 | 1380 | fast-xml-parser@^4.4.1: 1381 | version "4.5.1" 1382 | resolved "https://registry.yarnpkg.com/fast-xml-parser/-/fast-xml-parser-4.5.1.tgz#a7e665ff79b7919100a5202f23984b6150f9b31e" 1383 | integrity sha512-y655CeyUQ+jj7KBbYMc4FG01V8ZQqjN+gDYGJ50RtfsUB8iG9AmwmwoAgeKLJdmueKKMrH1RJ7yXHTSoczdv5w== 1384 | dependencies: 1385 | strnum "^1.0.5" 1386 | 1387 | fb-watchman@^2.0.0: 1388 | version "2.0.2" 1389 | resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" 1390 | integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== 1391 | dependencies: 1392 | bser "2.1.1" 1393 | 1394 | figlet@^1.7.0: 1395 | version "1.8.0" 1396 | resolved "https://registry.yarnpkg.com/figlet/-/figlet-1.8.0.tgz#1b93c4f65f4c1a3b1135221987eee8cf8b9c0ac7" 1397 | integrity sha512-chzvGjd+Sp7KUvPHZv6EXV5Ir3Q7kYNpCr4aHrRW79qFtTefmQZNny+W1pW9kf5zeE6dikku2W50W/wAH2xWgw== 1398 | 1399 | filelist@^1.0.4: 1400 | version "1.0.4" 1401 | resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" 1402 | integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== 1403 | dependencies: 1404 | minimatch "^5.0.1" 1405 | 1406 | fill-range@^7.1.1: 1407 | version "7.1.1" 1408 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" 1409 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== 1410 | dependencies: 1411 | to-regex-range "^5.0.1" 1412 | 1413 | find-up@^4.0.0, find-up@^4.1.0: 1414 | version "4.1.0" 1415 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" 1416 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== 1417 | dependencies: 1418 | locate-path "^5.0.0" 1419 | path-exists "^4.0.0" 1420 | 1421 | form-data@^2.5.0: 1422 | version "2.5.2" 1423 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.5.2.tgz#dc653743d1de2fcc340ceea38079daf6e9069fd2" 1424 | integrity sha512-GgwY0PS7DbXqajuGf4OYlsrIu3zgxD6Vvql43IBhm6MahqA5SK/7mwhtNj2AdH2z35YR34ujJ7BN+3fFC3jP5Q== 1425 | dependencies: 1426 | asynckit "^0.4.0" 1427 | combined-stream "^1.0.6" 1428 | mime-types "^2.1.12" 1429 | safe-buffer "^5.2.1" 1430 | 1431 | fs.realpath@^1.0.0: 1432 | version "1.0.0" 1433 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" 1434 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== 1435 | 1436 | fsevents@^2.3.2: 1437 | version "2.3.3" 1438 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" 1439 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== 1440 | 1441 | function-bind@^1.1.2: 1442 | version "1.1.2" 1443 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" 1444 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== 1445 | 1446 | gensync@^1.0.0-beta.2: 1447 | version "1.0.0-beta.2" 1448 | resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" 1449 | integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== 1450 | 1451 | get-caller-file@^2.0.5: 1452 | version "2.0.5" 1453 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" 1454 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== 1455 | 1456 | get-package-type@^0.1.0: 1457 | version "0.1.0" 1458 | resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" 1459 | integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== 1460 | 1461 | get-stream@^6.0.0: 1462 | version "6.0.1" 1463 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" 1464 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== 1465 | 1466 | glob@^7.1.3, glob@^7.1.4: 1467 | version "7.2.3" 1468 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" 1469 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== 1470 | dependencies: 1471 | fs.realpath "^1.0.0" 1472 | inflight "^1.0.4" 1473 | inherits "2" 1474 | minimatch "^3.1.1" 1475 | once "^1.3.0" 1476 | path-is-absolute "^1.0.0" 1477 | 1478 | glob@^8.1.0: 1479 | version "8.1.0" 1480 | resolved "https://registry.yarnpkg.com/glob/-/glob-8.1.0.tgz#d388f656593ef708ee3e34640fdfb99a9fd1c33e" 1481 | integrity sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ== 1482 | dependencies: 1483 | fs.realpath "^1.0.0" 1484 | inflight "^1.0.4" 1485 | inherits "2" 1486 | minimatch "^5.0.1" 1487 | once "^1.3.0" 1488 | 1489 | globals@^11.1.0: 1490 | version "11.12.0" 1491 | resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" 1492 | integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== 1493 | 1494 | graceful-fs@^4.2.9: 1495 | version "4.2.11" 1496 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" 1497 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== 1498 | 1499 | has-flag@^4.0.0: 1500 | version "4.0.0" 1501 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" 1502 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== 1503 | 1504 | hasown@^2.0.2: 1505 | version "2.0.2" 1506 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" 1507 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== 1508 | dependencies: 1509 | function-bind "^1.1.2" 1510 | 1511 | html-escaper@^2.0.0: 1512 | version "2.0.2" 1513 | resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" 1514 | integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== 1515 | 1516 | http-proxy-agent@^7.0.0: 1517 | version "7.0.2" 1518 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e" 1519 | integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig== 1520 | dependencies: 1521 | agent-base "^7.1.0" 1522 | debug "^4.3.4" 1523 | 1524 | https-proxy-agent@^7.0.0: 1525 | version "7.0.6" 1526 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" 1527 | integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== 1528 | dependencies: 1529 | agent-base "^7.1.2" 1530 | debug "4" 1531 | 1532 | human-signals@^2.1.0: 1533 | version "2.1.0" 1534 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" 1535 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== 1536 | 1537 | import-local@^3.0.2: 1538 | version "3.2.0" 1539 | resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" 1540 | integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== 1541 | dependencies: 1542 | pkg-dir "^4.2.0" 1543 | resolve-cwd "^3.0.0" 1544 | 1545 | imurmurhash@^0.1.4: 1546 | version "0.1.4" 1547 | resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" 1548 | integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== 1549 | 1550 | inflight@^1.0.4: 1551 | version "1.0.6" 1552 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" 1553 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== 1554 | dependencies: 1555 | once "^1.3.0" 1556 | wrappy "1" 1557 | 1558 | inherits@2: 1559 | version "2.0.4" 1560 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" 1561 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== 1562 | 1563 | is-arrayish@^0.2.1: 1564 | version "0.2.1" 1565 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" 1566 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== 1567 | 1568 | is-core-module@^2.16.0: 1569 | version "2.16.1" 1570 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" 1571 | integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== 1572 | dependencies: 1573 | hasown "^2.0.2" 1574 | 1575 | is-fullwidth-code-point@^3.0.0: 1576 | version "3.0.0" 1577 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" 1578 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== 1579 | 1580 | is-generator-fn@^2.0.0: 1581 | version "2.1.0" 1582 | resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" 1583 | integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== 1584 | 1585 | is-number@^7.0.0: 1586 | version "7.0.0" 1587 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" 1588 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== 1589 | 1590 | is-stream@^2.0.0: 1591 | version "2.0.1" 1592 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" 1593 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== 1594 | 1595 | isexe@^2.0.0: 1596 | version "2.0.0" 1597 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" 1598 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== 1599 | 1600 | istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: 1601 | version "3.2.2" 1602 | resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" 1603 | integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== 1604 | 1605 | istanbul-lib-instrument@^5.0.4: 1606 | version "5.2.1" 1607 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" 1608 | integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== 1609 | dependencies: 1610 | "@babel/core" "^7.12.3" 1611 | "@babel/parser" "^7.14.7" 1612 | "@istanbuljs/schema" "^0.1.2" 1613 | istanbul-lib-coverage "^3.2.0" 1614 | semver "^6.3.0" 1615 | 1616 | istanbul-lib-instrument@^6.0.0: 1617 | version "6.0.3" 1618 | resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" 1619 | integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== 1620 | dependencies: 1621 | "@babel/core" "^7.23.9" 1622 | "@babel/parser" "^7.23.9" 1623 | "@istanbuljs/schema" "^0.1.3" 1624 | istanbul-lib-coverage "^3.2.0" 1625 | semver "^7.5.4" 1626 | 1627 | istanbul-lib-report@^3.0.0: 1628 | version "3.0.1" 1629 | resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" 1630 | integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== 1631 | dependencies: 1632 | istanbul-lib-coverage "^3.0.0" 1633 | make-dir "^4.0.0" 1634 | supports-color "^7.1.0" 1635 | 1636 | istanbul-lib-source-maps@^4.0.0: 1637 | version "4.0.1" 1638 | resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" 1639 | integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== 1640 | dependencies: 1641 | debug "^4.1.1" 1642 | istanbul-lib-coverage "^3.0.0" 1643 | source-map "^0.6.1" 1644 | 1645 | istanbul-reports@^3.1.3: 1646 | version "3.1.7" 1647 | resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" 1648 | integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== 1649 | dependencies: 1650 | html-escaper "^2.0.0" 1651 | istanbul-lib-report "^3.0.0" 1652 | 1653 | jake@^10.8.5: 1654 | version "10.9.2" 1655 | resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" 1656 | integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== 1657 | dependencies: 1658 | async "^3.2.3" 1659 | chalk "^4.0.2" 1660 | filelist "^1.0.4" 1661 | minimatch "^3.1.2" 1662 | 1663 | jest-changed-files@^29.7.0: 1664 | version "29.7.0" 1665 | resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" 1666 | integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== 1667 | dependencies: 1668 | execa "^5.0.0" 1669 | jest-util "^29.7.0" 1670 | p-limit "^3.1.0" 1671 | 1672 | jest-circus@^29.7.0: 1673 | version "29.7.0" 1674 | resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" 1675 | integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== 1676 | dependencies: 1677 | "@jest/environment" "^29.7.0" 1678 | "@jest/expect" "^29.7.0" 1679 | "@jest/test-result" "^29.7.0" 1680 | "@jest/types" "^29.6.3" 1681 | "@types/node" "*" 1682 | chalk "^4.0.0" 1683 | co "^4.6.0" 1684 | dedent "^1.0.0" 1685 | is-generator-fn "^2.0.0" 1686 | jest-each "^29.7.0" 1687 | jest-matcher-utils "^29.7.0" 1688 | jest-message-util "^29.7.0" 1689 | jest-runtime "^29.7.0" 1690 | jest-snapshot "^29.7.0" 1691 | jest-util "^29.7.0" 1692 | p-limit "^3.1.0" 1693 | pretty-format "^29.7.0" 1694 | pure-rand "^6.0.0" 1695 | slash "^3.0.0" 1696 | stack-utils "^2.0.3" 1697 | 1698 | jest-cli@^29.7.0: 1699 | version "29.7.0" 1700 | resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" 1701 | integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== 1702 | dependencies: 1703 | "@jest/core" "^29.7.0" 1704 | "@jest/test-result" "^29.7.0" 1705 | "@jest/types" "^29.6.3" 1706 | chalk "^4.0.0" 1707 | create-jest "^29.7.0" 1708 | exit "^0.1.2" 1709 | import-local "^3.0.2" 1710 | jest-config "^29.7.0" 1711 | jest-util "^29.7.0" 1712 | jest-validate "^29.7.0" 1713 | yargs "^17.3.1" 1714 | 1715 | jest-config@^29.7.0: 1716 | version "29.7.0" 1717 | resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" 1718 | integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== 1719 | dependencies: 1720 | "@babel/core" "^7.11.6" 1721 | "@jest/test-sequencer" "^29.7.0" 1722 | "@jest/types" "^29.6.3" 1723 | babel-jest "^29.7.0" 1724 | chalk "^4.0.0" 1725 | ci-info "^3.2.0" 1726 | deepmerge "^4.2.2" 1727 | glob "^7.1.3" 1728 | graceful-fs "^4.2.9" 1729 | jest-circus "^29.7.0" 1730 | jest-environment-node "^29.7.0" 1731 | jest-get-type "^29.6.3" 1732 | jest-regex-util "^29.6.3" 1733 | jest-resolve "^29.7.0" 1734 | jest-runner "^29.7.0" 1735 | jest-util "^29.7.0" 1736 | jest-validate "^29.7.0" 1737 | micromatch "^4.0.4" 1738 | parse-json "^5.2.0" 1739 | pretty-format "^29.7.0" 1740 | slash "^3.0.0" 1741 | strip-json-comments "^3.1.1" 1742 | 1743 | jest-diff@^29.7.0: 1744 | version "29.7.0" 1745 | resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" 1746 | integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== 1747 | dependencies: 1748 | chalk "^4.0.0" 1749 | diff-sequences "^29.6.3" 1750 | jest-get-type "^29.6.3" 1751 | pretty-format "^29.7.0" 1752 | 1753 | jest-docblock@^29.7.0: 1754 | version "29.7.0" 1755 | resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" 1756 | integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== 1757 | dependencies: 1758 | detect-newline "^3.0.0" 1759 | 1760 | jest-each@^29.7.0: 1761 | version "29.7.0" 1762 | resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" 1763 | integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== 1764 | dependencies: 1765 | "@jest/types" "^29.6.3" 1766 | chalk "^4.0.0" 1767 | jest-get-type "^29.6.3" 1768 | jest-util "^29.7.0" 1769 | pretty-format "^29.7.0" 1770 | 1771 | jest-environment-node@^29.7.0: 1772 | version "29.7.0" 1773 | resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" 1774 | integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== 1775 | dependencies: 1776 | "@jest/environment" "^29.7.0" 1777 | "@jest/fake-timers" "^29.7.0" 1778 | "@jest/types" "^29.6.3" 1779 | "@types/node" "*" 1780 | jest-mock "^29.7.0" 1781 | jest-util "^29.7.0" 1782 | 1783 | jest-get-type@^29.6.3: 1784 | version "29.6.3" 1785 | resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" 1786 | integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== 1787 | 1788 | jest-haste-map@^29.7.0: 1789 | version "29.7.0" 1790 | resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" 1791 | integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== 1792 | dependencies: 1793 | "@jest/types" "^29.6.3" 1794 | "@types/graceful-fs" "^4.1.3" 1795 | "@types/node" "*" 1796 | anymatch "^3.0.3" 1797 | fb-watchman "^2.0.0" 1798 | graceful-fs "^4.2.9" 1799 | jest-regex-util "^29.6.3" 1800 | jest-util "^29.7.0" 1801 | jest-worker "^29.7.0" 1802 | micromatch "^4.0.4" 1803 | walker "^1.0.8" 1804 | optionalDependencies: 1805 | fsevents "^2.3.2" 1806 | 1807 | jest-leak-detector@^29.7.0: 1808 | version "29.7.0" 1809 | resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" 1810 | integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== 1811 | dependencies: 1812 | jest-get-type "^29.6.3" 1813 | pretty-format "^29.7.0" 1814 | 1815 | jest-matcher-utils@^29.7.0: 1816 | version "29.7.0" 1817 | resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" 1818 | integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== 1819 | dependencies: 1820 | chalk "^4.0.0" 1821 | jest-diff "^29.7.0" 1822 | jest-get-type "^29.6.3" 1823 | pretty-format "^29.7.0" 1824 | 1825 | jest-message-util@^29.7.0: 1826 | version "29.7.0" 1827 | resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" 1828 | integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== 1829 | dependencies: 1830 | "@babel/code-frame" "^7.12.13" 1831 | "@jest/types" "^29.6.3" 1832 | "@types/stack-utils" "^2.0.0" 1833 | chalk "^4.0.0" 1834 | graceful-fs "^4.2.9" 1835 | micromatch "^4.0.4" 1836 | pretty-format "^29.7.0" 1837 | slash "^3.0.0" 1838 | stack-utils "^2.0.3" 1839 | 1840 | jest-mock@^29.7.0: 1841 | version "29.7.0" 1842 | resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" 1843 | integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== 1844 | dependencies: 1845 | "@jest/types" "^29.6.3" 1846 | "@types/node" "*" 1847 | jest-util "^29.7.0" 1848 | 1849 | jest-pnp-resolver@^1.2.2: 1850 | version "1.2.3" 1851 | resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" 1852 | integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== 1853 | 1854 | jest-regex-util@^29.6.3: 1855 | version "29.6.3" 1856 | resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" 1857 | integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== 1858 | 1859 | jest-resolve-dependencies@^29.7.0: 1860 | version "29.7.0" 1861 | resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" 1862 | integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== 1863 | dependencies: 1864 | jest-regex-util "^29.6.3" 1865 | jest-snapshot "^29.7.0" 1866 | 1867 | jest-resolve@^29.7.0: 1868 | version "29.7.0" 1869 | resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" 1870 | integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== 1871 | dependencies: 1872 | chalk "^4.0.0" 1873 | graceful-fs "^4.2.9" 1874 | jest-haste-map "^29.7.0" 1875 | jest-pnp-resolver "^1.2.2" 1876 | jest-util "^29.7.0" 1877 | jest-validate "^29.7.0" 1878 | resolve "^1.20.0" 1879 | resolve.exports "^2.0.0" 1880 | slash "^3.0.0" 1881 | 1882 | jest-runner@^29.7.0: 1883 | version "29.7.0" 1884 | resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" 1885 | integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== 1886 | dependencies: 1887 | "@jest/console" "^29.7.0" 1888 | "@jest/environment" "^29.7.0" 1889 | "@jest/test-result" "^29.7.0" 1890 | "@jest/transform" "^29.7.0" 1891 | "@jest/types" "^29.6.3" 1892 | "@types/node" "*" 1893 | chalk "^4.0.0" 1894 | emittery "^0.13.1" 1895 | graceful-fs "^4.2.9" 1896 | jest-docblock "^29.7.0" 1897 | jest-environment-node "^29.7.0" 1898 | jest-haste-map "^29.7.0" 1899 | jest-leak-detector "^29.7.0" 1900 | jest-message-util "^29.7.0" 1901 | jest-resolve "^29.7.0" 1902 | jest-runtime "^29.7.0" 1903 | jest-util "^29.7.0" 1904 | jest-watcher "^29.7.0" 1905 | jest-worker "^29.7.0" 1906 | p-limit "^3.1.0" 1907 | source-map-support "0.5.13" 1908 | 1909 | jest-runtime@^29.7.0: 1910 | version "29.7.0" 1911 | resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" 1912 | integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== 1913 | dependencies: 1914 | "@jest/environment" "^29.7.0" 1915 | "@jest/fake-timers" "^29.7.0" 1916 | "@jest/globals" "^29.7.0" 1917 | "@jest/source-map" "^29.6.3" 1918 | "@jest/test-result" "^29.7.0" 1919 | "@jest/transform" "^29.7.0" 1920 | "@jest/types" "^29.6.3" 1921 | "@types/node" "*" 1922 | chalk "^4.0.0" 1923 | cjs-module-lexer "^1.0.0" 1924 | collect-v8-coverage "^1.0.0" 1925 | glob "^7.1.3" 1926 | graceful-fs "^4.2.9" 1927 | jest-haste-map "^29.7.0" 1928 | jest-message-util "^29.7.0" 1929 | jest-mock "^29.7.0" 1930 | jest-regex-util "^29.6.3" 1931 | jest-resolve "^29.7.0" 1932 | jest-snapshot "^29.7.0" 1933 | jest-util "^29.7.0" 1934 | slash "^3.0.0" 1935 | strip-bom "^4.0.0" 1936 | 1937 | jest-snapshot@^29.7.0: 1938 | version "29.7.0" 1939 | resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" 1940 | integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== 1941 | dependencies: 1942 | "@babel/core" "^7.11.6" 1943 | "@babel/generator" "^7.7.2" 1944 | "@babel/plugin-syntax-jsx" "^7.7.2" 1945 | "@babel/plugin-syntax-typescript" "^7.7.2" 1946 | "@babel/types" "^7.3.3" 1947 | "@jest/expect-utils" "^29.7.0" 1948 | "@jest/transform" "^29.7.0" 1949 | "@jest/types" "^29.6.3" 1950 | babel-preset-current-node-syntax "^1.0.0" 1951 | chalk "^4.0.0" 1952 | expect "^29.7.0" 1953 | graceful-fs "^4.2.9" 1954 | jest-diff "^29.7.0" 1955 | jest-get-type "^29.6.3" 1956 | jest-matcher-utils "^29.7.0" 1957 | jest-message-util "^29.7.0" 1958 | jest-util "^29.7.0" 1959 | natural-compare "^1.4.0" 1960 | pretty-format "^29.7.0" 1961 | semver "^7.5.3" 1962 | 1963 | jest-util@^29.0.0, jest-util@^29.7.0: 1964 | version "29.7.0" 1965 | resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" 1966 | integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== 1967 | dependencies: 1968 | "@jest/types" "^29.6.3" 1969 | "@types/node" "*" 1970 | chalk "^4.0.0" 1971 | ci-info "^3.2.0" 1972 | graceful-fs "^4.2.9" 1973 | picomatch "^2.2.3" 1974 | 1975 | jest-validate@^29.7.0: 1976 | version "29.7.0" 1977 | resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" 1978 | integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== 1979 | dependencies: 1980 | "@jest/types" "^29.6.3" 1981 | camelcase "^6.2.0" 1982 | chalk "^4.0.0" 1983 | jest-get-type "^29.6.3" 1984 | leven "^3.1.0" 1985 | pretty-format "^29.7.0" 1986 | 1987 | jest-watcher@^29.7.0: 1988 | version "29.7.0" 1989 | resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" 1990 | integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== 1991 | dependencies: 1992 | "@jest/test-result" "^29.7.0" 1993 | "@jest/types" "^29.6.3" 1994 | "@types/node" "*" 1995 | ansi-escapes "^4.2.1" 1996 | chalk "^4.0.0" 1997 | emittery "^0.13.1" 1998 | jest-util "^29.7.0" 1999 | string-length "^4.0.1" 2000 | 2001 | jest-worker@^29.7.0: 2002 | version "29.7.0" 2003 | resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" 2004 | integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== 2005 | dependencies: 2006 | "@types/node" "*" 2007 | jest-util "^29.7.0" 2008 | merge-stream "^2.0.0" 2009 | supports-color "^8.0.0" 2010 | 2011 | jest@^29.7.0: 2012 | version "29.7.0" 2013 | resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" 2014 | integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== 2015 | dependencies: 2016 | "@jest/core" "^29.7.0" 2017 | "@jest/types" "^29.6.3" 2018 | import-local "^3.0.2" 2019 | jest-cli "^29.7.0" 2020 | 2021 | js-tokens@^4.0.0: 2022 | version "4.0.0" 2023 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" 2024 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== 2025 | 2026 | js-yaml@^3.13.1: 2027 | version "3.14.1" 2028 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" 2029 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== 2030 | dependencies: 2031 | argparse "^1.0.7" 2032 | esprima "^4.0.0" 2033 | 2034 | js-yaml@^4.1.0: 2035 | version "4.1.0" 2036 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" 2037 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== 2038 | dependencies: 2039 | argparse "^2.0.1" 2040 | 2041 | jsesc@^3.0.2: 2042 | version "3.1.0" 2043 | resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" 2044 | integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== 2045 | 2046 | json-parse-even-better-errors@^2.3.0: 2047 | version "2.3.1" 2048 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" 2049 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== 2050 | 2051 | json5@^2.2.3: 2052 | version "2.2.3" 2053 | resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" 2054 | integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== 2055 | 2056 | kleur@^3.0.3: 2057 | version "3.0.3" 2058 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" 2059 | integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== 2060 | 2061 | leven@^3.1.0: 2062 | version "3.1.0" 2063 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" 2064 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== 2065 | 2066 | lines-and-columns@^1.1.6: 2067 | version "1.2.4" 2068 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" 2069 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== 2070 | 2071 | locate-path@^5.0.0: 2072 | version "5.0.0" 2073 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" 2074 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== 2075 | dependencies: 2076 | p-locate "^4.1.0" 2077 | 2078 | lodash.memoize@^4.1.2: 2079 | version "4.1.2" 2080 | resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" 2081 | integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== 2082 | 2083 | lru-cache@^5.1.1: 2084 | version "5.1.1" 2085 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" 2086 | integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== 2087 | dependencies: 2088 | yallist "^3.0.2" 2089 | 2090 | make-dir@^4.0.0: 2091 | version "4.0.0" 2092 | resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" 2093 | integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== 2094 | dependencies: 2095 | semver "^7.5.3" 2096 | 2097 | make-error@^1.1.1, make-error@^1.3.6: 2098 | version "1.3.6" 2099 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" 2100 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== 2101 | 2102 | makeerror@1.0.12: 2103 | version "1.0.12" 2104 | resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" 2105 | integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== 2106 | dependencies: 2107 | tmpl "1.0.5" 2108 | 2109 | merge-stream@^2.0.0: 2110 | version "2.0.0" 2111 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" 2112 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== 2113 | 2114 | micromatch@^4.0.4: 2115 | version "4.0.8" 2116 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" 2117 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== 2118 | dependencies: 2119 | braces "^3.0.3" 2120 | picomatch "^2.3.1" 2121 | 2122 | mime-db@1.52.0: 2123 | version "1.52.0" 2124 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" 2125 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== 2126 | 2127 | mime-types@^2.1.12: 2128 | version "2.1.35" 2129 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" 2130 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== 2131 | dependencies: 2132 | mime-db "1.52.0" 2133 | 2134 | mimic-fn@^2.1.0: 2135 | version "2.1.0" 2136 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" 2137 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== 2138 | 2139 | minimatch@^3.0.4, minimatch@^3.1.1, minimatch@^3.1.2: 2140 | version "3.1.2" 2141 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" 2142 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== 2143 | dependencies: 2144 | brace-expansion "^1.1.7" 2145 | 2146 | minimatch@^5.0.1: 2147 | version "5.1.6" 2148 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" 2149 | integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== 2150 | dependencies: 2151 | brace-expansion "^2.0.1" 2152 | 2153 | ms@^2.1.3: 2154 | version "2.1.3" 2155 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" 2156 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== 2157 | 2158 | natural-compare@^1.4.0: 2159 | version "1.4.0" 2160 | resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" 2161 | integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== 2162 | 2163 | node-fetch@^2.6.7: 2164 | version "2.7.0" 2165 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" 2166 | integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== 2167 | dependencies: 2168 | whatwg-url "^5.0.0" 2169 | 2170 | node-int64@^0.4.0: 2171 | version "0.4.0" 2172 | resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" 2173 | integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== 2174 | 2175 | node-releases@^2.0.19: 2176 | version "2.0.19" 2177 | resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" 2178 | integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== 2179 | 2180 | normalize-path@^3.0.0: 2181 | version "3.0.0" 2182 | resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" 2183 | integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== 2184 | 2185 | npm-run-path@^4.0.1: 2186 | version "4.0.1" 2187 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" 2188 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== 2189 | dependencies: 2190 | path-key "^3.0.0" 2191 | 2192 | once@^1.3.0: 2193 | version "1.4.0" 2194 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" 2195 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== 2196 | dependencies: 2197 | wrappy "1" 2198 | 2199 | onetime@^5.1.2: 2200 | version "5.1.2" 2201 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" 2202 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== 2203 | dependencies: 2204 | mimic-fn "^2.1.0" 2205 | 2206 | p-limit@^2.2.0: 2207 | version "2.3.0" 2208 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" 2209 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== 2210 | dependencies: 2211 | p-try "^2.0.0" 2212 | 2213 | p-limit@^3.1.0: 2214 | version "3.1.0" 2215 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" 2216 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== 2217 | dependencies: 2218 | yocto-queue "^0.1.0" 2219 | 2220 | p-locate@^4.1.0: 2221 | version "4.1.0" 2222 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" 2223 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== 2224 | dependencies: 2225 | p-limit "^2.2.0" 2226 | 2227 | p-try@^2.0.0: 2228 | version "2.2.0" 2229 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" 2230 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== 2231 | 2232 | parse-json@^5.2.0: 2233 | version "5.2.0" 2234 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" 2235 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== 2236 | dependencies: 2237 | "@babel/code-frame" "^7.0.0" 2238 | error-ex "^1.3.1" 2239 | json-parse-even-better-errors "^2.3.0" 2240 | lines-and-columns "^1.1.6" 2241 | 2242 | path-exists@^4.0.0: 2243 | version "4.0.0" 2244 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" 2245 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== 2246 | 2247 | path-is-absolute@^1.0.0: 2248 | version "1.0.1" 2249 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" 2250 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== 2251 | 2252 | path-key@^3.0.0, path-key@^3.1.0: 2253 | version "3.1.1" 2254 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" 2255 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== 2256 | 2257 | path-parse@^1.0.7: 2258 | version "1.0.7" 2259 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" 2260 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== 2261 | 2262 | picocolors@^1.0.0, picocolors@^1.1.1: 2263 | version "1.1.1" 2264 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" 2265 | integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== 2266 | 2267 | picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: 2268 | version "2.3.1" 2269 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" 2270 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== 2271 | 2272 | pirates@^4.0.4: 2273 | version "4.0.6" 2274 | resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" 2275 | integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== 2276 | 2277 | pkg-dir@^4.2.0: 2278 | version "4.2.0" 2279 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" 2280 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== 2281 | dependencies: 2282 | find-up "^4.0.0" 2283 | 2284 | prettier@^3.5.3: 2285 | version "3.5.3" 2286 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" 2287 | integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== 2288 | 2289 | pretty-format@^29.0.0, pretty-format@^29.7.0: 2290 | version "29.7.0" 2291 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" 2292 | integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== 2293 | dependencies: 2294 | "@jest/schemas" "^29.6.3" 2295 | ansi-styles "^5.0.0" 2296 | react-is "^18.0.0" 2297 | 2298 | prompts@^2.0.1: 2299 | version "2.4.2" 2300 | resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" 2301 | integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== 2302 | dependencies: 2303 | kleur "^3.0.3" 2304 | sisteransi "^1.0.5" 2305 | 2306 | pure-rand@^6.0.0: 2307 | version "6.1.0" 2308 | resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" 2309 | integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== 2310 | 2311 | react-is@^18.0.0: 2312 | version "18.3.1" 2313 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" 2314 | integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== 2315 | 2316 | replace-in-file@^7.1.0: 2317 | version "7.2.0" 2318 | resolved "https://registry.yarnpkg.com/replace-in-file/-/replace-in-file-7.2.0.tgz#bd66f97202ae2196fc9126d3bceab1dda68b7cc2" 2319 | integrity sha512-CiLXVop3o8/h2Kd1PwKPPimmS9wUV0Ki6Fl8+1ITD35nB3Gl/PrW5IONpTE0AXk0z4v8WYcpEpdeZqMXvSnWpg== 2320 | dependencies: 2321 | chalk "^4.1.2" 2322 | glob "^8.1.0" 2323 | yargs "^17.7.2" 2324 | 2325 | require-directory@^2.1.1: 2326 | version "2.1.1" 2327 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" 2328 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== 2329 | 2330 | resolve-cwd@^3.0.0: 2331 | version "3.0.0" 2332 | resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" 2333 | integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== 2334 | dependencies: 2335 | resolve-from "^5.0.0" 2336 | 2337 | resolve-from@^5.0.0: 2338 | version "5.0.0" 2339 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" 2340 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== 2341 | 2342 | resolve.exports@^2.0.0: 2343 | version "2.0.3" 2344 | resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" 2345 | integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== 2346 | 2347 | resolve@^1.20.0: 2348 | version "1.22.10" 2349 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" 2350 | integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== 2351 | dependencies: 2352 | is-core-module "^2.16.0" 2353 | path-parse "^1.0.7" 2354 | supports-preserve-symlinks-flag "^1.0.0" 2355 | 2356 | safe-buffer@^5.2.1: 2357 | version "5.2.1" 2358 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" 2359 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== 2360 | 2361 | sax@>=0.6.0: 2362 | version "1.4.1" 2363 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f" 2364 | integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg== 2365 | 2366 | semver@^6.3.0, semver@^6.3.1: 2367 | version "6.3.1" 2368 | resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" 2369 | integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== 2370 | 2371 | semver@^7.5.3, semver@^7.5.4: 2372 | version "7.7.1" 2373 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" 2374 | integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== 2375 | 2376 | semver@^7.7.2: 2377 | version "7.7.2" 2378 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.2.tgz#67d99fdcd35cec21e6f8b87a7fd515a33f982b58" 2379 | integrity sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA== 2380 | 2381 | shebang-command@^2.0.0: 2382 | version "2.0.0" 2383 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" 2384 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== 2385 | dependencies: 2386 | shebang-regex "^3.0.0" 2387 | 2388 | shebang-regex@^3.0.0: 2389 | version "3.0.0" 2390 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" 2391 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== 2392 | 2393 | shellwords-ts@^3.0.1: 2394 | version "3.0.1" 2395 | resolved "https://registry.yarnpkg.com/shellwords-ts/-/shellwords-ts-3.0.1.tgz#7c2ed81ea6d0804705a95a5625682363972600e2" 2396 | integrity sha512-GabK4ApLMqHFRGlpgNqg8dmtHTnYHt0WUUJkIeMd3QaDrUUBEDXHSSNi3I0PzMimg8W+I0EN4TshQxsnHv1cwg== 2397 | 2398 | showdown@^2.1.0: 2399 | version "2.1.0" 2400 | resolved "https://registry.yarnpkg.com/showdown/-/showdown-2.1.0.tgz#1251f5ed8f773f0c0c7bfc8e6fd23581f9e545c5" 2401 | integrity sha512-/6NVYu4U819R2pUIk79n67SYgJHWCce0a5xTP979WbNp0FL9MN1I1QK662IDU1b6JzKTvmhgI7T7JYIxBi3kMQ== 2402 | dependencies: 2403 | commander "^9.0.0" 2404 | 2405 | signal-exit@^3.0.3, signal-exit@^3.0.7: 2406 | version "3.0.7" 2407 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" 2408 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== 2409 | 2410 | sisteransi@^1.0.5: 2411 | version "1.0.5" 2412 | resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" 2413 | integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== 2414 | 2415 | slash@^3.0.0: 2416 | version "3.0.0" 2417 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" 2418 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== 2419 | 2420 | source-map-support@0.5.13: 2421 | version "0.5.13" 2422 | resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" 2423 | integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== 2424 | dependencies: 2425 | buffer-from "^1.0.0" 2426 | source-map "^0.6.0" 2427 | 2428 | source-map@^0.6.0, source-map@^0.6.1: 2429 | version "0.6.1" 2430 | resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" 2431 | integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== 2432 | 2433 | sprintf-js@~1.0.2: 2434 | version "1.0.3" 2435 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" 2436 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== 2437 | 2438 | stack-utils@^2.0.3: 2439 | version "2.0.6" 2440 | resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" 2441 | integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== 2442 | dependencies: 2443 | escape-string-regexp "^2.0.0" 2444 | 2445 | string-length@^4.0.1: 2446 | version "4.0.2" 2447 | resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" 2448 | integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== 2449 | dependencies: 2450 | char-regex "^1.0.2" 2451 | strip-ansi "^6.0.0" 2452 | 2453 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: 2454 | version "4.2.3" 2455 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" 2456 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== 2457 | dependencies: 2458 | emoji-regex "^8.0.0" 2459 | is-fullwidth-code-point "^3.0.0" 2460 | strip-ansi "^6.0.1" 2461 | 2462 | strip-ansi@^6.0.0, strip-ansi@^6.0.1: 2463 | version "6.0.1" 2464 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" 2465 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== 2466 | dependencies: 2467 | ansi-regex "^5.0.1" 2468 | 2469 | strip-bom@^4.0.0: 2470 | version "4.0.0" 2471 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" 2472 | integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== 2473 | 2474 | strip-final-newline@^2.0.0: 2475 | version "2.0.0" 2476 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" 2477 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== 2478 | 2479 | strip-json-comments@^3.1.1: 2480 | version "3.1.1" 2481 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" 2482 | integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== 2483 | 2484 | strnum@^1.0.5: 2485 | version "1.0.5" 2486 | resolved "https://registry.yarnpkg.com/strnum/-/strnum-1.0.5.tgz#5c4e829fe15ad4ff0d20c3db5ac97b73c9b072db" 2487 | integrity sha512-J8bbNyKKXl5qYcR36TIO8W3mVGVHrmmxsd5PAItGkmyzwJvybiw2IVq5nqd0i4LSNSkB/sx9VHllbfFdr9k1JA== 2488 | 2489 | supports-color@^7.1.0: 2490 | version "7.2.0" 2491 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" 2492 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== 2493 | dependencies: 2494 | has-flag "^4.0.0" 2495 | 2496 | supports-color@^8.0.0: 2497 | version "8.1.1" 2498 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" 2499 | integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== 2500 | dependencies: 2501 | has-flag "^4.0.0" 2502 | 2503 | supports-preserve-symlinks-flag@^1.0.0: 2504 | version "1.0.0" 2505 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" 2506 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== 2507 | 2508 | test-exclude@^6.0.0: 2509 | version "6.0.0" 2510 | resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" 2511 | integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== 2512 | dependencies: 2513 | "@istanbuljs/schema" "^0.1.2" 2514 | glob "^7.1.4" 2515 | minimatch "^3.0.4" 2516 | 2517 | tmpl@1.0.5: 2518 | version "1.0.5" 2519 | resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" 2520 | integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== 2521 | 2522 | to-regex-range@^5.0.1: 2523 | version "5.0.1" 2524 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" 2525 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== 2526 | dependencies: 2527 | is-number "^7.0.0" 2528 | 2529 | tr46@~0.0.3: 2530 | version "0.0.3" 2531 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" 2532 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== 2533 | 2534 | ts-jest@^29.3.2: 2535 | version "29.3.4" 2536 | resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.3.4.tgz#9354472aceae1d3867a80e8e02014ea5901aee41" 2537 | integrity sha512-Iqbrm8IXOmV+ggWHOTEbjwyCf2xZlUMv5npExksXohL+tk8va4Fjhb+X2+Rt9NBmgO7bJ8WpnMLOwih/DnMlFA== 2538 | dependencies: 2539 | bs-logger "^0.2.6" 2540 | ejs "^3.1.10" 2541 | fast-json-stable-stringify "^2.1.0" 2542 | jest-util "^29.0.0" 2543 | json5 "^2.2.3" 2544 | lodash.memoize "^4.1.2" 2545 | make-error "^1.3.6" 2546 | semver "^7.7.2" 2547 | type-fest "^4.41.0" 2548 | yargs-parser "^21.1.1" 2549 | 2550 | ts-node@^10.9.2: 2551 | version "10.9.2" 2552 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" 2553 | integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== 2554 | dependencies: 2555 | "@cspotcode/source-map-support" "^0.8.0" 2556 | "@tsconfig/node10" "^1.0.7" 2557 | "@tsconfig/node12" "^1.0.7" 2558 | "@tsconfig/node14" "^1.0.0" 2559 | "@tsconfig/node16" "^1.0.2" 2560 | acorn "^8.4.1" 2561 | acorn-walk "^8.1.1" 2562 | arg "^4.1.0" 2563 | create-require "^1.1.0" 2564 | diff "^4.0.1" 2565 | make-error "^1.1.1" 2566 | v8-compile-cache-lib "^3.0.1" 2567 | yn "3.1.1" 2568 | 2569 | tslib@^1.10.0: 2570 | version "1.14.1" 2571 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" 2572 | integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== 2573 | 2574 | tslib@^2.2.0, tslib@^2.6.2: 2575 | version "2.8.1" 2576 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" 2577 | integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== 2578 | 2579 | tunnel@0.0.6, tunnel@^0.0.6: 2580 | version "0.0.6" 2581 | resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" 2582 | integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== 2583 | 2584 | type-detect@4.0.8: 2585 | version "4.0.8" 2586 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" 2587 | integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== 2588 | 2589 | type-fest@^0.21.3: 2590 | version "0.21.3" 2591 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" 2592 | integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== 2593 | 2594 | type-fest@^4.41.0: 2595 | version "4.41.0" 2596 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-4.41.0.tgz#6ae1c8e5731273c2bf1f58ad39cbae2c91a46c58" 2597 | integrity sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA== 2598 | 2599 | typescript@^3.9: 2600 | version "3.9.10" 2601 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.9.10.tgz#70f3910ac7a51ed6bef79da7800690b19bf778b8" 2602 | integrity sha512-w6fIxVE/H1PkLKcCPsFqKE7Kv7QUwhU8qQY2MueZXWx5cPZdwFupLgKK3vntcK98BtNHZtAF4LA/yl2a7k8R6Q== 2603 | 2604 | typescript@^5.8.3: 2605 | version "5.8.3" 2606 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" 2607 | integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== 2608 | 2609 | undici-types@~6.21.0: 2610 | version "6.21.0" 2611 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" 2612 | integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== 2613 | 2614 | undici@^5.25.4: 2615 | version "5.29.0" 2616 | resolved "https://registry.yarnpkg.com/undici/-/undici-5.29.0.tgz#419595449ae3f2cdcba3580a2e8903399bd1f5a3" 2617 | integrity sha512-raqeBD6NQK4SkWhQzeYKd1KmIG6dllBOTt55Rmkt4HtI9mwdWtJljnrXjAFUBLTSN67HWrOIZ3EPF4kjUw80Bg== 2618 | dependencies: 2619 | "@fastify/busboy" "^2.0.0" 2620 | 2621 | update-browserslist-db@^1.1.1: 2622 | version "1.1.2" 2623 | resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.2.tgz#97e9c96ab0ae7bcac08e9ae5151d26e6bc6b5580" 2624 | integrity sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg== 2625 | dependencies: 2626 | escalade "^3.2.0" 2627 | picocolors "^1.1.1" 2628 | 2629 | uuid@^8.3.2: 2630 | version "8.3.2" 2631 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" 2632 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== 2633 | 2634 | v8-compile-cache-lib@^3.0.1: 2635 | version "3.0.1" 2636 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" 2637 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== 2638 | 2639 | v8-to-istanbul@^9.0.1: 2640 | version "9.3.0" 2641 | resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" 2642 | integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== 2643 | dependencies: 2644 | "@jridgewell/trace-mapping" "^0.3.12" 2645 | "@types/istanbul-lib-coverage" "^2.0.1" 2646 | convert-source-map "^2.0.0" 2647 | 2648 | walker@^1.0.8: 2649 | version "1.0.8" 2650 | resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" 2651 | integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== 2652 | dependencies: 2653 | makeerror "1.0.12" 2654 | 2655 | webidl-conversions@^3.0.0: 2656 | version "3.0.1" 2657 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" 2658 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== 2659 | 2660 | whatwg-url@^5.0.0: 2661 | version "5.0.0" 2662 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" 2663 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== 2664 | dependencies: 2665 | tr46 "~0.0.3" 2666 | webidl-conversions "^3.0.0" 2667 | 2668 | which@^2.0.1: 2669 | version "2.0.2" 2670 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" 2671 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== 2672 | dependencies: 2673 | isexe "^2.0.0" 2674 | 2675 | wrap-ansi@^7.0.0: 2676 | version "7.0.0" 2677 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" 2678 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== 2679 | dependencies: 2680 | ansi-styles "^4.0.0" 2681 | string-width "^4.1.0" 2682 | strip-ansi "^6.0.0" 2683 | 2684 | wrappy@1: 2685 | version "1.0.2" 2686 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" 2687 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== 2688 | 2689 | write-file-atomic@^4.0.2: 2690 | version "4.0.2" 2691 | resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" 2692 | integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== 2693 | dependencies: 2694 | imurmurhash "^0.1.4" 2695 | signal-exit "^3.0.7" 2696 | 2697 | xml2js@^0.5.0: 2698 | version "0.5.0" 2699 | resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" 2700 | integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA== 2701 | dependencies: 2702 | sax ">=0.6.0" 2703 | xmlbuilder "~11.0.0" 2704 | 2705 | xmlbuilder@~11.0.0: 2706 | version "11.0.1" 2707 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3" 2708 | integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA== 2709 | 2710 | y18n@^5.0.5: 2711 | version "5.0.8" 2712 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" 2713 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== 2714 | 2715 | yallist@^3.0.2: 2716 | version "3.1.1" 2717 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" 2718 | integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== 2719 | 2720 | yaml@^2.3.4: 2721 | version "2.7.0" 2722 | resolved "https://registry.yarnpkg.com/yaml/-/yaml-2.7.0.tgz#aef9bb617a64c937a9a748803786ad8d3ffe1e98" 2723 | integrity sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA== 2724 | 2725 | yargs-parser@^21.1.1: 2726 | version "21.1.1" 2727 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" 2728 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== 2729 | 2730 | yargs@^17.3.1, yargs@^17.7.2: 2731 | version "17.7.2" 2732 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" 2733 | integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== 2734 | dependencies: 2735 | cliui "^8.0.1" 2736 | escalade "^3.1.1" 2737 | get-caller-file "^2.0.5" 2738 | require-directory "^2.1.1" 2739 | string-width "^4.2.3" 2740 | y18n "^5.0.5" 2741 | yargs-parser "^21.1.1" 2742 | 2743 | yn@3.1.1: 2744 | version "3.1.1" 2745 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" 2746 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== 2747 | 2748 | yocto-queue@^0.1.0: 2749 | version "0.1.0" 2750 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" 2751 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== 2752 | --------------------------------------------------------------------------------