From 18932f4a5f2c417d933c4d750a6827f24de9b6ba Mon Sep 17 00:00:00 2001 From: BAK BYEONG JUN Date: Tue, 6 May 2025 13:52:36 +0000 Subject: [PATCH] init --- .commitlintrc.json | 4 + .devcontainer/Dockerfile | 4 + .devcontainer/devcontainer.json | 50 + .devcontainer/docker-compose.yml | 48 + .devcontainer/postCreateCommand.sh | 3 + .editorconfig | 13 + .env | 4 + .eslintignore | 1 + .eslintrc.json | 48 + .github/workflows/ci.yml | 24 + .github/workflows/setup/action.yml | 27 + .gitignore | 47 + .husky/commit-msg | 4 + .prettierignore | 7 + .prettierrc | 3 + .verdaccio/config.yml | 47 + .verdaccio/htpasswd | 1 + .vscode/extensions.json | 8 + .vscode/settings.json | 6 + README.md | 14 + assets/monodon.png | Bin 0 -> 462029 bytes e2e/rust-e2e/.eslintrc.json | 18 + e2e/rust-e2e/jest.config.ts | 12 + e2e/rust-e2e/project.json | 22 + e2e/rust-e2e/src/napi.spec.ts | 69 + e2e/rust-e2e/src/rust.spec.ts | 75 + e2e/rust-e2e/src/utils.ts | 38 + e2e/rust-e2e/tsconfig.json | 10 + e2e/rust-e2e/tsconfig.spec.json | 14 + jest.config.ts | 5 + jest.preset.js | 15 + migrations.json | 27 + nx.json | 67 + package.json | 64 + packages/rust/.eslintrc.json | 31 + packages/rust/CHANGELOG.md | 0 packages/rust/README.md | 122 + packages/rust/executors.json | 46 + packages/rust/generators.json | 65 + packages/rust/jest.config.ts | 17 + packages/rust/migrations.json | 25 + packages/rust/package.json | 27 + packages/rust/project.json | 58 + .../rust/src/executors/build/executor.spec.ts | 15 + packages/rust/src/executors/build/executor.ts | 16 + packages/rust/src/executors/build/schema.d.ts | 4 + packages/rust/src/executors/build/schema.json | 138 + .../rust/src/executors/check/executor.spec.ts | 15 + packages/rust/src/executors/check/executor.ts | 16 + packages/rust/src/executors/check/schema.d.ts | 4 + packages/rust/src/executors/check/schema.json | 138 + .../rust/src/executors/lint/executor.spec.ts | 10 + packages/rust/src/executors/lint/executor.ts | 16 + packages/rust/src/executors/lint/schema.d.ts | 5 + packages/rust/src/executors/lint/schema.json | 37 + packages/rust/src/executors/napi/executor.ts | 54 + packages/rust/src/executors/napi/schema.d.ts | 8 + packages/rust/src/executors/napi/schema.json | 31 + .../src/executors/release-publish/executor.ts | 87 + .../src/executors/release-publish/schema.d.ts | 4 + .../src/executors/release-publish/schema.json | 18 + .../rust/src/executors/run/executor.spec.ts | 10 + packages/rust/src/executors/run/executor.ts | 16 + packages/rust/src/executors/run/schema.d.ts | 3 + packages/rust/src/executors/run/schema.json | 77 + .../rust/src/executors/test/executor.spec.ts | 10 + packages/rust/src/executors/test/executor.ts | 16 + packages/rust/src/executors/test/schema.d.ts | 7 + packages/rust/src/executors/test/schema.json | 160 + .../src/executors/wasm-pack/executor.spec.ts | 11 + .../rust/src/executors/wasm-pack/executor.ts | 29 + .../rust/src/executors/wasm-pack/schema.d.ts | 5 + .../rust/src/executors/wasm-pack/schema.json | 27 + .../add-napi/files/build.rs__template__ | 5 + .../add-napi/files/index.d.ts__template__ | 6 + .../add-napi/files/index.js__template__ | 251 + .../add-napi/files/package.json__template__ | 25 + .../add-napi/files/src/lib.rs__template__ | 7 + .../src/generators/add-napi/generator.spec.ts | 91 + .../rust/src/generators/add-napi/generator.ts | 205 + .../rust/src/generators/add-napi/schema.d.ts | 3 + .../rust/src/generators/add-napi/schema.json | 16 + .../files/src/index.ts__template__ | 1 + .../add-wasm-reference/generator.spec.ts | 20 + .../add-wasm-reference/generator.ts | 76 + .../generators/add-wasm-reference/schema.d.ts | 5 + .../generators/add-wasm-reference/schema.json | 30 + .../add-wasm/files/src/lib.rs__template__ | 32 + .../add-wasm/files/src/utils.rs__template__ | 10 + .../src/generators/add-wasm/generator.spec.ts | 141 + .../rust/src/generators/add-wasm/generator.ts | 126 + .../rust/src/generators/add-wasm/schema.d.ts | 5 + .../rust/src/generators/add-wasm/schema.json | 29 + .../binary/files/Cargo.toml__template__ | 10 + .../binary/files/src/main.rs__template__ | 4 + .../src/generators/binary/generator.spec.ts | 87 + .../rust/src/generators/binary/generator.ts | 63 + .../rust/src/generators/binary/schema.d.ts | 6 + .../rust/src/generators/binary/schema.json | 40 + .../create-napi-npm-dirs/generator.ts | 36 + .../create-napi-npm-dirs/schema.d.ts | 3 + .../create-napi-npm-dirs/schema.json | 16 + .../init/files/Cargo.toml__template__ | 6 + .../src/generators/init/generator.spec.ts | 63 + .../rust/src/generators/init/generator.ts | 61 + packages/rust/src/generators/init/schema.d.ts | 2 + packages/rust/src/generators/init/schema.json | 8 + .../library/files/Cargo.toml__template__ | 8 + .../library/files/src/lib.rs__template__ | 8 + .../src/generators/library/generator.spec.ts | 87 + .../rust/src/generators/library/generator.ts | 88 + .../rust/src/generators/library/schema.d.ts | 8 + .../rust/src/generators/library/schema.json | 51 + .../rust/src/generators/preset/generator.ts | 6 + .../rust/src/generators/preset/schema.json | 8 + .../release-version/release-version.spec.ts | 1153 +++ .../release-version/release-version.ts | 683 ++ .../generators/release-version/schema.d.ts | 1 + .../generators/release-version/schema.json | 55 + ...ate-workspace-with-package-dependencies.ts | 68 + packages/rust/src/graph.ts | 194 + packages/rust/src/index.ts | 11 + packages/rust/src/models/base-options.d.ts | 12 + packages/rust/src/models/cargo-metadata.ts | 130 + packages/rust/src/models/cargo.toml.ts | 14 + packages/rust/src/utils/add-executors.ts | 102 + packages/rust/src/utils/add-to-workspace.ts | 32 + packages/rust/src/utils/build-command.spec.ts | 129 + packages/rust/src/utils/build-command.ts | 51 + packages/rust/src/utils/cargo.ts | 113 + .../rust/src/utils/normalize-options.spec.ts | 83 + packages/rust/src/utils/normalize-options.ts | 51 + packages/rust/src/utils/run-process.ts | 34 + packages/rust/src/utils/snake_case.spec.ts | 18 + packages/rust/src/utils/snake_case.ts | 26 + packages/rust/src/utils/toml.ts | 60 + packages/rust/src/utils/versions.ts | 3 + packages/rust/tsconfig.json | 17 + packages/rust/tsconfig.lib.json | 10 + packages/rust/tsconfig.spec.json | 20 + project.json | 14 + rust-toolchain.toml | 4 + tools/scripts/release.js | 135 + tools/scripts/start-local-registry.ts | 31 + tools/scripts/stop-local-registry.ts | 10 + tools/tsconfig.tools.json | 12 + tsconfig.base.json | 23 + yarn.lock | 8628 +++++++++++++++++ 148 files changed, 15857 insertions(+) create mode 100644 .commitlintrc.json create mode 100644 .devcontainer/Dockerfile create mode 100644 .devcontainer/devcontainer.json create mode 100644 .devcontainer/docker-compose.yml create mode 100644 .devcontainer/postCreateCommand.sh create mode 100644 .editorconfig create mode 100644 .env create mode 100644 .eslintignore create mode 100644 .eslintrc.json create mode 100644 .github/workflows/ci.yml create mode 100644 .github/workflows/setup/action.yml create mode 100644 .gitignore create mode 100644 .husky/commit-msg create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 .verdaccio/config.yml create mode 100644 .verdaccio/htpasswd create mode 100644 .vscode/extensions.json create mode 100644 .vscode/settings.json create mode 100644 README.md create mode 100644 assets/monodon.png create mode 100644 e2e/rust-e2e/.eslintrc.json create mode 100644 e2e/rust-e2e/jest.config.ts create mode 100644 e2e/rust-e2e/project.json create mode 100644 e2e/rust-e2e/src/napi.spec.ts create mode 100644 e2e/rust-e2e/src/rust.spec.ts create mode 100644 e2e/rust-e2e/src/utils.ts create mode 100644 e2e/rust-e2e/tsconfig.json create mode 100644 e2e/rust-e2e/tsconfig.spec.json create mode 100644 jest.config.ts create mode 100644 jest.preset.js create mode 100644 migrations.json create mode 100644 nx.json create mode 100644 package.json create mode 100644 packages/rust/.eslintrc.json create mode 100644 packages/rust/CHANGELOG.md create mode 100644 packages/rust/README.md create mode 100644 packages/rust/executors.json create mode 100644 packages/rust/generators.json create mode 100644 packages/rust/jest.config.ts create mode 100644 packages/rust/migrations.json create mode 100644 packages/rust/package.json create mode 100644 packages/rust/project.json create mode 100644 packages/rust/src/executors/build/executor.spec.ts create mode 100644 packages/rust/src/executors/build/executor.ts create mode 100644 packages/rust/src/executors/build/schema.d.ts create mode 100644 packages/rust/src/executors/build/schema.json create mode 100644 packages/rust/src/executors/check/executor.spec.ts create mode 100644 packages/rust/src/executors/check/executor.ts create mode 100644 packages/rust/src/executors/check/schema.d.ts create mode 100644 packages/rust/src/executors/check/schema.json create mode 100644 packages/rust/src/executors/lint/executor.spec.ts create mode 100644 packages/rust/src/executors/lint/executor.ts create mode 100644 packages/rust/src/executors/lint/schema.d.ts create mode 100644 packages/rust/src/executors/lint/schema.json create mode 100644 packages/rust/src/executors/napi/executor.ts create mode 100644 packages/rust/src/executors/napi/schema.d.ts create mode 100644 packages/rust/src/executors/napi/schema.json create mode 100644 packages/rust/src/executors/release-publish/executor.ts create mode 100644 packages/rust/src/executors/release-publish/schema.d.ts create mode 100644 packages/rust/src/executors/release-publish/schema.json create mode 100644 packages/rust/src/executors/run/executor.spec.ts create mode 100644 packages/rust/src/executors/run/executor.ts create mode 100644 packages/rust/src/executors/run/schema.d.ts create mode 100644 packages/rust/src/executors/run/schema.json create mode 100644 packages/rust/src/executors/test/executor.spec.ts create mode 100644 packages/rust/src/executors/test/executor.ts create mode 100644 packages/rust/src/executors/test/schema.d.ts create mode 100644 packages/rust/src/executors/test/schema.json create mode 100644 packages/rust/src/executors/wasm-pack/executor.spec.ts create mode 100644 packages/rust/src/executors/wasm-pack/executor.ts create mode 100644 packages/rust/src/executors/wasm-pack/schema.d.ts create mode 100644 packages/rust/src/executors/wasm-pack/schema.json create mode 100644 packages/rust/src/generators/add-napi/files/build.rs__template__ create mode 100644 packages/rust/src/generators/add-napi/files/index.d.ts__template__ create mode 100644 packages/rust/src/generators/add-napi/files/index.js__template__ create mode 100644 packages/rust/src/generators/add-napi/files/package.json__template__ create mode 100644 packages/rust/src/generators/add-napi/files/src/lib.rs__template__ create mode 100644 packages/rust/src/generators/add-napi/generator.spec.ts create mode 100644 packages/rust/src/generators/add-napi/generator.ts create mode 100644 packages/rust/src/generators/add-napi/schema.d.ts create mode 100644 packages/rust/src/generators/add-napi/schema.json create mode 100644 packages/rust/src/generators/add-wasm-reference/files/src/index.ts__template__ create mode 100644 packages/rust/src/generators/add-wasm-reference/generator.spec.ts create mode 100644 packages/rust/src/generators/add-wasm-reference/generator.ts create mode 100644 packages/rust/src/generators/add-wasm-reference/schema.d.ts create mode 100644 packages/rust/src/generators/add-wasm-reference/schema.json create mode 100644 packages/rust/src/generators/add-wasm/files/src/lib.rs__template__ create mode 100644 packages/rust/src/generators/add-wasm/files/src/utils.rs__template__ create mode 100644 packages/rust/src/generators/add-wasm/generator.spec.ts create mode 100644 packages/rust/src/generators/add-wasm/generator.ts create mode 100644 packages/rust/src/generators/add-wasm/schema.d.ts create mode 100644 packages/rust/src/generators/add-wasm/schema.json create mode 100644 packages/rust/src/generators/binary/files/Cargo.toml__template__ create mode 100644 packages/rust/src/generators/binary/files/src/main.rs__template__ create mode 100644 packages/rust/src/generators/binary/generator.spec.ts create mode 100644 packages/rust/src/generators/binary/generator.ts create mode 100644 packages/rust/src/generators/binary/schema.d.ts create mode 100644 packages/rust/src/generators/binary/schema.json create mode 100644 packages/rust/src/generators/create-napi-npm-dirs/generator.ts create mode 100644 packages/rust/src/generators/create-napi-npm-dirs/schema.d.ts create mode 100644 packages/rust/src/generators/create-napi-npm-dirs/schema.json create mode 100644 packages/rust/src/generators/init/files/Cargo.toml__template__ create mode 100644 packages/rust/src/generators/init/generator.spec.ts create mode 100644 packages/rust/src/generators/init/generator.ts create mode 100644 packages/rust/src/generators/init/schema.d.ts create mode 100644 packages/rust/src/generators/init/schema.json create mode 100644 packages/rust/src/generators/library/files/Cargo.toml__template__ create mode 100644 packages/rust/src/generators/library/files/src/lib.rs__template__ create mode 100644 packages/rust/src/generators/library/generator.spec.ts create mode 100644 packages/rust/src/generators/library/generator.ts create mode 100644 packages/rust/src/generators/library/schema.d.ts create mode 100644 packages/rust/src/generators/library/schema.json create mode 100644 packages/rust/src/generators/preset/generator.ts create mode 100644 packages/rust/src/generators/preset/schema.json create mode 100644 packages/rust/src/generators/release-version/release-version.spec.ts create mode 100644 packages/rust/src/generators/release-version/release-version.ts create mode 100644 packages/rust/src/generators/release-version/schema.d.ts create mode 100644 packages/rust/src/generators/release-version/schema.json create mode 100644 packages/rust/src/generators/release-version/test-utils/create-workspace-with-package-dependencies.ts create mode 100644 packages/rust/src/graph.ts create mode 100644 packages/rust/src/index.ts create mode 100644 packages/rust/src/models/base-options.d.ts create mode 100644 packages/rust/src/models/cargo-metadata.ts create mode 100644 packages/rust/src/models/cargo.toml.ts create mode 100644 packages/rust/src/utils/add-executors.ts create mode 100644 packages/rust/src/utils/add-to-workspace.ts create mode 100644 packages/rust/src/utils/build-command.spec.ts create mode 100644 packages/rust/src/utils/build-command.ts create mode 100644 packages/rust/src/utils/cargo.ts create mode 100644 packages/rust/src/utils/normalize-options.spec.ts create mode 100644 packages/rust/src/utils/normalize-options.ts create mode 100644 packages/rust/src/utils/run-process.ts create mode 100644 packages/rust/src/utils/snake_case.spec.ts create mode 100644 packages/rust/src/utils/snake_case.ts create mode 100644 packages/rust/src/utils/toml.ts create mode 100644 packages/rust/src/utils/versions.ts create mode 100644 packages/rust/tsconfig.json create mode 100644 packages/rust/tsconfig.lib.json create mode 100644 packages/rust/tsconfig.spec.json create mode 100644 project.json create mode 100644 rust-toolchain.toml create mode 100644 tools/scripts/release.js create mode 100644 tools/scripts/start-local-registry.ts create mode 100644 tools/scripts/stop-local-registry.ts create mode 100644 tools/tsconfig.tools.json create mode 100644 tsconfig.base.json create mode 100644 yarn.lock diff --git a/.commitlintrc.json b/.commitlintrc.json new file mode 100644 index 0000000..1ca0183 --- /dev/null +++ b/.commitlintrc.json @@ -0,0 +1,4 @@ +{ + "extends": ["@commitlint/config-conventional"], + "rules": {} +} diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile new file mode 100644 index 0000000..a373de9 --- /dev/null +++ b/.devcontainer/Dockerfile @@ -0,0 +1,4 @@ +FROM mcr.microsoft.com/devcontainers/base:ubuntu + +RUN apt update +RUN apt install -y pkg-config diff --git a/.devcontainer/devcontainer.json b/.devcontainer/devcontainer.json new file mode 100644 index 0000000..eb342a5 --- /dev/null +++ b/.devcontainer/devcontainer.json @@ -0,0 +1,50 @@ +{ + "name": "loafle.nx.plugin", + // Or use a Dockerfile or Docker Compose file. More info: https://containers.dev/guide/dockerfile + "dockerComposeFile": "docker-compose.yml", + "service": "app", + "workspaceFolder": "/workspace", + "shutdownAction": "stopCompose", + "features": { + "ghcr.io/devcontainers/features/node:1": {}, + "ghcr.io/devcontainers/features/docker-in-docker:2": {} + }, + // Configure tool-specific properties. + "customizations": { + // Configure properties specific to VS Code. + "vscode": { + "settings": { + "terminal.integrated.defaultProfile.linux": "zsh", + "terminal.integrated.profiles.linux": { + "zsh": { + "path": "/bin/zsh" + } + }, + "scss.validate": false, + "css.validate": false, + "css.lint.unknownAtRules": "ignore", + "scss.lint.unknownAtRules": "ignore" + }, + "extensions": [ + "bradlc.vscode-tailwindcss", + "csstools.postcss", + "dbaeumer.vscode-eslint", + "donjayamanne.githistory", + "eamodio.gitlens", + "esbenp.prettier-vscode", + "firsttris.vscode-jest-runner", + "ms-azuretools.vscode-docker" + ] + } + }, + // Use 'forwardPorts' to make a list of ports inside the container available locally. + // "forwardPorts": [], + // Use 'postCreateCommand' to run commands after the container is created. + "postCreateCommand": "/bin/sh ./.devcontainer/postCreateCommand.sh", + "mounts": [ + "source=${localEnv:HOME}/.gitconfig,target=/home/vscode/.gitconfig,type=bind,consistency=cached", + "source=${localEnv:HOME}/.netrc,target=/home/vscode/.netrc,type=bind,consistency=cached", + "source=${localEnv:HOME}/.config/pypoetry,target=/home/vscode/.config/pypoetry,type=bind,consistency=cached", + "source=${localEnv:HOME}/.ssh/id_rsa,target=/home/vscode/.ssh/id_rsa,type=bind,consistency=cached" + ] +} diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/docker-compose.yml new file mode 100644 index 0000000..f92ffa9 --- /dev/null +++ b/.devcontainer/docker-compose.yml @@ -0,0 +1,48 @@ +version: "3.8" + +services: + app: + # Using a Dockerfile is optional, but included for completeness. + build: + context: . + dockerfile: Dockerfile + # [Optional] You can use build args to set options. e.g. 'VARIANT' below affects the image in the Dockerfile + # args: + # VARIANT: buster + # environment: + # PORT: 3000 + # ports: + # - 3000:3000 + + volumes: + # This is where VS Code should expect to find your project's source code and the value of "workspaceFolder" in .devcontainer/devcontainer.json + - ..:/workspace:cached + + # Uncomment the next line to use Docker from inside the container. See https://aka.ms/vscode-remote/samples/docker-from-docker-compose for details. + # - /var/run/docker.sock:/var/run/docker.sock + + # Overrides default command so things don't shut down after the process ends. + # command: /bin/sh -c "while sleep 1000; do :; done" + command: sleep infinity + + # Runs app on the same network as the service container, allows "forwardPorts" in devcontainer.json function. + # network_mode: service:another-service + + # Use "forwardPorts" in **devcontainer.json** to forward an app port locally. + # (Adding the "ports" property to this file will not forward from a Codespace.) + + # Uncomment the next line to use a non-root user for all processes - See https://aka.ms/vscode-remote/containers/non-root for details. + # user: vscode + + # Uncomment the next four lines if you will use a ptrace-based debugger like C++, Go, and Rust. + # cap_add: + # - SYS_PTRACE + # security_opt: + # - seccomp:unconfined + + # You can include other services not opened by VS Code as well + # another-service: + # image: mongo:latest + # restart: unless-stopped + + # As in the "app" service, use "forwardPorts" in **devcontainer.json** to forward an app port locally. \ No newline at end of file diff --git a/.devcontainer/postCreateCommand.sh b/.devcontainer/postCreateCommand.sh new file mode 100644 index 0000000..24f574c --- /dev/null +++ b/.devcontainer/postCreateCommand.sh @@ -0,0 +1,3 @@ +npm install -g npm + +npm add --global nx@latest diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..6e87a00 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# Editor configuration, see http://editorconfig.org +root = true + +[*] +charset = utf-8 +indent_style = space +indent_size = 2 +insert_final_newline = true +trim_trailing_whitespace = true + +[*.md] +max_line_length = off +trim_trailing_whitespace = false diff --git a/.env b/.env new file mode 100644 index 0000000..11ed57e --- /dev/null +++ b/.env @@ -0,0 +1,4 @@ +# Nx 18 enables using plugins to infer targets by default +# This is disabled for existing workspaces to maintain compatibility +# For more info, see: https://nx.dev/concepts/inferred-tasks +NX_ADD_PLUGINS=false \ No newline at end of file diff --git a/.eslintignore b/.eslintignore new file mode 100644 index 0000000..3c3629e --- /dev/null +++ b/.eslintignore @@ -0,0 +1 @@ +node_modules diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..55d6772 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,48 @@ +{ + "root": true, + "ignorePatterns": ["**/*"], + "plugins": ["@nx"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": { + "@nx/enforce-module-boundaries": [ + "error", + { + "enforceBuildableLibDependency": true, + "allow": [], + "depConstraints": [ + { + "sourceTag": "*", + "onlyDependOnLibsWithTags": ["*"] + } + ] + } + ] + } + }, + { + "files": ["*.ts", "*.tsx"], + "extends": ["plugin:@nx/typescript"], + "rules": { + "@typescript-eslint/no-explicit-any": "warn", + "@typescript-eslint/no-unused-vars": "warn", + "@typescript-eslint/no-extra-semi": "error", + "no-extra-semi": "off" + } + }, + { + "files": ["*.js", "*.jsx"], + "extends": ["plugin:@nx/javascript"], + "rules": { + "@typescript-eslint/no-extra-semi": "error", + "no-extra-semi": "off" + } + }, + { + "files": "*.json", + "parser": "jsonc-eslint-parser", + "rules": {} + } + ] +} diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..f64f38c --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,24 @@ +name: CI +on: + push: + branches: + - main + pull_request: +env: + node_version: 20 + +jobs: + checks: + runs-on: ubuntu-latest + env: + NX_CLOUD_ACCESS_TOKEN: ${{ secrets.NX_CLOUD_ACCESS_TOKEN }} + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - uses: ./.github/workflows/setup + with: + node_version: ${{ env.node_version }} + - run: yarn nx run-many --target=build,test,lint --exclude loafle --parallel --max-parallel=3 + - run: yarn nx run-many --target=e2e --exclude loafle --parallel + - run: yarn nx-cloud stop-all-agents diff --git a/.github/workflows/setup/action.yml b/.github/workflows/setup/action.yml new file mode 100644 index 0000000..5e25771 --- /dev/null +++ b/.github/workflows/setup/action.yml @@ -0,0 +1,27 @@ +name: Setup +description: Setup tasks +inputs: + node_version: # id of input + description: 'Version of node to use' + required: true + default: '20' + +runs: + using: 'composite' + steps: + - name: Derive appropriate SHAs for base and head for `nx affected` commands + uses: nrwl/nx-set-shas@v4 + - uses: actions/setup-node@v4 + with: + node-version: ${{ inputs.node_version}} + - name: Install + uses: dtolnay/rust-toolchain@1.79.0 + - uses: actions/cache@v4 + id: workspace-cache + with: + path: node_modules + key: ${{ runner.os }}-${{ inputs.node_version }}-workspace-${{ hashFiles('**/yarn.lock') }} + restore-keys: | + ${{ runner.os }}-${{ inputs.node_version }}-workspace- + - run: yarn install --frozen-lockfile + shell: bash diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..3c70c8e --- /dev/null +++ b/.gitignore @@ -0,0 +1,47 @@ +# See http://help.github.com/ignore-files/ for more about ignoring files. + +# compiled output +/dist +tmp +/out-tsc + +# dependencies +/node_modules + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +yarn-error.log +testem.log +/typings + +# System Files +.DS_Store +Thumbs.db + + +# Added by cargo + +/target + +.nx/cache +.nx/workspace-data \ No newline at end of file diff --git a/.husky/commit-msg b/.husky/commit-msg new file mode 100644 index 0000000..e8511ea --- /dev/null +++ b/.husky/commit-msg @@ -0,0 +1,4 @@ +#!/bin/sh +. "$(dirname "$0")/_/husky.sh" + +npx --no-install commitlint --edit $1 diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..daffe92 --- /dev/null +++ b/.prettierignore @@ -0,0 +1,7 @@ +# Add files here to ignore them from prettier formatting + +/dist +/coverage + +/.nx/cache +/.nx/workspace-data \ No newline at end of file diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..544138b --- /dev/null +++ b/.prettierrc @@ -0,0 +1,3 @@ +{ + "singleQuote": true +} diff --git a/.verdaccio/config.yml b/.verdaccio/config.yml new file mode 100644 index 0000000..16e5e9c --- /dev/null +++ b/.verdaccio/config.yml @@ -0,0 +1,47 @@ +# path to a directory with all packages +storage: ../tmp/local-registry/storage + +auth: + htpasswd: + file: ./htpasswd + algorithm: bcrypt + +# a list of other known repositories we can talk to +uplinks: + npmjs: + url: https://registry.npmjs.org/ + maxage: 60m + max_fails: 20 + fail_timeout: 2m + yarn: + url: https://registry.yarnpkg.com + maxage: 60m + max_fails: 20 + fail_timeout: 2 + +packages: + '@*/*': + # scoped packages + access: $all + publish: $all + unpublish: $all + proxy: npmjs + + '**': + # give all users (including non-authenticated users) full access + # because it is a local registry + access: $all + publish: $all + unpublish: $all + + # if package is not available locally, proxy requests to npm registry + proxy: npmjs + +# log settings +logs: + type: stdout + format: pretty + level: warn + +publish: + allow_offline: true # set offline to true to allow publish offline diff --git a/.verdaccio/htpasswd b/.verdaccio/htpasswd new file mode 100644 index 0000000..3231332 --- /dev/null +++ b/.verdaccio/htpasswd @@ -0,0 +1 @@ +test:$2y$10$lVWrhBqHffH6dnroJWR.0ug.Zgehrsxdh0dRcrFSqdktWqf/sRk9S diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..6a302fe --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "nrwl.angular-console", + "esbenp.prettier-vscode", + "dbaeumer.vscode-eslint", + "firsttris.vscode-jest-runner" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..db473df --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "typescript.tsdk": "node_modules/typescript/lib", + "eslint.validate": [ + "json" + ] +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..3b49ea9 --- /dev/null +++ b/README.md @@ -0,0 +1,14 @@ +

+ +

+
+ +# Monodon + +**A collection of utilities and plugins for the Nx ecosystem** + +
+ +[![npm (scoped)](https://img.shields.io/static/v1?label=%20&message=README&logo=markdown&style=for-the-badge)](./packages/rust/README.md) +[![npm (scoped)](https://img.shields.io/npm/v/@loafle/nx-rust?label=rust&logo=Rust&style=for-the-badge)](https://www.npmjs.com/package/@loafle/nx-rust)
+[![npm (scoped)](https://img.shields.io/static/v1?label=%20&message=README&logo=markdown&style=for-the-badge)](./packages/rust/README.md) diff --git a/assets/monodon.png b/assets/monodon.png new file mode 100644 index 0000000000000000000000000000000000000000..a68f67c86a7f4642d37e3c3025197cf2a01200ce GIT binary patch literal 462029 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
  • +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

    E-;~Rbu0JLT$I=0=8P_`&Qd4JOA>CBcHM2 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

    YQN=@)komgHe}!Q^3;x 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/tsconfig.spec.json' }], + }, + moduleFileExtensions: ['ts', 'js', 'html'], + coverageDirectory: '../../coverage/e2e/rust-e2e', + globalSetup: '../../tools/scripts/start-local-registry.ts', + globalTeardown: '../../tools/scripts/stop-local-registry.ts', +}; diff --git a/e2e/rust-e2e/project.json b/e2e/rust-e2e/project.json new file mode 100644 index 0000000..ba03337 --- /dev/null +++ b/e2e/rust-e2e/project.json @@ -0,0 +1,22 @@ +{ + "name": "rust-e2e", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "projectType": "application", + "sourceRoot": "e2e/rust-e2e/src", + "targets": { + "e2e": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], + "options": { + "jestConfig": "e2e/rust-e2e/jest.config.ts", + "runInBand": true + }, + "dependsOn": ["^build"] + }, + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + } + }, + "implicitDependencies": ["rust"] +} diff --git a/e2e/rust-e2e/src/napi.spec.ts b/e2e/rust-e2e/src/napi.spec.ts new file mode 100644 index 0000000..65fb234 --- /dev/null +++ b/e2e/rust-e2e/src/napi.spec.ts @@ -0,0 +1,69 @@ +import { execSync } from 'child_process'; +import { createTestProject, runNxCommand } from './utils'; +import { rmSync } from 'fs'; +import { listFiles, readFile, updateFile } from '@nx/plugin/testing'; + +describe('napi', () => { + let projectDirectory: string; + beforeAll(() => { + projectDirectory = createTestProject('napi'); + + // The plugin has been built and published to a local registry in the jest globalSetup + // Install the plugin built with the latest source code into the test repo + execSync(`yarn add -D @loafle/nx-rust@e2e`, { + cwd: projectDirectory, + stdio: 'inherit', + env: process.env, + }); + }); + + afterAll(() => { + // Cleanup the test project + rmSync(projectDirectory, { + recursive: true, + force: true, + }); + }); + + it('should create a napi project', () => { + runNxCommand( + `generate @loafle/nx-rust:lib napi-proj --napi`, + projectDirectory + ); + + const projectConfigPath = `test-project-napi/napi_proj/project.json`; + const projectFile = JSON.parse(readFile(projectConfigPath)); + projectFile['targets']['build']['options'] = { + ...projectFile['targets']['build']['options'], + jsFile: 'native.js', + dts: 'native.d.ts', + }; + updateFile(projectConfigPath, JSON.stringify(projectFile, null, 2)); + + expect(listFiles(`test-project-napi/napi_proj/npm`).length).toBeGreaterThan( + 0 + ); + + expect(() => + runNxCommand(`build napi_proj`, projectDirectory) + ).not.toThrow(); + + const files = listFiles(`test-project-napi/napi_proj`); + expect(files.some((file) => file.endsWith('native.js'))).toBeTruthy(); + expect(files.some((file) => file.endsWith('native.d.ts'))).toBeTruthy(); + expect(files.some((file) => file.endsWith('.node'))).toBeTruthy(); + + expect(() => + runNxCommand( + `build napi_proj -- --target wasm32-wasip1-threads`, + projectDirectory + ) + ).not.toThrow(); + const files2 = listFiles(`test-project-napi/napi_proj`); + expect( + files2.some((file) => file.endsWith('wasm32-wasi.wasm')) + ).toBeTruthy(); + expect(files2).toContain('wasi-worker.mjs'); + expect(files2).toContain('wasi-worker-browser.mjs'); + }); +}); diff --git a/e2e/rust-e2e/src/rust.spec.ts b/e2e/rust-e2e/src/rust.spec.ts new file mode 100644 index 0000000..e886184 --- /dev/null +++ b/e2e/rust-e2e/src/rust.spec.ts @@ -0,0 +1,75 @@ +import { ProjectGraph } from '@nx/devkit'; +import { execSync } from 'child_process'; +import { readFileSync, rmSync } from 'fs'; +import { join } from 'path'; +import { createTestProject, runNxCommand } from './utils'; + +describe('rust', () => { + let projectDirectory: string; + + beforeAll(() => { + projectDirectory = createTestProject(); + + // The plugin has been built and published to a local registry in the jest globalSetup + // Install the plugin built with the latest source code into the test repo + execSync(`yarn add -D @loafle/nx-rust@e2e`, { + cwd: projectDirectory, + stdio: 'inherit', + env: process.env, + }); + }); + + afterAll(() => { + // Cleanup the test project + rmSync(projectDirectory, { + recursive: true, + force: true, + }); + }); + + it('should be installed', () => { + // npm ls will fail if the package is not installed properly + execSync('npm ls @loafle/nx-rust', { + cwd: projectDirectory, + stdio: 'inherit', + }); + }); + + it('should generate a cargo project and update the project graph', () => { + runNxCommand(`generate @loafle/nx-rust:bin hello-world`, projectDirectory); + runNxCommand(`generate @loafle/nx-rust:lib lib1`, projectDirectory); + + execSync('cargo add itertools -p lib1', { cwd: projectDirectory }); + execSync(`cargo add lib1 --path ./lib1 -p hello_world`, { + cwd: projectDirectory, + }); + expect(() => + runNxCommand(`build hello_world`, projectDirectory) + ).not.toThrow(); + + const projectGraph: ProjectGraph = JSON.parse( + readFileSync( + join(projectDirectory, '.nx/workspace-data/project-graph.json') + ).toString() + ); + + expect(projectGraph.dependencies['hello_world']).toMatchInlineSnapshot(` + Array [ + Object { + "source": "hello_world", + "target": "lib1", + "type": "static", + }, + ] + `); + expect(projectGraph.dependencies['lib1']).toMatchInlineSnapshot(` + Array [ + Object { + "source": "lib1", + "target": "cargo:itertools", + "type": "static", + }, + ] + `); + }); +}); diff --git a/e2e/rust-e2e/src/utils.ts b/e2e/rust-e2e/src/utils.ts new file mode 100644 index 0000000..d7e1c8e --- /dev/null +++ b/e2e/rust-e2e/src/utils.ts @@ -0,0 +1,38 @@ +import { dirname, join } from 'path'; +import { mkdirSync, rmSync } from 'fs'; +import { execSync } from 'child_process'; +import { tmpProjPath } from '@nx/plugin/testing'; + +/** + * Creates a test project with create-nx-workspace and installs the plugin + * @returns The directory where the test project was created + */ +export function createTestProject(testId = '') { + const projectName = 'test-project-' + testId; + const projectDirectory = tmpProjPath(projectName); + + // Ensure projectDirectory is empty + rmSync(projectDirectory, { + recursive: true, + force: true, + }); + mkdirSync(dirname(projectDirectory), { + recursive: true, + }); + + execSync( + `npx --yes create-nx-workspace@latest ${projectName} --preset apps --nxCloud=skip --no-interactive --packageManager yarn`, + { + cwd: dirname(projectDirectory), + stdio: 'inherit', + env: process.env, + } + ); + console.log(`Created test project in "${projectDirectory}"`); + + return projectDirectory; +} + +export function runNxCommand(command: string, projectDir: string) { + execSync(`npx nx ${command}`, { cwd: projectDir, stdio: 'inherit' }); +} diff --git a/e2e/rust-e2e/tsconfig.json b/e2e/rust-e2e/tsconfig.json new file mode 100644 index 0000000..b9c9d95 --- /dev/null +++ b/e2e/rust-e2e/tsconfig.json @@ -0,0 +1,10 @@ +{ + "extends": "../../tsconfig.base.json", + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/e2e/rust-e2e/tsconfig.spec.json b/e2e/rust-e2e/tsconfig.spec.json new file mode 100644 index 0000000..9b2a121 --- /dev/null +++ b/e2e/rust-e2e/tsconfig.spec.json @@ -0,0 +1,14 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": [ + "jest.config.ts", + "src/**/*.test.ts", + "src/**/*.spec.ts", + "src/**/*.d.ts" + ] +} diff --git a/jest.config.ts b/jest.config.ts new file mode 100644 index 0000000..6b3f2d6 --- /dev/null +++ b/jest.config.ts @@ -0,0 +1,5 @@ +import { getJestProjectsAsync } from '@nx/jest'; + +export default async () => ({ + projects: await getJestProjectsAsync(), +}); diff --git a/jest.preset.js b/jest.preset.js new file mode 100644 index 0000000..bb31d61 --- /dev/null +++ b/jest.preset.js @@ -0,0 +1,15 @@ +const nxPreset = require('@nx/jest/preset').default; + +module.exports = { + ...nxPreset, + /* TODO: Update to latest Jest snapshotFormat + * By default Nx has kept the older style of Jest Snapshot formats + * to prevent breaking of any existing tests with snapshots. + * It's recommend you update to the latest format. + * You can do this by removing snapshotFormat property + * and running tests with --update-snapshot flag. + * Example: "nx affected --targets=e2e --update-snapshot" + * More info: https://jestjs.io/docs/upgrading-to-jest29#snapshot-format + */ + snapshotFormat: { escapeString: true, printBasicPrototype: true }, +}; diff --git a/migrations.json b/migrations.json new file mode 100644 index 0000000..7906db4 --- /dev/null +++ b/migrations.json @@ -0,0 +1,27 @@ +{ + "migrations": [ + { + "version": "20.0.0-beta.7", + "description": "Migration for v20.0.0-beta.7", + "implementation": "./src/migrations/update-20-0-0/move-use-daemon-process", + "package": "nx", + "name": "move-use-daemon-process" + }, + { + "version": "20.0.1", + "description": "Set `useLegacyCache` to true for migrating workspaces", + "implementation": "./src/migrations/update-20-0-1/use-legacy-cache", + "x-repair-skip": true, + "package": "nx", + "name": "use-legacy-cache" + }, + { + "cli": "nx", + "version": "20.0.0-beta.5", + "description": "replace getJestProjects with getJestProjectsAsync", + "implementation": "./src/migrations/update-20-0-0/replace-getJestProjects-with-getJestProjectsAsync", + "package": "@nx/jest", + "name": "replace-getJestProjects-with-getJestProjectsAsync" + } + ] +} diff --git a/nx.json b/nx.json new file mode 100644 index 0000000..5d34b5e --- /dev/null +++ b/nx.json @@ -0,0 +1,67 @@ +{ + "$schema": "./node_modules/nx/schemas/nx-schema.json", + "nxCloudAccessToken": "NzcyM2FlMTMtMjU2MS00NTE0LWFjNzQtNmU0OGU5YjExNzVlfHJlYWQ=", + "workspaceLayout": { + "appsDir": "e2e", + "libsDir": "packages" + }, + "release": { + "projects": ["rust"], + "projectsRelationship": "independent", + "releaseTagPattern": "{projectName}-{version}", + "version": { + "conventionalCommits": true, + "generatorOptions": { + "packageRoot": "dist/packages/{projectName}" + } + }, + "changelog": { + "projectChangelogs": { + "file": "{projectRoot}/CHANGELOG.md", + "createRelease": "github" + } + } + }, + "targetDefaults": { + "nx-release-publish": { + "options": { + "packageRoot": "dist/packages/{projectName}" + } + }, + "build": { + "dependsOn": ["^build"], + "inputs": ["production", "^production"], + "cache": true + }, + "@nx/jest:jest": { + "cache": true, + "inputs": ["default", "^production", "{workspaceRoot}/jest.preset.js"], + "options": { + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "codeCoverage": true + } + } + }, + "@nx/eslint:lint": { + "inputs": ["default", "{workspaceRoot}/.eslintrc.json"], + "cache": true + } + }, + "namedInputs": { + "default": ["{projectRoot}/**/*", "sharedGlobals"], + "sharedGlobals": [], + "production": [ + "default", + "!{projectRoot}/**/?(*.)+(spec|test).[jt]s?(x)?(.snap)", + "!{projectRoot}/tsconfig.spec.json", + "!{projectRoot}/jest.config.[jt]s", + "!{projectRoot}/.eslintrc.json", + "!{projectRoot}/src/test-setup.[jt]s" + ] + }, + "useLegacyCache": false +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..08cb6f9 --- /dev/null +++ b/package.json @@ -0,0 +1,64 @@ +{ + "name": "loafle", + "version": "0.0.0", + "license": "MIT", + "scripts": { + "nx": "nx", + "prepare": "husky install", + "local-registry": "nx run loafle:local-registry", + "build": "nx run rust:build", + "test": "nx run rust:test", + "e2e": "nx run rust-e2e:e2e", + "release": "node tools/scripts/release.js" + }, + "private": true, + "packageManager": "yarn@1.22.19", + "dependencies": { + "@ltd/j-toml": "1.38.0", + "@napi-rs/cli": "3.0.0-alpha.63", + "@nx/devkit": "20.0.1", + "@nx/js": "20.0.1", + "@swc/helpers": "0.5.13", + "chalk": "^4.1.2", + "tslib": "^2.0.0" + }, + "devDependencies": { + "@commitlint/cli": "17.3.0", + "@commitlint/config-conventional": "17.3.0", + "@nx/eslint": "20.0.1", + "@nx/eslint-plugin": "20.0.1", + "@nx/jest": "20.0.1", + "@nx/node": "20.0.1", + "@nx/plugin": "20.0.1", + "@nx/workspace": "20.0.1", + "@swc-node/register": "1.9.2", + "@swc/cli": "0.3.14", + "@swc/core": "1.5.7", + "@types/jest": "29.5.13", + "@types/node": "18.19.11", + "@types/semver": "^7.5.8", + "@typescript-eslint/eslint-plugin": "7.18.0", + "@typescript-eslint/parser": "7.18.0", + "dotenv": "~10.0.0", + "eslint": "8.57.0", + "eslint-config-prettier": "9.0.0", + "husky": "^8.0.0", + "jest": "29.7.0", + "jest-environment-jsdom": "29.7.0", + "jsonc-eslint-parser": "^2.1.0", + "nx": "20.0.1", + "prettier": "2.8.0", + "semver": "7.5.4", + "ts-jest": "29.1.0", + "ts-node": "10.9.1", + "typescript": "5.5.4", + "verdaccio": "^5.25.0" + }, + "volta": { + "node": "20.11.1", + "yarn": "1.22.19" + }, + "nx": { + "includedScripts": [] + } +} diff --git a/packages/rust/.eslintrc.json b/packages/rust/.eslintrc.json new file mode 100644 index 0000000..adea32d --- /dev/null +++ b/packages/rust/.eslintrc.json @@ -0,0 +1,31 @@ +{ + "extends": ["../../.eslintrc.json"], + "ignorePatterns": ["!**/*"], + "overrides": [ + { + "files": ["*.ts", "*.tsx", "*.js", "*.jsx"], + "rules": {} + }, + { + "files": ["*.ts", "*.tsx"], + "rules": {} + }, + { + "files": ["*.js", "*.jsx"], + "rules": {} + }, + { + "files": [ + "./package.json", + "./generators.json", + "./executors.json", + "./migrations.json" + ], + "parser": "jsonc-eslint-parser", + "rules": { + "@nx/nx-plugin-checks": "error", + "@nx/dependency-checks": "warn" + } + } + ] +} diff --git a/packages/rust/CHANGELOG.md b/packages/rust/CHANGELOG.md new file mode 100644 index 0000000..e69de29 diff --git a/packages/rust/README.md b/packages/rust/README.md new file mode 100644 index 0000000..eac4e66 --- /dev/null +++ b/packages/rust/README.md @@ -0,0 +1,122 @@ +# @loafle/nx-rust + +A Nx plugin that adds support for Cargo and Rust in your Nx workspace. + +## Compatibility Chart + +| @loafle/nx-rust | nx | +| --------------- | -------- | +| <=1.2.1 | <=17.1.0 | +| >=1.3.0 | >=17.1.0 | + +## Getting Started + +### Prerequisites + +The following tools need to be installed on your system to take full advantage of `@loafle/nx-rust` + +- Node (LTS) +- Rust / Cargo via [https://rustup.rs](https://rustup.rs) + +### Install with `npx create-nx-workspace` preset + +To bootstrap a new workspace with `@loafle/nx-rust` installed and ready, run: + +```shell +npx create-nx-workspace --preset=@loafle/nx-rust +``` + +### Installation in already set up workspace + +Use your favourite package manager to install in your project: + +```shell +yarn add -D @loafle/nx-rust +``` + +```shell +npm install -D @loafle/nx-rust +``` + +```shell +pnpm add -D @loafle/nx-rust +``` + +#### Initialization + +After installing, you can run any of the project generators (binary, library) to have @loafle/nx-rust set up Cargo in your workspace. + +## Generators + +Use Nx Console to see the full list of options for each generator. + +### `@loafle/nx-rust:binary` + +Creates a Rust binary application to be run independently. + +> Create a new binary: +> +> ```shell +> nx generate @loafle/nx-rust:binary my-rust-app +> ``` + +### `@loafle/nx-rust:library` + +Creates a Rust library that can be used in binaries, or compiled to be used for napi. + +> Create a new library: +> +> ```shell +> nx generate @loafle/nx-rust:library my-rust-lib +> ``` + +> Create a new library with napi: +> +> ```shell +> nx generate @loafle/nx-rust:library my-rust-node-lib --napi +> ``` + +#### Napi + +Generating a library with the `--napi` flag will set up the project to be built with it. + +## Executors + +All the executors support these additional properties: + +- toolchain: (e.g. `--toolchain='stable' | 'beta' | 'nightly'`); + - Uses `stable` by default +- target (e.g. `--target=aarch64-apple-darwin`); +- profile (e.g. `--profile=dev`) + - [Cargo profiles](https://doc.rust-lang.org/cargo/reference/profiles.html) +- release +- target-dir +- features (e.g. `--features=bmp`) + - [Cargo features](https://doc.rust-lang.org/cargo/reference/features.html) +- all-features +- args + - [Arguments forwarding](https://nx.dev/nx-api/nx/executors/run-commands#args) to the executor. + +### `@loafle/nx-rust:build` + +Runs cargo to build the project + +> Not supported with napi + +### `@loafle/nx-rust:lint` + +Runs cargo clippy to lint the project + +### `@loafle/nx-rust:napi` + +Runs the napi cli to build the project + +### `@loafle/nx-rust:run` + +Runs `cargo run` for the project + +> Not supported with napi + +### `@loafle/nx-rust:test` + +Runs `cargo test` for the project diff --git a/packages/rust/executors.json b/packages/rust/executors.json new file mode 100644 index 0000000..e366315 --- /dev/null +++ b/packages/rust/executors.json @@ -0,0 +1,46 @@ +{ + "$schema": "http://json-schema.org/schema", + "executors": { + "build": { + "implementation": "./src/executors/build/executor", + "schema": "./src/executors/build/schema.json", + "description": "Build a Rust project with Cargo" + }, + "check": { + "implementation": "./src/executors/check/executor", + "schema": "./src/executors/check/schema.json", + "description": "Check a Rust project with Cargo" + }, + "lint": { + "implementation": "./src/executors/lint/executor", + "schema": "./src/executors/lint/schema.json", + "description": "Lint a Rust project with Cargo clippy" + }, + "run": { + "implementation": "./src/executors/run/executor", + "schema": "./src/executors/run/schema.json", + "description": "Run a Rust project with Cargo" + }, + "test": { + "implementation": "./src/executors/test/executor", + "schema": "./src/executors/test/schema.json", + "description": "Test a Rust project with Cargo" + }, + "wasm-pack": { + "implementation": "./src/executors/wasm-pack/executor", + "schema": "./src/executors/wasm-pack/schema.json", + "description": "Builds a Cargo project using wasm-pack" + }, + "napi": { + "implementation": "./src/executors/napi/executor", + "schema": "./src/executors/napi/schema.json", + "description": "Wrapper to run the napi-cli" + }, + "release-publish": { + "implementation": "./src/executors/release-publish/executor", + "schema": "./src/executors/release-publish/schema.json", + "description": "DO NOT INVOKE DIRECTLY WITH `nx run`. Use `nx release publish` instead.", + "hidden": true + } + } +} diff --git a/packages/rust/generators.json b/packages/rust/generators.json new file mode 100644 index 0000000..b26c8cc --- /dev/null +++ b/packages/rust/generators.json @@ -0,0 +1,65 @@ +{ + "$schema": "http://json-schema.org/schema", + "name": "rust", + "version": "0.0.1", + "generators": { + "binary": { + "factory": "./src/generators/binary/generator", + "schema": "./src/generators/binary/schema.json", + "description": "Generate a Rust bin with Cargo", + "x-type": "application", + "aliases": [ + "bin" + ] + }, + "init": { + "factory": "./src/generators/init/generator", + "schema": "./src/generators/init/schema.json", + "description": "initializes a Cargo workspace within a Nx workspace", + "hidden": true + }, + "library": { + "factory": "./src/generators/library/generator", + "schema": "./src/generators/library/schema.json", + "description": "Generate a Rust library with Cargo", + "x-type": "library", + "aliases": [ + "lib" + ] + }, + "add-wasm": { + "factory": "./src/generators/add-wasm/generator", + "schema": "./src/generators/add-wasm/schema.json", + "description": "Adds wasm support to a Cargo project", + "hidden": true + }, + "add-wasm-reference": { + "factory": "./src/generators/add-wasm-reference/generator", + "schema": "./src/generators/add-wasm-reference/schema.json", + "description": "Adds wasm support to an existing JavaScript/TypeScript project", + "hidden": true + }, + "preset": { + "factory": "./src/generators/preset/generator", + "schema": "./src/generators/preset/schema.json", + "description": "preset generator", + "hidden": true + }, + "add-napi": { + "factory": "./src/generators/add-napi/generator", + "schema": "./src/generators/add-napi/schema.json", + "description": "Generates support for napi-rs" + }, + "create-napi-npm-dirs": { + "factory": "./src/generators/create-napi-npm-dirs/generator", + "schema": "./src/generators/create-napi-npm-dirs/schema.json", + "description": "Generates npm package directories for a NAPI project" + }, + "release-version": { + "factory": "./src/generators/release-version/release-version#releaseVersionGenerator", + "schema": "./src/generators/release-version/schema.json", + "description": "DO NOT INVOKE DIRECTLY WITH `nx generate`. Use `nx release version` instead.", + "hidden": true + } + } +} diff --git a/packages/rust/jest.config.ts b/packages/rust/jest.config.ts new file mode 100644 index 0000000..36f8e96 --- /dev/null +++ b/packages/rust/jest.config.ts @@ -0,0 +1,17 @@ +/* eslint-disable */ +export default { + displayName: 'rust', + preset: '../../jest.preset.js', + globals: {}, + testEnvironment: 'node', + transform: { + '^.+\\.[tj]sx?$': [ + 'ts-jest', + { + tsconfig: '/tsconfig.spec.json', + }, + ], + }, + moduleFileExtensions: ['ts', 'tsx', 'js', 'jsx'], + coverageDirectory: '../../coverage/packages/rust', +}; diff --git a/packages/rust/migrations.json b/packages/rust/migrations.json new file mode 100644 index 0000000..eb2e5c0 --- /dev/null +++ b/packages/rust/migrations.json @@ -0,0 +1,25 @@ +{ + "generators": {}, + "packageJsonUpdates": { + "2.0.0": { + "version": "2.0.0-beta.1", + "requires": { + "@napi-rs/cli": "<3.0.0" + }, + "packages": { + "@napi-rs/cli": { + "version": "3.0.0-alpha.63", + "alwaysAddToPackageJson": false + }, + "@napi-rs/wasm-runtime": { + "version": "^0.2.4", + "alwaysAddToPackageJson": true + }, + "emnapi": { + "version": "^1.1.0", + "alwaysAddToPackageJson": true + } + } + } + } +} diff --git a/packages/rust/package.json b/packages/rust/package.json new file mode 100644 index 0000000..3beba12 --- /dev/null +++ b/packages/rust/package.json @@ -0,0 +1,27 @@ +{ + "name": "@loafle/nx-rust", + "version": "0.0.0-updated-during-release", + "main": "src/index.js", + "repository": { + "url": "https://git.loafle.net/loafle/nx", + "type": "git" + }, + "license": "MIT", + "private": false, + "generators": "./generators.json", + "executors": "./executors.json", + "dependencies": { + "@nx/devkit": ">= 19 < 21", + "@ltd/j-toml": "1.38.0", + "chalk": "^4.1.2", + "npm-run-path": "^4.0.1", + "semver": "7.5.4", + "tslib": "^2.0.0" + }, + "peerDependencies": { + "@napi-rs/cli": "^3.0.0-alpha.55" + }, + "nx-migrations": { + "migrations": "./migrations.json" + } +} diff --git a/packages/rust/project.json b/packages/rust/project.json new file mode 100644 index 0000000..56ba0f1 --- /dev/null +++ b/packages/rust/project.json @@ -0,0 +1,58 @@ +{ + "name": "rust", + "$schema": "../../node_modules/nx/schemas/project-schema.json", + "sourceRoot": "packages/rust/src", + "projectType": "library", + "tags": [], + "targets": { + "lint": { + "executor": "@nx/eslint:lint", + "outputs": ["{options.outputFile}"] + }, + "test": { + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/packages/rust"], + "options": { + "jestConfig": "packages/rust/jest.config.ts" + } + }, + "build": { + "executor": "@nx/js:tsc", + "outputs": ["{options.outputPath}"], + "options": { + "outputPath": "dist/packages/rust", + "tsConfig": "packages/rust/tsconfig.lib.json", + "packageJson": "packages/rust/package.json", + "main": "packages/rust/src/index.ts", + "assets": [ + "packages/rust/*.md", + { + "input": "./packages/rust/src", + "glob": "**/!(*.ts)", + "output": "./src" + }, + { + "input": "./packages/rust/src", + "glob": "**/*.d.ts", + "output": "./src" + }, + { + "input": "./packages/rust", + "glob": "generators.json", + "output": "." + }, + { + "input": "./packages/rust", + "glob": "executors.json", + "output": "." + }, + { + "input": "./packages/rust", + "glob": "migrations.json", + "output": "." + } + ] + } + } + } +} diff --git a/packages/rust/src/executors/build/executor.spec.ts b/packages/rust/src/executors/build/executor.spec.ts new file mode 100644 index 0000000..80266c7 --- /dev/null +++ b/packages/rust/src/executors/build/executor.spec.ts @@ -0,0 +1,15 @@ +// import * as cargoUtils from '../../utils/cargo'; +// jest.mock('../../utils/cargo', (): Partial => { +// return { runCargoSync: jest.fn(() => ({ output: 'output', success: true })) }; +// }); + +import {} from '@nx/devkit/testing'; +import { BuildExecutorSchema } from './schema'; + +const options: BuildExecutorSchema = {}; + +describe('Build Executor', () => { + it('can run', async () => { + // e2es should cover this + }); +}); diff --git a/packages/rust/src/executors/build/executor.ts b/packages/rust/src/executors/build/executor.ts new file mode 100644 index 0000000..84d3341 --- /dev/null +++ b/packages/rust/src/executors/build/executor.ts @@ -0,0 +1,16 @@ +import { ExecutorContext } from '@nx/devkit'; +import { buildCommand } from '../../utils/build-command'; +import { cargoCommand } from '../../utils/cargo'; +import { BuildExecutorSchema } from './schema'; + +export default async function* runExecutor( + options: BuildExecutorSchema, + context: ExecutorContext +): AsyncGenerator<{ success: boolean }> { + const command = buildCommand('build', options, context); + + const { success } = await cargoCommand(...command); + yield { + success, + }; +} diff --git a/packages/rust/src/executors/build/schema.d.ts b/packages/rust/src/executors/build/schema.d.ts new file mode 100644 index 0000000..7534641 --- /dev/null +++ b/packages/rust/src/executors/build/schema.d.ts @@ -0,0 +1,4 @@ +import { BaseOptions } from '../../models/base-options'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface BuildExecutorSchema extends BaseOptions {} diff --git a/packages/rust/src/executors/build/schema.json b/packages/rust/src/executors/build/schema.json new file mode 100644 index 0000000..0695457 --- /dev/null +++ b/packages/rust/src/executors/build/schema.json @@ -0,0 +1,138 @@ +{ + "version": 2, + "outputCapture": "direct-nodejs", + "$schema": "http://json-schema.org/schema", + "title": "Build executor", + "description": "", + "type": "object", + "properties": { + "release": { + "type": "boolean", + "default": false + }, + "target": { + "type": "string" + }, + "profile": { + "type": "string" + }, + "target-dir": { + "type": "string" + }, + "toolchain": { + "type": "string", + "enum": [ + "stable", + "beta", + "nightly" + ], + "default": "stable" + }, + "features": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Features of workspace members may be enabled with package-name/feature-name syntax. Array of names is supported" + }, + "all-features": { + "type": "boolean", + "default": false, + "description": "Build all binary targets" + }, + "lib": { + "type": "boolean", + "description": "Build the package's library", + "default": false + }, + "bin": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Build the specified binary. Array of names or common Unix glob patterns is supported" + }, + "bins": { + "type": "boolean", + "default": false, + "description": "Build all binary targets" + }, + "example": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Build the specified example. Array of names or common Unix glob patterns is supported" + }, + "examples": { + "type": "boolean", + "default": false, + "description": "Build all example targets" + }, + "test": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Build the specified test. Array of names or common Unix glob patterns is supported" + }, + "tests": { + "type": "boolean", + "default": false, + "description": "Build all test targets" + }, + "bench": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Build the specified bench. Array of names or common Unix glob patterns is supported" + }, + "benches": { + "type": "boolean", + "default": false, + "description": "Build all targets in benchmark mode that have the bench = true manifest flag set. By default this includes the library and binaries built as benchmarks, and bench targets. Be aware that this will also build any required dependencies, so the lib target may be built twice (once as a benchmark, and once as a dependency for binaries, benchmarks, etc.). Targets may be enabled or disabled by setting the bench flag in the manifest settings for the target." + }, + "all-targets": { + "type": "boolean", + "default": false, + "description": "Build all test targets" + } + }, + "required": [] +} diff --git a/packages/rust/src/executors/check/executor.spec.ts b/packages/rust/src/executors/check/executor.spec.ts new file mode 100644 index 0000000..3cca0a2 --- /dev/null +++ b/packages/rust/src/executors/check/executor.spec.ts @@ -0,0 +1,15 @@ +// import * as cargoUtils from '../../utils/cargo'; +// jest.mock('../../utils/cargo', (): Partial => { +// return { runCargoSync: jest.fn(() => ({ output: 'output', success: true })) }; +// }); + +import {} from '@nx/devkit/testing'; +import { CheckExecutorSchema } from './schema'; + +const options: CheckExecutorSchema = {}; + +describe('Build Executor', () => { + it('can run', async () => { + // e2es should cover this + }); +}); diff --git a/packages/rust/src/executors/check/executor.ts b/packages/rust/src/executors/check/executor.ts new file mode 100644 index 0000000..2e211d9 --- /dev/null +++ b/packages/rust/src/executors/check/executor.ts @@ -0,0 +1,16 @@ +import { ExecutorContext } from '@nx/devkit'; +import { buildCommand } from '../../utils/build-command'; +import { cargoCommand } from '../../utils/cargo'; +import { CheckExecutorSchema } from './schema'; + +export default async function* runExecutor( + options: CheckExecutorSchema, + context: ExecutorContext +): AsyncGenerator<{ success: boolean }> { + const command = buildCommand('check', options, context); + + const { success } = await cargoCommand(...command); + yield { + success, + }; +} diff --git a/packages/rust/src/executors/check/schema.d.ts b/packages/rust/src/executors/check/schema.d.ts new file mode 100644 index 0000000..33aac41 --- /dev/null +++ b/packages/rust/src/executors/check/schema.d.ts @@ -0,0 +1,4 @@ +import { BaseOptions } from '../../models/base-options'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface CheckExecutorSchema extends BaseOptions {} diff --git a/packages/rust/src/executors/check/schema.json b/packages/rust/src/executors/check/schema.json new file mode 100644 index 0000000..535da60 --- /dev/null +++ b/packages/rust/src/executors/check/schema.json @@ -0,0 +1,138 @@ +{ + "version": 2, + "outputCapture": "direct-nodejs", + "$schema": "http://json-schema.org/schema", + "title": "Check executor", + "description": "", + "type": "object", + "properties": { + "release": { + "type": "boolean", + "default": false + }, + "target": { + "type": "string" + }, + "profile": { + "type": "string" + }, + "target-dir": { + "type": "string" + }, + "toolchain": { + "type": "string", + "enum": [ + "stable", + "beta", + "nightly" + ], + "default": "stable" + }, + "features": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Features of workspace members may be enabled with package-name/feature-name syntax. Array of names is supported" + }, + "all-features": { + "type": "boolean", + "default": false, + "description": "Check all binary targets" + }, + "lib": { + "type": "boolean", + "description": "Check the package's library", + "default": false + }, + "bin": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Check the specified binary. Array of names or common Unix glob patterns is supported" + }, + "bins": { + "type": "boolean", + "default": false, + "description": "Check all binary targets" + }, + "example": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Check the specified example. Array of names or common Unix glob patterns is supported" + }, + "examples": { + "type": "boolean", + "default": false, + "description": "Check all example targets" + }, + "test": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Check the specified test. Array of names or common Unix glob patterns is supported" + }, + "tests": { + "type": "boolean", + "default": false, + "description": "Check all test targets" + }, + "bench": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Check the specified bench. Array of names or common Unix glob patterns is supported" + }, + "benches": { + "type": "boolean", + "default": false, + "description": "Check all targets in benchmark mode that have the bench = true manifest flag set. By default this includes the library and binaries built as benchmarks, and bench targets. Be aware that this will also build any required dependencies, so the lib target may be built twice (once as a benchmark, and once as a dependency for binaries, benchmarks, etc.). Targets may be enabled or disabled by setting the bench flag in the manifest settings for the target." + }, + "all-targets": { + "type": "boolean", + "default": false, + "description": "Check all test targets" + } + }, + "required": [] +} diff --git a/packages/rust/src/executors/lint/executor.spec.ts b/packages/rust/src/executors/lint/executor.spec.ts new file mode 100644 index 0000000..51a9359 --- /dev/null +++ b/packages/rust/src/executors/lint/executor.spec.ts @@ -0,0 +1,10 @@ +import { LintExecutorSchema } from './schema'; +import executor from './executor'; + +const options: LintExecutorSchema = {}; + +describe('Lint Executor', () => { + it('can run', async () => { + // e2es should cover this + }); +}); diff --git a/packages/rust/src/executors/lint/executor.ts b/packages/rust/src/executors/lint/executor.ts new file mode 100644 index 0000000..2bc53bf --- /dev/null +++ b/packages/rust/src/executors/lint/executor.ts @@ -0,0 +1,16 @@ +import { ExecutorContext } from '@nx/devkit'; +import { buildCommand } from '../../utils/build-command'; +import { cargoCommand } from '../../utils/cargo'; +import { LintExecutorSchema } from './schema'; + +export default async function* runExecutor( + options: LintExecutorSchema, + context: ExecutorContext +) { + const command = buildCommand('clippy', options, context); + + const { success } = await cargoCommand(...command); + yield { + success, + }; +} diff --git a/packages/rust/src/executors/lint/schema.d.ts b/packages/rust/src/executors/lint/schema.d.ts new file mode 100644 index 0000000..faf53e2 --- /dev/null +++ b/packages/rust/src/executors/lint/schema.d.ts @@ -0,0 +1,5 @@ +import { BaseOptions } from '../../models/base-options'; + +export interface LintExecutorSchema extends BaseOptions { + fix?: boolean; +} // eslint-disable-line diff --git a/packages/rust/src/executors/lint/schema.json b/packages/rust/src/executors/lint/schema.json new file mode 100644 index 0000000..ca671e1 --- /dev/null +++ b/packages/rust/src/executors/lint/schema.json @@ -0,0 +1,37 @@ +{ + "version": 2, + "outputCapture": "direct-nodejs", + "$schema": "http://json-schema.org/schema", + "title": "Lint executor", + "description": "", + "type": "object", + "properties": { + "release": { + "type": "boolean", + "default": false + }, + "target": { + "type": "string" + }, + "profile": { + "type": "string" + }, + "target-dir": { + "type": "string" + }, + "toolchain": { + "type": "string", + "enum": [ + "stable", + "beta", + "nightly" + ], + "default": "stable" + }, + "fix": { + "type": "boolean", + "default": false + } + }, + "required": [] +} diff --git a/packages/rust/src/executors/napi/executor.ts b/packages/rust/src/executors/napi/executor.ts new file mode 100644 index 0000000..cb4c28b --- /dev/null +++ b/packages/rust/src/executors/napi/executor.ts @@ -0,0 +1,54 @@ +import { ExecutorContext, joinPathFragments, workspaceRoot } from '@nx/devkit'; +import { NapiExecutorSchema } from './schema.js'; +import { join } from 'path'; +import { fileExists } from 'nx/src/utils/fileutils.js'; +import { cargoMetadata } from '../../utils/cargo'; + +export default async function runExecutor( + options: NapiExecutorSchema, + context: ExecutorContext +) { + const { NapiCli } = await import('@napi-rs/cli'); + const projectRoot = + context.projectGraph?.nodes[context.projectName ?? ''].data.root; + const packageJson = join(projectRoot ?? '.', 'package.json'); + if (!fileExists(packageJson)) { + throw new Error(`Could not find package.json at ${packageJson}`); + } + + const napi = new NapiCli(); + + const buildOptions: Parameters[0] = {}; + + buildOptions.platform = true; + buildOptions.jsBinding = options.jsFile; + buildOptions.dts = options.dts; + buildOptions.outputDir = options.dist; + buildOptions.manifestPath = join(projectRoot ?? '.', 'Cargo.toml'); + buildOptions.packageJsonPath = packageJson; + if (options.release) { + buildOptions.release = true; + } + + if (options.target) { + buildOptions.target = options.target; + } + + if (options.zig) { + buildOptions.crossCompile = true; + } + + const metadata = cargoMetadata(); + buildOptions.targetDir = + metadata?.target_directory ?? + joinPathFragments(workspaceRoot, 'dist', 'cargo'); + + if (process.env.VERCEL) { + // Vercel doesnt have support for cargo atm, so auto success builds + return { success: true }; + } + + const { task } = await napi.build(buildOptions); + const output = await task; + return { success: true, terminalOutput: output }; +} diff --git a/packages/rust/src/executors/napi/schema.d.ts b/packages/rust/src/executors/napi/schema.d.ts new file mode 100644 index 0000000..024281d --- /dev/null +++ b/packages/rust/src/executors/napi/schema.d.ts @@ -0,0 +1,8 @@ +export interface NapiExecutorSchema { + dist: string; + jsFile: string; + dts?: string; + release?: boolean; + target?: string; + zig?: boolean; +} diff --git a/packages/rust/src/executors/napi/schema.json b/packages/rust/src/executors/napi/schema.json new file mode 100644 index 0000000..b82517c --- /dev/null +++ b/packages/rust/src/executors/napi/schema.json @@ -0,0 +1,31 @@ +{ + "$schema": "http://json-schema.org/schema", + "version": 2, + "title": "Napi executor", + "description": "", + "type": "object", + "properties": { + "dist": { + "type": "string" + }, + "jsFile": { + "type": "string" + }, + "dts": { + "type": "string", + "default": "index.d.ts" + }, + "release": { + "type": "boolean", + "default": false + }, + "target": { + "type": "string" + }, + "zig": { + "type": "boolean", + "default": false + } + }, + "required": ["dist", "jsFile"] +} diff --git a/packages/rust/src/executors/release-publish/executor.ts b/packages/rust/src/executors/release-publish/executor.ts new file mode 100644 index 0000000..ca15203 --- /dev/null +++ b/packages/rust/src/executors/release-publish/executor.ts @@ -0,0 +1,87 @@ +import { ExecutorContext, joinPathFragments, output } from '@nx/devkit'; +import { execSync } from 'node:child_process'; +import { readFileSync } from 'node:fs'; +import { relative } from 'node:path'; +import { env as appendLocalEnv } from 'npm-run-path'; +import { parseCargoToml } from '../../utils/toml'; +import { PublishExecutorSchema } from './schema'; +import chalk = require('chalk'); + +const LARGE_BUFFER = 1024 * 1000000; + +function processEnv(color: boolean) { + const env = { + ...process.env, + ...appendLocalEnv(), + }; + + if (color) { + env.FORCE_COLOR = `${color}`; + } + return env; +} + +export default async function runExecutor( + options: PublishExecutorSchema, + context: ExecutorContext +) { + /** + * We need to check both the env var and the option because the executor may have been triggered + * indirectly via dependsOn, in which case the env var will be set, but the option will not. + */ + const isDryRun = process.env.NX_DRY_RUN === 'true' || options.dryRun || false; + + const projectConfig = + context.projectsConfigurations!.projects[context.projectName!]!; + + const packageRoot = joinPathFragments( + context.root, + options.packageRoot ?? projectConfig.root + ); + const workspaceRelativePackageRoot = relative(context.root, packageRoot); + + const cargoTomlPath = joinPathFragments(packageRoot, 'Cargo.toml'); + const cargoTomlContents = readFileSync(cargoTomlPath, 'utf-8'); + const cargoToml = parseCargoToml(cargoTomlContents); + const crateName = cargoToml.package.name; + + const cargoPublishCommandSegments = [ + `cargo publish --allow-dirty -p ${crateName}`, + ]; + + if (isDryRun) { + cargoPublishCommandSegments.push(`--dry-run`); + } + + try { + const command = cargoPublishCommandSegments.join(' '); + output.logSingleLine(`Running "${command}"...`); + + execSync(command, { + maxBuffer: LARGE_BUFFER, + env: processEnv(true), + cwd: packageRoot, + stdio: 'inherit', + }); + + console.log(''); + + if (isDryRun) { + console.log( + `Would publish to https://crates.io, but ${chalk.keyword('orange')( + '[dry-run]' + )} was set` + ); + } else { + console.log(`Published to https://crates.io`); + } + + return { + success: true, + }; + } catch (err: any) { + return { + success: false, + }; + } +} diff --git a/packages/rust/src/executors/release-publish/schema.d.ts b/packages/rust/src/executors/release-publish/schema.d.ts new file mode 100644 index 0000000..90fb809 --- /dev/null +++ b/packages/rust/src/executors/release-publish/schema.d.ts @@ -0,0 +1,4 @@ +export interface PublishExecutorSchema { + packageRoot?: string; + dryRun?: boolean; +} diff --git a/packages/rust/src/executors/release-publish/schema.json b/packages/rust/src/executors/release-publish/schema.json new file mode 100644 index 0000000..7ff8eb8 --- /dev/null +++ b/packages/rust/src/executors/release-publish/schema.json @@ -0,0 +1,18 @@ +{ + "$schema": "https://json-schema.org/schema", + "version": 2, + "title": "Implementation details of `nx release publish`", + "description": "DO NOT INVOKE DIRECTLY WITH `nx run`. Use `nx release publish` instead.", + "type": "object", + "properties": { + "packageRoot": { + "type": "string", + "description": "The root directory of the directory (containing a manifest file at its root) to publish. Defaults to the project root." + }, + "dryRun": { + "type": "boolean", + "description": "Whether to run the command without actually publishing the package to the registry." + } + }, + "required": [] +} diff --git a/packages/rust/src/executors/run/executor.spec.ts b/packages/rust/src/executors/run/executor.spec.ts new file mode 100644 index 0000000..1311f04 --- /dev/null +++ b/packages/rust/src/executors/run/executor.spec.ts @@ -0,0 +1,10 @@ +import { RunExecutorSchema } from './schema'; +import executor from './executor'; + +const options: RunExecutorSchema = {}; + +describe('Run Executor', () => { + it('can run', async () => { + // e2es should cover this + }); +}); diff --git a/packages/rust/src/executors/run/executor.ts b/packages/rust/src/executors/run/executor.ts new file mode 100644 index 0000000..03727bc --- /dev/null +++ b/packages/rust/src/executors/run/executor.ts @@ -0,0 +1,16 @@ +import { ExecutorContext } from '@nx/devkit'; +import { buildCommand } from '../../utils/build-command'; +import { cargoRunCommand } from '../../utils/cargo'; +import { RunExecutorSchema } from './schema'; + +export default async function* runExecutor( + options: RunExecutorSchema, + context: ExecutorContext +) { + const command = buildCommand('run', options, context); + + const { success } = await cargoRunCommand(...command); + yield { + success, + }; +} diff --git a/packages/rust/src/executors/run/schema.d.ts b/packages/rust/src/executors/run/schema.d.ts new file mode 100644 index 0000000..fa5e63d --- /dev/null +++ b/packages/rust/src/executors/run/schema.d.ts @@ -0,0 +1,3 @@ +import { BaseOptions } from '../../models/base-options'; + +export interface RunExecutorSchema extends BaseOptions {} // eslint-disable-line diff --git a/packages/rust/src/executors/run/schema.json b/packages/rust/src/executors/run/schema.json new file mode 100644 index 0000000..5f7cad8 --- /dev/null +++ b/packages/rust/src/executors/run/schema.json @@ -0,0 +1,77 @@ +{ + "version": 2, + "outputCapture": "direct-nodejs", + "$schema": "http://json-schema.org/schema", + "title": "Run executor", + "description": "", + "type": "object", + "properties": { + "release": { + "type": "boolean", + "default": false + }, + "target": { + "type": "string" + }, + "profile": { + "type": "string" + }, + "target-dir": { + "type": "string" + }, + "cwd": { + "type": "string" + }, + "toolchain": { + "type": "string", + "enum": [ + "stable", + "beta", + "nightly" + ], + "default": "stable" + }, + "features": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Features of workspace members may be enabled with package-name/feature-name syntax. Array of names is supported" + }, + "all-features": { + "type": "boolean", + "default": false, + "description": "Build all binary targets" + }, + "bin": { + "type": "string", + "description": "Run the specified binary" + }, + "example": { + "type": "string", + "description": "Run the specified example" + }, + "args": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ], + "description": "Extra arguments. You can pass them as follows: nx run project:run --args='--wait=100'." + } + }, + "required": [] +} diff --git a/packages/rust/src/executors/test/executor.spec.ts b/packages/rust/src/executors/test/executor.spec.ts new file mode 100644 index 0000000..42d8bec --- /dev/null +++ b/packages/rust/src/executors/test/executor.spec.ts @@ -0,0 +1,10 @@ +import { TestExecutorSchema } from './schema'; +import executor from './executor'; + +const options: TestExecutorSchema = {}; + +describe('Test Executor', () => { + it('can run', async () => { + // e2es should cover this + }); +}); diff --git a/packages/rust/src/executors/test/executor.ts b/packages/rust/src/executors/test/executor.ts new file mode 100644 index 0000000..3d04ab7 --- /dev/null +++ b/packages/rust/src/executors/test/executor.ts @@ -0,0 +1,16 @@ +import { ExecutorContext } from '@nx/devkit'; +import { buildCommand } from '../../utils/build-command'; +import { cargoCommand } from '../../utils/cargo'; +import { TestExecutorSchema } from './schema'; + +export default async function* runExecutor( + options: TestExecutorSchema, + context: ExecutorContext +) { + const command = buildCommand('test', options, context); + + const { success } = await cargoCommand(...command); + yield { + success, + }; +} diff --git a/packages/rust/src/executors/test/schema.d.ts b/packages/rust/src/executors/test/schema.d.ts new file mode 100644 index 0000000..82c4d0d --- /dev/null +++ b/packages/rust/src/executors/test/schema.d.ts @@ -0,0 +1,7 @@ +import { BaseOptions } from '../../models/base-options'; + +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface TestExecutorSchema extends BaseOptions { + 'no-run'?: boolean; + 'no-fail-fast'?: boolean; +} diff --git a/packages/rust/src/executors/test/schema.json b/packages/rust/src/executors/test/schema.json new file mode 100644 index 0000000..bca0e38 --- /dev/null +++ b/packages/rust/src/executors/test/schema.json @@ -0,0 +1,160 @@ +{ + "version": 2, + "outputCapture": "pipe", + "$schema": "http://json-schema.org/schema", + "title": "Test executor", + "description": "", + "type": "object", + "properties": { + "no-run": { + "type": "boolean", + "default": false + }, + "no-fail-fast": { + "type": "boolean", + "default": false + }, + "release": { + "type": "boolean", + "default": false + }, + "target": { + "type": "string" + }, + "profile": { + "type": "string" + }, + "target-dir": { + "type": "string" + }, + "toolchain": { + "type": "string", + "enum": [ + "stable", + "beta", + "nightly" + ], + "default": "stable" + }, + "features": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Features of workspace members may be enabled with package-name/feature-name syntax. Array of names is supported" + }, + "all-features": { + "type": "boolean", + "default": false, + "description": "Build all binary targets" + }, + "lib": { + "type": "boolean", + "description": "Build the package's library", + "default": false + }, + "bin": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Build the specified binary. Array of names or common Unix glob patterns is supported" + }, + "bins": { + "type": "boolean", + "default": false, + "description": "Build all binary targets" + }, + "example": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Build the specified example. Array of names or common Unix glob patterns is supported" + }, + "examples": { + "type": "boolean", + "default": false, + "description": "Build all example targets" + }, + "test": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Build the specified test. Array of names or common Unix glob patterns is supported" + }, + "tests": { + "type": "boolean", + "default": false, + "description": "Build all test targets" + }, + "bench": { + "oneOf": [ + { + "type": "string" + }, + { + "type": "array", + "items": { + "type": "string" + } + } + ], + "description": "Build the specified bench. Array of names or common Unix glob patterns is supported" + }, + "benches": { + "type": "boolean", + "default": false, + "description": "Build all targets in benchmark mode that have the bench = true manifest flag set. By default this includes the library and binaries built as benchmarks, and bench targets. Be aware that this will also build any required dependencies, so the lib target may be built twice (once as a benchmark, and once as a dependency for binaries, benchmarks, etc.). Targets may be enabled or disabled by setting the bench flag in the manifest settings for the target." + }, + "all-targets": { + "type": "boolean", + "default": false, + "description": "Build all test targets" + }, + "args": { + "oneOf": [ + { + "type": "array", + "items": { + "type": "string" + } + }, + { + "type": "string" + } + ], + "description": "Extra arguments. You can pass them as follows: nx run project:run --args='--wait=100'." + } + }, + "required": [] +} diff --git a/packages/rust/src/executors/wasm-pack/executor.spec.ts b/packages/rust/src/executors/wasm-pack/executor.spec.ts new file mode 100644 index 0000000..2a2f988 --- /dev/null +++ b/packages/rust/src/executors/wasm-pack/executor.spec.ts @@ -0,0 +1,11 @@ +import { WasmPackExecutorSchema } from './schema'; +import executor from './executor'; + + + +xdescribe('Wasm Executor', () => { + it('can run', async () => { + // const output = await executor(options); + // expect(output.success).toBe(true); + }); +}); diff --git a/packages/rust/src/executors/wasm-pack/executor.ts b/packages/rust/src/executors/wasm-pack/executor.ts new file mode 100644 index 0000000..9f28904 --- /dev/null +++ b/packages/rust/src/executors/wasm-pack/executor.ts @@ -0,0 +1,29 @@ +import { ExecutorContext } from '@nx/devkit'; +import { buildCommand } from '../../utils/build-command'; +import { runProcess } from '../../utils/run-process'; +import { WasmPackExecutorSchema } from './schema'; + +interface WasmPackOptions extends Omit { + 'out-dir': string; +} + +export default async function runExecutor( + options: WasmPackExecutorSchema, + context: ExecutorContext +) { + const wasmPackOptions = wasmPackArgs(options); + const args = buildCommand('build', wasmPackOptions, context); + return runWasmPack(...args); +} + +function runWasmPack(...args: string[]) { + return runProcess('wasm-pack', ...args); +} + +function wasmPackArgs(options: WasmPackExecutorSchema): WasmPackOptions { + return { + release: options.release, + target: options.target, + 'out-dir': options['target-dir'], + }; +} diff --git a/packages/rust/src/executors/wasm-pack/schema.d.ts b/packages/rust/src/executors/wasm-pack/schema.d.ts new file mode 100644 index 0000000..3ae3473 --- /dev/null +++ b/packages/rust/src/executors/wasm-pack/schema.d.ts @@ -0,0 +1,5 @@ +export interface WasmPackExecutorSchema { + ['target-dir']: string; + target: 'bundler' | 'nodejs' | 'web' | 'no-module'; + release: boolean; +} diff --git a/packages/rust/src/executors/wasm-pack/schema.json b/packages/rust/src/executors/wasm-pack/schema.json new file mode 100644 index 0000000..f8934d5 --- /dev/null +++ b/packages/rust/src/executors/wasm-pack/schema.json @@ -0,0 +1,27 @@ +{ + "$schema": "http://json-schema.org/schema", + "title": "Wasm Pack executor", + "description": "", + "type": "object", + "properties": { + "release": { + "type": "boolean", + "default": false + }, + "target": { + "type": "string", + "enum": [ + "bundler", + "nodejs", + "web", + "no-module" + ], + "default": "bundler" + }, + "target-dir": { + "type": "string", + "default": "pkg" + } + }, + "required": [] +} diff --git a/packages/rust/src/generators/add-napi/files/build.rs__template__ b/packages/rust/src/generators/add-napi/files/build.rs__template__ new file mode 100644 index 0000000..9fc2367 --- /dev/null +++ b/packages/rust/src/generators/add-napi/files/build.rs__template__ @@ -0,0 +1,5 @@ +extern crate napi_build; + +fn main() { + napi_build::setup(); +} diff --git a/packages/rust/src/generators/add-napi/files/index.d.ts__template__ b/packages/rust/src/generators/add-napi/files/index.d.ts__template__ new file mode 100644 index 0000000..6d85d51 --- /dev/null +++ b/packages/rust/src/generators/add-napi/files/index.d.ts__template__ @@ -0,0 +1,6 @@ +/* tslint:disable */ +/* eslint-disable */ + +/* auto-generated by NAPI-RS */ + +export function sum(a: number, b: number): number diff --git a/packages/rust/src/generators/add-napi/files/index.js__template__ b/packages/rust/src/generators/add-napi/files/index.js__template__ new file mode 100644 index 0000000..f0e5c89 --- /dev/null +++ b/packages/rust/src/generators/add-napi/files/index.js__template__ @@ -0,0 +1,251 @@ +const { existsSync, readFileSync } = require('fs') +const { join } = require('path') + +const { platform, arch } = process + +let nativeBinding = null +let localFileExisted = false +let loadError = null + +function isMusl() { + // For Node 10 + if (!process.report || typeof process.report.getReport !== 'function') { + try { + const lddPath = require('child_process').execSync('which ldd').toString().trim(); + return readFileSync(lddPath, 'utf8').includes('musl') + } catch (e) { + return true + } + } else { + const { glibcVersionRuntime } = process.report.getReport().header + return !glibcVersionRuntime + } +} + +switch (platform) { + case 'android': + switch (arch) { + case 'arm64': + localFileExisted = existsSync(join(__dirname, '<%= projectName %>.android-arm64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.android-arm64.node') + } else { + nativeBinding = require('<%= packageName %>-android-arm64') + } + } catch (e) { + loadError = e + } + break + case 'arm': + localFileExisted = existsSync(join(__dirname, '<%= projectName %>.android-arm-eabi.node')) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.android-arm-eabi.node') + } else { + nativeBinding = require('<%= packageName %>-android-arm-eabi') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Android ${arch}`) + } + break + case 'win32': + switch (arch) { + case 'x64': + localFileExisted = existsSync( + join(__dirname, '<%= projectName %>.win32-x64-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.win32-x64-msvc.node') + } else { + nativeBinding = require('<%= packageName %>-win32-x64-msvc') + } + } catch (e) { + loadError = e + } + break + case 'ia32': + localFileExisted = existsSync( + join(__dirname, '<%= projectName %>.win32-ia32-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.win32-ia32-msvc.node') + } else { + nativeBinding = require('<%= packageName %>-win32-ia32-msvc') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync( + join(__dirname, '<%= projectName %>.win32-arm64-msvc.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.win32-arm64-msvc.node') + } else { + nativeBinding = require('<%= packageName %>-win32-arm64-msvc') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Windows: ${arch}`) + } + break + case 'darwin': + localFileExisted = existsSync(join(__dirname, '<%= projectName %>.darwin-universal.node')) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.darwin-universal.node') + } else { + nativeBinding = require('<%= packageName %>-darwin-universal') + } + break + } catch {} + switch (arch) { + case 'x64': + localFileExisted = existsSync(join(__dirname, '<%= projectName %>.darwin-x64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.darwin-x64.node') + } else { + nativeBinding = require('<%= packageName %>-darwin-x64') + } + } catch (e) { + loadError = e + } + break + case 'arm64': + localFileExisted = existsSync( + join(__dirname, '<%= projectName %>.darwin-arm64.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.darwin-arm64.node') + } else { + nativeBinding = require('<%= packageName %>-darwin-arm64') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on macOS: ${arch}`) + } + break + case 'freebsd': + if (arch !== 'x64') { + throw new Error(`Unsupported architecture on FreeBSD: ${arch}`) + } + localFileExisted = existsSync(join(__dirname, '<%= projectName %>.freebsd-x64.node')) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.freebsd-x64.node') + } else { + nativeBinding = require('<%= packageName %>-freebsd-x64') + } + } catch (e) { + loadError = e + } + break + case 'linux': + switch (arch) { + case 'x64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, '<%= projectName %>.linux-x64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.linux-x64-musl.node') + } else { + nativeBinding = require('<%= packageName %>-linux-x64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, '<%= projectName %>.linux-x64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.linux-x64-gnu.node') + } else { + nativeBinding = require('<%= packageName %>-linux-x64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 'arm64': + if (isMusl()) { + localFileExisted = existsSync( + join(__dirname, '<%= projectName %>.linux-arm64-musl.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.linux-arm64-musl.node') + } else { + nativeBinding = require('<%= packageName %>-linux-arm64-musl') + } + } catch (e) { + loadError = e + } + } else { + localFileExisted = existsSync( + join(__dirname, '<%= projectName %>.linux-arm64-gnu.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.linux-arm64-gnu.node') + } else { + nativeBinding = require('<%= packageName %>-linux-arm64-gnu') + } + } catch (e) { + loadError = e + } + } + break + case 'arm': + localFileExisted = existsSync( + join(__dirname, '<%= projectName %>.linux-arm-gnueabihf.node') + ) + try { + if (localFileExisted) { + nativeBinding = require('./<%= projectName %>.linux-arm-gnueabihf.node') + } else { + nativeBinding = require('<%= packageName %>-linux-arm-gnueabihf') + } + } catch (e) { + loadError = e + } + break + default: + throw new Error(`Unsupported architecture on Linux: ${arch}`) + } + break + default: + throw new Error(`Unsupported OS: ${platform}, architecture: ${arch}`) +} + +if (!nativeBinding) { + if (loadError) { + throw loadError + } + throw new Error(`Failed to load native binding`) +} + +const { sum } = nativeBinding + +module.exports.sum = sum diff --git a/packages/rust/src/generators/add-napi/files/package.json__template__ b/packages/rust/src/generators/add-napi/files/package.json__template__ new file mode 100644 index 0000000..d57f900 --- /dev/null +++ b/packages/rust/src/generators/add-napi/files/package.json__template__ @@ -0,0 +1,25 @@ +{ + "name": "<%= packageName %>", + "version": "0.0.0", + "main": "index.js", + "types": "index.d.ts", + "napi": { + "binaryName": "<%= projectName %>", + "packageName": "<%= packageName %>", + "targets": [ + "aarch64-apple-darwin", + "aarch64-unknown-linux-gnu", + "aarch64-unknown-linux-musl", + "aarch64-pc-windows-msvc", + "armv7-unknown-linux-gnueabihf", + "x86_64-unknown-linux-musl", + "x86_64-unknown-freebsd", + "x86_64-apple-darwin", + "i686-pc-windows-msvc", + "wasm32-wasip1-threads" + ] + }, + "engines": { + "node": ">= 10" + } +} diff --git a/packages/rust/src/generators/add-napi/files/src/lib.rs__template__ b/packages/rust/src/generators/add-napi/files/src/lib.rs__template__ new file mode 100644 index 0000000..0ee2a9f --- /dev/null +++ b/packages/rust/src/generators/add-napi/files/src/lib.rs__template__ @@ -0,0 +1,7 @@ +#[macro_use] +extern crate napi_derive; + +#[napi] +pub fn sum(a: i32, b: i32) -> i32 { + a + b +} diff --git a/packages/rust/src/generators/add-napi/generator.spec.ts b/packages/rust/src/generators/add-napi/generator.spec.ts new file mode 100644 index 0000000..3f36f58 --- /dev/null +++ b/packages/rust/src/generators/add-napi/generator.spec.ts @@ -0,0 +1,91 @@ +import { Tree, readProjectConfiguration } from '@nx/devkit'; +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; + +import libraryGenerator from '../library/generator'; +import generator from './generator'; +import { AddNapiGeneratorSchema } from './schema'; + +jest.mock('@nx/devkit', (): typeof import('@nx/devkit') => { + const originalModule = jest.requireActual('@nx/devkit'); + return { + ...originalModule, + ensurePackage: jest.fn(), + }; +}); + +describe('add-napi generator', () => { + let appTree: Tree; + const options: AddNapiGeneratorSchema = { project: 'test' }; + + beforeEach(async () => { + appTree = createTreeWithEmptyWorkspace(); + await libraryGenerator(appTree, { name: 'test' }); + }); + + it('should update the Cargo.toml file', async () => { + await generator(appTree, options); + const cargoString = appTree.read('./test/Cargo.toml')?.toString() ?? ''; + expect(cargoString).toMatchInlineSnapshot(` + " + [package] + name = 'test' + version = '0.1.0' + edition = '2021' + + [dependencies] + napi = { version = '2.10.2', default-features = false, features = [ + 'napi4', + ] } + napi-derive = '2.9.3' + + [lib] + crate-type = [ + 'cdylib', + ] + + [build-dependencies] + napi-build = '2.0.1' + " + `); + }); + + it('should update the base tsconfig file', async () => { + await generator(appTree, options); + expect(JSON.parse(appTree.read('tsconfig.base.json')?.toString() ?? '')) + .toMatchInlineSnapshot(` + Object { + "compilerOptions": Object { + "paths": Object { + "@proj/test": Array [ + "test/index.d.ts", + ], + }, + }, + } + `); + }); + + it('should update a project', async () => { + await generator(appTree, options); + const project = readProjectConfiguration(appTree, 'test'); + expect(project.targets?.build).toMatchInlineSnapshot(` + Object { + "cache": true, + "configurations": Object { + "production": Object { + "dist": "dist/test", + "release": true, + }, + }, + "executor": "@loafle/nx-rust:napi", + "options": Object { + "dist": "test", + "jsFile": "index.js", + }, + "outputs": Array [ + "{workspaceRoot}/test", + ], + } + `); + }); +}); diff --git a/packages/rust/src/generators/add-napi/generator.ts b/packages/rust/src/generators/add-napi/generator.ts new file mode 100644 index 0000000..754ca29 --- /dev/null +++ b/packages/rust/src/generators/add-napi/generator.ts @@ -0,0 +1,205 @@ +import { + addDependenciesToPackageJson, + formatFiles, + generateFiles, + getProjects, + joinPathFragments, + names, + offsetFromRoot, + ProjectConfiguration, + readJson, + Tree, + updateJson, + updateProjectConfiguration, +} from '@nx/devkit'; +import * as path from 'path'; +import { + modifyCargoTable, + parseCargoTomlWithTree, + stringifyCargoToml, +} from '../../utils/toml'; +import { + NAPI_EMNAPI, + NAPI_VERSION, + NAPI_WASM_RUNTIME, +} from '../../utils/versions'; +import { AddNapiGeneratorSchema } from './schema'; + +interface NormalizedSchema extends AddNapiGeneratorSchema { + projectName: string; + projectRoot: string; + packageName: string; + offsetFromRoot: string; + dryRun?: boolean; +} + +export default async function (tree: Tree, options: AddNapiGeneratorSchema) { + const project = getProjects(tree).get(options.project); + if (!project) { + throw 'Project not found'; + } + + const normalizedOptions = normalizeOptions(tree, options, project); + addFiles(tree, normalizedOptions); + updateCargo(tree, normalizedOptions); + const addPackage = addDependenciesToPackageJson( + tree, + {}, + { + '@napi-rs/cli': NAPI_VERSION, + '@napi-rs/wasm-runtime': NAPI_WASM_RUNTIME, + emnapi: NAPI_EMNAPI, + } + ); + updateGitIgnore(tree); + updateTsConfig(tree, normalizedOptions); + updateProjectConfiguration(tree, normalizedOptions.projectName, { + ...project, + targets: { + ...project.targets, + build: { + cache: true, + outputs: [`{workspaceRoot}/${normalizedOptions.projectRoot}`], + executor: '@loafle/nx-rust:napi', + options: { + dist: normalizedOptions.projectRoot, + jsFile: 'index.js', + }, + configurations: { + production: { + dist: `dist/${normalizedOptions.projectName}`, + release: true, + }, + }, + }, + }, + }); + await formatFiles(tree); + + return async () => { + await addPackage(); + const { NapiCli } = await import('@napi-rs/cli'); + const napi = new NapiCli(); + + await napi.createNpmDirs({ + npmDir: `${normalizedOptions.projectRoot}/npm`, + packageJsonPath: `${normalizedOptions.projectRoot}/package.json`, + dryRun: normalizedOptions.dryRun, + }); + }; +} + +function normalizeOptions( + tree: Tree, + options: AddNapiGeneratorSchema, + project: ProjectConfiguration +): NormalizedSchema { + const npmScope = getNpmScope(tree); + const projectName = project.name ?? options.project; + const packageName = npmScope + ? `@${npmScope}/${names(projectName).fileName}` + : projectName; + return { + ...options, + projectName, + projectRoot: project.root, + packageName, + offsetFromRoot: offsetFromRoot(project.root), + }; +} + +/** + * Read the npm scope that a workspace should use by default + */ +function getNpmScope(tree: Tree) { + const { name } = tree.exists('package.json') + ? readJson(tree, 'package.json') + : { name: null }; + if (name?.startsWith('@')) { + return name.split('/')[0].substring(1); + } +} + +function getRootTsConfigPathInTree(tree: Tree) { + for (const path of ['tsconfig.base.json', 'tsconfig.json']) { + if (tree.exists(path)) { + return path; + } + } + return 'tsconfig.base.json'; +} + +function addFiles(tree: Tree, options: NormalizedSchema) { + const templateOptions = { + ...options, + ...names(options.project), + template: '', + }; + generateFiles( + tree, + path.join(__dirname, 'files'), + options.projectRoot, + templateOptions + ); +} + +function updateCargo(tree: Tree, options: NormalizedSchema) { + const cargoToml = parseCargoTomlWithTree( + tree, + options.projectRoot, + options.projectName + ); + + modifyCargoTable(cargoToml, 'lib', 'crate-type', ['cdylib']); + modifyCargoTable(cargoToml, 'dependencies', 'napi', { + version: '2.10.2', + 'default-features': false, + features: ['napi4'], + }); + modifyCargoTable(cargoToml, 'dependencies', 'napi-derive', '2.9.3'); + modifyCargoTable(cargoToml, 'build-dependencies', 'napi-build', '2.0.1'); + + tree.write( + options.projectRoot + '/Cargo.toml', + stringifyCargoToml(cargoToml) + ); +} + +function updateGitIgnore(tree: Tree) { + if (!tree.exists('.gitignore')) { + return; + } + + let gitIgnore = tree.read('.gitignore')?.toString() ?? ''; + gitIgnore += '\n*.node'; + tree.write('.gitignore', gitIgnore); +} + +function updateTsConfig(tree: Tree, options: NormalizedSchema) { + if (!tree.exists('tsconfig.base.json')) { + return; + } + + const tsConfig = getRootTsConfigPathInTree(tree); + + if (!tsConfig) { + return; + } + + updateJson(tree, tsConfig, (json) => { + const c = json.compilerOptions; + c.paths = c.paths || {}; + + if (c.paths[options.packageName]) { + throw new Error( + `You already have a library using the import path "${options.packageName}". Make sure to specify a unique one.` + ); + } + + c.paths[options.packageName] = [ + joinPathFragments(options.projectRoot, 'index.d.ts'), + ]; + + return json; + }); +} diff --git a/packages/rust/src/generators/add-napi/schema.d.ts b/packages/rust/src/generators/add-napi/schema.d.ts new file mode 100644 index 0000000..844f6b7 --- /dev/null +++ b/packages/rust/src/generators/add-napi/schema.d.ts @@ -0,0 +1,3 @@ +export interface AddNapiGeneratorSchema { + project: string; +} diff --git a/packages/rust/src/generators/add-napi/schema.json b/packages/rust/src/generators/add-napi/schema.json new file mode 100644 index 0000000..e7189f0 --- /dev/null +++ b/packages/rust/src/generators/add-napi/schema.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json-schema.org/schema", + "$id": "AddNapi", + "title": "", + "type": "object", + "properties": { + "project": { + "description": "The name of the project", + "$default": { + "$source": "projectName", + "index": 0 + } + } + }, + "required": [] +} diff --git a/packages/rust/src/generators/add-wasm-reference/files/src/index.ts__template__ b/packages/rust/src/generators/add-wasm-reference/files/src/index.ts__template__ new file mode 100644 index 0000000..dde3cb6 --- /dev/null +++ b/packages/rust/src/generators/add-wasm-reference/files/src/index.ts__template__ @@ -0,0 +1 @@ +const variable = "<%= projectName %>"; \ No newline at end of file diff --git a/packages/rust/src/generators/add-wasm-reference/generator.spec.ts b/packages/rust/src/generators/add-wasm-reference/generator.spec.ts new file mode 100644 index 0000000..55d9d6a --- /dev/null +++ b/packages/rust/src/generators/add-wasm-reference/generator.spec.ts @@ -0,0 +1,20 @@ +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import { Tree, readProjectConfiguration } from '@nx/devkit'; + +import generator from './generator'; +import { AddWasmReferenceGeneratorSchema } from './schema'; + +describe('add-wasm-reference generator', () => { + let appTree: Tree; + const options: AddWasmReferenceGeneratorSchema = { name: 'test' }; + + beforeEach(() => { + appTree = createTreeWithEmptyWorkspace(); + }); + + it('should run successfully', async () => { + await generator(appTree, options); + const config = readProjectConfiguration(appTree, 'test'); + expect(config).toBeDefined(); + }); +}); diff --git a/packages/rust/src/generators/add-wasm-reference/generator.ts b/packages/rust/src/generators/add-wasm-reference/generator.ts new file mode 100644 index 0000000..2def1ea --- /dev/null +++ b/packages/rust/src/generators/add-wasm-reference/generator.ts @@ -0,0 +1,76 @@ +import { + addProjectConfiguration, + formatFiles, + generateFiles, + getWorkspaceLayout, + names, + offsetFromRoot, + Tree, +} from '@nx/devkit'; +import * as path from 'path'; +import { AddWasmReferenceGeneratorSchema } from './schema'; + +interface NormalizedSchema extends AddWasmReferenceGeneratorSchema { + projectName: string; + projectRoot: string; + projectDirectory: string; + parsedTags: string[]; +} + +function normalizeOptions( + tree: Tree, + options: AddWasmReferenceGeneratorSchema +): NormalizedSchema { + const name = names(options.name).fileName; + const projectDirectory = options.directory + ? `${names(options.directory).fileName}/${name}` + : name; + const projectName = projectDirectory.replace(new RegExp('/', 'g'), '-'); + const projectRoot = `${getWorkspaceLayout(tree).libsDir}/${projectDirectory}`; + const parsedTags = options.tags + ? options.tags.split(',').map((s) => s.trim()) + : []; + + return { + ...options, + projectName, + projectRoot, + projectDirectory, + parsedTags, + }; +} + +function addFiles(tree: Tree, options: NormalizedSchema) { + const templateOptions = { + ...options, + ...names(options.name), + offsetFromRoot: offsetFromRoot(options.projectRoot), + template: '', + }; + generateFiles( + tree, + path.join(__dirname, 'files'), + options.projectRoot, + templateOptions + ); +} + +export default async function ( + tree: Tree, + options: AddWasmReferenceGeneratorSchema +) { + const normalizedOptions = normalizeOptions(tree, options); + addProjectConfiguration(tree, normalizedOptions.projectName, { + root: normalizedOptions.projectRoot, + projectType: 'library', + sourceRoot: `${normalizedOptions.projectRoot}/src`, + targets: { + build: { + executor: '@loafle/nx-rust:build', + }, + }, + tags: normalizedOptions.parsedTags, + }); + addFiles(tree, normalizedOptions); + await formatFiles(tree); +} diff --git a/packages/rust/src/generators/add-wasm-reference/schema.d.ts b/packages/rust/src/generators/add-wasm-reference/schema.d.ts new file mode 100644 index 0000000..6f35d03 --- /dev/null +++ b/packages/rust/src/generators/add-wasm-reference/schema.d.ts @@ -0,0 +1,5 @@ +export interface AddWasmReferenceGeneratorSchema { + name: string; + tags?: string; + directory?: string; +} \ No newline at end of file diff --git a/packages/rust/src/generators/add-wasm-reference/schema.json b/packages/rust/src/generators/add-wasm-reference/schema.json new file mode 100644 index 0000000..1f0264c --- /dev/null +++ b/packages/rust/src/generators/add-wasm-reference/schema.json @@ -0,0 +1,30 @@ +{ + "$schema": "http://json-schema.org/schema", + "$id": "AddWasmReference", + "title": "", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "What name would you like to use?" + }, + "tags": { + "type": "string", + "description": "Add tags to the project (used for linting)", + "alias": "t" + }, + "directory": { + "type": "string", + "description": "A directory where the project is placed", + "alias": "d" + } + }, + "required": [ + "name" + ] +} diff --git a/packages/rust/src/generators/add-wasm/files/src/lib.rs__template__ b/packages/rust/src/generators/add-wasm/files/src/lib.rs__template__ new file mode 100644 index 0000000..7849240 --- /dev/null +++ b/packages/rust/src/generators/add-wasm/files/src/lib.rs__template__ @@ -0,0 +1,32 @@ +mod utils; + +use wasm_bindgen::prelude::*; +<%_ if (useWebSys) { _%> +use web_sys::window; +<%_ } _%> + +// When the `wee_alloc` feature is enabled, use `wee_alloc` as the global +// allocator. +#[cfg(feature = "wee_alloc")] +#[global_allocator] +static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; + +<%_ if (!useWebSys) { _%> +#[wasm_bindgen] +extern { + fn alert(s: &str); +} + +#[wasm_bindgen] +pub fn greet() { + alert("Hello, <%= projectName %>!"); +} +<%_ } _%> +<%_ if (useWebSys) { _%> +#[wasm_bindgen] +pub fn greet() -> Result<(), JsValue> { + window() + .ok_or("no window")? + .alert_with_message("Hello, world!") +} +<%_ } _%> diff --git a/packages/rust/src/generators/add-wasm/files/src/utils.rs__template__ b/packages/rust/src/generators/add-wasm/files/src/utils.rs__template__ new file mode 100644 index 0000000..b1d7929 --- /dev/null +++ b/packages/rust/src/generators/add-wasm/files/src/utils.rs__template__ @@ -0,0 +1,10 @@ +pub fn set_panic_hook() { + // When the `console_error_panic_hook` feature is enabled, we can call the + // `set_panic_hook` function at least once during initialization, and then + // we will get better error messages if our code ever panics. + // + // For more details see + // https://github.com/rustwasm/console_error_panic_hook#readme + #[cfg(feature = "console_error_panic_hook")] + console_error_panic_hook::set_once(); +} diff --git a/packages/rust/src/generators/add-wasm/generator.spec.ts b/packages/rust/src/generators/add-wasm/generator.spec.ts new file mode 100644 index 0000000..2a6f532 --- /dev/null +++ b/packages/rust/src/generators/add-wasm/generator.spec.ts @@ -0,0 +1,141 @@ +import { Tree } from '@nx/devkit'; +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import libraryGenerator from '../library/generator'; +import generator from './generator'; +import { AddWasmGeneratorSchema } from './schema'; + +describe('add-wasm generator', () => { + let appTree: Tree; + const options: AddWasmGeneratorSchema = { + project: 'test_lib', + generateDefaultLib: true, + useWebSys: false, + }; + + beforeEach(async () => { + appTree = createTreeWithEmptyWorkspace(); + await libraryGenerator(appTree, { + name: 'test_lib', + }); + }); + + it('should add wasm to an existing library', async () => { + await generator(appTree, options); + const lib = appTree.read('./test_lib/src/lib.rs')?.toString(); + expect(lib).toMatchInlineSnapshot(` + "mod utils; + + use wasm_bindgen::prelude::*; + + // When the \`wee_alloc\` feature is enabled, use \`wee_alloc\` as the global + // allocator. + #[cfg(feature = \\"wee_alloc\\")] + #[global_allocator] + static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; + + #[wasm_bindgen] + extern { + fn alert(s: &str); + } + + #[wasm_bindgen] + pub fn greet() { + alert(\\"Hello, test_lib!\\"); + } + " + `); + + const cargoString = appTree.read('./test_lib/Cargo.toml')?.toString() ?? ''; + expect(cargoString).toMatchInlineSnapshot(` + " + [package] + name = 'test_lib' + version = '0.1.0' + edition = '2021' + + [dependencies] + wasm-bindgen = '0.2' + console_error_panic_hook = { version = '0.1.6', optional = true } + wee_alloc = { version = '0.4', optional = true } + + [lib] + crate-type = [ + 'cdylib', + 'rlib', + ] + + [feature] + default = [ + 'console_error_panic_hook', + ] + + [dev-dependencies] + wasm-bindgen-test = '0.3' + + [profile.release] + opt-level = 's' #Tell \`rustc\` to optimize for small code size. + " + `); + }); + + it('should add wasm to an existing library with webSys', async () => { + await generator(appTree, { ...options, useWebSys: true }); + const lib = appTree.read('./test_lib/src/lib.rs')?.toString(); + expect(lib).toMatchInlineSnapshot(` + "mod utils; + + use wasm_bindgen::prelude::*; + use web_sys::window; + + // When the \`wee_alloc\` feature is enabled, use \`wee_alloc\` as the global + // allocator. + #[cfg(feature = \\"wee_alloc\\")] + #[global_allocator] + static ALLOC: wee_alloc::WeeAlloc = wee_alloc::WeeAlloc::INIT; + + #[wasm_bindgen] + pub fn greet() -> Result<(), JsValue> { + window() + .ok_or(\\"no window\\")? + .alert_with_message(\\"Hello, world!\\") + } + " + `); + + const cargoString = appTree.read('./test_lib/Cargo.toml')?.toString() ?? ''; + expect(cargoString).toMatchInlineSnapshot(` + " + [package] + name = 'test_lib' + version = '0.1.0' + edition = '2021' + + [dependencies] + wasm-bindgen = '0.2' + js-sys = '0.3' + web-sys = { version = '0.3', features = [ + 'Window', + ] } + console_error_panic_hook = { version = '0.1.6', optional = true } + wee_alloc = { version = '0.4', optional = true } + + [lib] + crate-type = [ + 'cdylib', + 'rlib', + ] + + [feature] + default = [ + 'console_error_panic_hook', + ] + + [dev-dependencies] + wasm-bindgen-test = '0.3' + + [profile.release] + opt-level = 's' #Tell \`rustc\` to optimize for small code size. + " + `); + }); +}); diff --git a/packages/rust/src/generators/add-wasm/generator.ts b/packages/rust/src/generators/add-wasm/generator.ts new file mode 100644 index 0000000..c2d42a1 --- /dev/null +++ b/packages/rust/src/generators/add-wasm/generator.ts @@ -0,0 +1,126 @@ +import TOML from '@ltd/j-toml'; +import { + Tree, + formatFiles, + generateFiles, + offsetFromRoot, + readProjectConfiguration, + updateProjectConfiguration, +} from '@nx/devkit'; +import * as path from 'path'; +import { addWasmPackExecutor } from '../../utils/add-executors'; +import { + modifyCargoNestedTable, + modifyCargoTable, + parseCargoTomlWithTree, + stringifyCargoToml, +} from '../../utils/toml'; +import { AddWasmGeneratorSchema } from './schema'; + +interface NormalizedSchema extends AddWasmGeneratorSchema { + projectName: string; + projectRoot: string; +} + +function normalizeOptions( + tree: Tree, + options: AddWasmGeneratorSchema +): NormalizedSchema { + const project = readProjectConfiguration(tree, options.project); + + const projectName = project.name ?? options.project ?? ''; + const projectRoot = project.root; + + return { + ...options, + projectName, + projectRoot, + }; +} + +function addFiles(tree: Tree, options: NormalizedSchema) { + if (!options.generateDefaultLib) { + return; + } + + const templateOptions = { + ...options, + offsetFromRoot: offsetFromRoot(options.projectRoot), + template: '', + }; + generateFiles( + tree, + path.join(__dirname, 'files'), + options.projectRoot, + templateOptions + ); +} + +function updateCargo(tree: Tree, options: NormalizedSchema) { + const cargoToml = parseCargoTomlWithTree( + tree, + options.projectRoot, + options.projectName + ); + + modifyCargoTable(cargoToml, 'lib', 'crate-type', ['cdylib', 'rlib']); + + modifyCargoTable(cargoToml, 'feature', 'default', [ + 'console_error_panic_hook', + ]); + + modifyCargoTable(cargoToml, 'dependencies', 'wasm-bindgen', '0.2'); + + if (options.useWebSys) { + modifyCargoTable(cargoToml, 'dependencies', 'js-sys', '0.3'); + modifyCargoTable(cargoToml, 'dependencies', 'web-sys', { + version: '0.3', + features: ['Window'], + }); + } + + modifyCargoTable(cargoToml, 'dependencies', 'console_error_panic_hook', { + version: '0.1.6', + optional: true, + }); + + modifyCargoTable(cargoToml, 'dependencies', 'wee_alloc', { + version: '0.4', + optional: true, + }); + + modifyCargoTable(cargoToml, 'dev-dependencies', 'wasm-bindgen-test', '0.3'); + + modifyCargoNestedTable(cargoToml, 'profile', 'release', { + [TOML.commentFor('opt-level')]: + 'Tell `rustc` to optimize for small code size.', + 'opt-level': 's', + }); + + tree.write( + options.projectRoot + '/Cargo.toml', + stringifyCargoToml(cargoToml) + ); +} + +function updateBuildTarget(tree: Tree, options: NormalizedSchema) { + const configuration = readProjectConfiguration(tree, options.projectName); + configuration.targets ??= {}; + configuration.targets.build = addWasmPackExecutor({ + 'target-dir': `dist/target/wasm/${options.projectName}`, + release: false, + target: 'bundler', + }); + updateProjectConfiguration(tree, options.projectName, configuration); +} + +export default async function wasmGenerator( + tree: Tree, + options: AddWasmGeneratorSchema +) { + const normalizedOptions = normalizeOptions(tree, options); + addFiles(tree, normalizedOptions); + updateCargo(tree, normalizedOptions); + updateBuildTarget(tree, normalizedOptions); + await formatFiles(tree); +} diff --git a/packages/rust/src/generators/add-wasm/schema.d.ts b/packages/rust/src/generators/add-wasm/schema.d.ts new file mode 100644 index 0000000..be2ba99 --- /dev/null +++ b/packages/rust/src/generators/add-wasm/schema.d.ts @@ -0,0 +1,5 @@ +export interface AddWasmGeneratorSchema { + project: string; + useWebSys: boolean; + generateDefaultLib: boolean; +} diff --git a/packages/rust/src/generators/add-wasm/schema.json b/packages/rust/src/generators/add-wasm/schema.json new file mode 100644 index 0000000..28fe6bb --- /dev/null +++ b/packages/rust/src/generators/add-wasm/schema.json @@ -0,0 +1,29 @@ +{ + "$schema": "http://json-schema.org/schema", + "$id": "AddWasm", + "title": "", + "type": "object", + "properties": { + "project": { + "type": "string", + "description": "The name of the project", + "$default": { + "$source": "projectName", + "index": 0 + } + }, + "useWebSys": { + "type": "boolean", + "default": true, + "description": "Use the web sys package" + }, + "generateDefaultLib": { + "type": "boolean", + "default": false, + "description": "Generates a default lib that contains wasm code. This will over write the existing lib.rs file." + } + }, + "required": [ + "project" + ] +} diff --git a/packages/rust/src/generators/binary/files/Cargo.toml__template__ b/packages/rust/src/generators/binary/files/Cargo.toml__template__ new file mode 100644 index 0000000..ac1c869 --- /dev/null +++ b/packages/rust/src/generators/binary/files/Cargo.toml__template__ @@ -0,0 +1,10 @@ +[package] +name = "<%= projectName %>" +version = "0.1.0" +edition = "<%= edition %>" + + +[dependencies] + + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/packages/rust/src/generators/binary/files/src/main.rs__template__ b/packages/rust/src/generators/binary/files/src/main.rs__template__ new file mode 100644 index 0000000..24e4cf8 --- /dev/null +++ b/packages/rust/src/generators/binary/files/src/main.rs__template__ @@ -0,0 +1,4 @@ +fn main() { + println!("Hello, world!"); +} + diff --git a/packages/rust/src/generators/binary/generator.spec.ts b/packages/rust/src/generators/binary/generator.spec.ts new file mode 100644 index 0000000..0b29960 --- /dev/null +++ b/packages/rust/src/generators/binary/generator.spec.ts @@ -0,0 +1,87 @@ +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import { Tree, readProjectConfiguration } from '@nx/devkit'; +import TOML from '@ltd/j-toml'; +import generator from './generator'; +import { RustBinaryGeneratorSchema } from './schema'; + +describe('rust generator', () => { + let appTree: Tree; + const options: RustBinaryGeneratorSchema = { name: 'test-name' }; + + beforeEach(() => { + appTree = createTreeWithEmptyWorkspace(); + }); + + it('should run successfully', async () => { + await generator(appTree, options); + const config = readProjectConfiguration(appTree, 'test_name'); + expect(config).toBeDefined(); + }); + + it('should create a Cargo.toml project', async () => { + await generator(appTree, { ...options }); + const cargoToml = appTree.read('./test_name/Cargo.toml')?.toString() ?? ''; + expect(cargoToml.length).toBeGreaterThan(0); + expect(TOML.parse(cargoToml)).toMatchInlineSnapshot(` + Object { + "dependencies": Object {}, + "package": Object { + "edition": "2021", + "name": "test_name", + "version": "0.1.0", + }, + } + `); + }); + + it('should create a project with a specified edition', async () => { + await generator(appTree, { ...options, edition: '2018' }); + const cargoToml = appTree.read('./test_name/Cargo.toml')?.toString() ?? ''; + expect(TOML.parse(cargoToml)).toMatchInlineSnapshot(` + Object { + "dependencies": Object {}, + "package": Object { + "edition": "2018", + "name": "test_name", + "version": "0.1.0", + }, + } + `); + }); + + it('should add a project to the main Cargo.toml workspace members', async () => { + await generator(appTree, options); + const cargoToml = appTree.read('Cargo.toml')?.toString() ?? ''; + expect(TOML.parse(cargoToml)).toMatchInlineSnapshot(` + Object { + "profile": Object { + "release": Object { + "lto": true, + }, + }, + "workspace": Object { + "members": Array [ + "test_name", + ], + "resolver": "2", + }, + } + `); + }); + + it('should generate into a directory', async () => { + await generator(appTree, { ...options, directory: 'test-dir' }); + const cargoToml = + appTree.read('./test_dir/test_name/Cargo.toml')?.toString() ?? ''; + expect(TOML.parse(cargoToml)).toMatchInlineSnapshot(` + Object { + "dependencies": Object {}, + "package": Object { + "edition": "2021", + "name": "test_dir_test_name", + "version": "0.1.0", + }, + } + `); + }); +}); diff --git a/packages/rust/src/generators/binary/generator.ts b/packages/rust/src/generators/binary/generator.ts new file mode 100644 index 0000000..56cd42c --- /dev/null +++ b/packages/rust/src/generators/binary/generator.ts @@ -0,0 +1,63 @@ +import { + addProjectConfiguration, + formatFiles, + generateFiles, + names, + offsetFromRoot, + Tree, +} from '@nx/devkit'; +import * as path from 'path'; +import { + addBuildExecutor, + addTestExecutor, + addLintExecutor, + addRunExecutor, +} from '../../utils/add-executors'; +import { addToCargoWorkspace } from '../../utils/add-to-workspace'; +import { + NormalizedSchema, + normalizeOptions, +} from '../../utils/normalize-options'; +import init from '../init/generator'; +import { RustBinaryGeneratorSchema } from './schema'; + +function addFiles( + tree: Tree, + options: NormalizedSchema & RustBinaryGeneratorSchema +) { + const templateOptions = { + ...options, + ...names(options.name), + offsetFromRoot: offsetFromRoot(options.projectRoot), + template: '', + }; + generateFiles( + tree, + path.join(__dirname, 'files'), + options.projectRoot, + templateOptions + ); +} + +export default async function binaryGenerator( + tree: Tree, + options: RustBinaryGeneratorSchema +) { + await init(tree); + const normalizedOptions = normalizeOptions(tree, 'app', options); + addProjectConfiguration(tree, normalizedOptions.projectName, { + root: normalizedOptions.projectRoot, + projectType: 'application', + sourceRoot: `${normalizedOptions.projectRoot}/src`, + targets: { + build: addBuildExecutor({ 'target-dir': normalizedOptions.targetDir }), + test: addTestExecutor({ 'target-dir': normalizedOptions.targetDir }), + lint: addLintExecutor({ 'target-dir': normalizedOptions.targetDir }), + run: addRunExecutor({ 'target-dir': normalizedOptions.targetDir }), + }, + tags: normalizedOptions.parsedTags, + }); + addFiles(tree, normalizedOptions); + addToCargoWorkspace(tree, normalizedOptions.projectRoot); + await formatFiles(tree); +} diff --git a/packages/rust/src/generators/binary/schema.d.ts b/packages/rust/src/generators/binary/schema.d.ts new file mode 100644 index 0000000..9cc19ea --- /dev/null +++ b/packages/rust/src/generators/binary/schema.d.ts @@ -0,0 +1,6 @@ +export interface RustBinaryGeneratorSchema { + name: string; + edition?: '2015' | '2018' | '2021'; + tags?: string; + directory?: string; +} diff --git a/packages/rust/src/generators/binary/schema.json b/packages/rust/src/generators/binary/schema.json new file mode 100644 index 0000000..4030097 --- /dev/null +++ b/packages/rust/src/generators/binary/schema.json @@ -0,0 +1,40 @@ +{ + "$schema": "http://json-schema.org/schema", + "$id": "Rust", + "title": "", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "What name would you like to use?" + }, + "edition": { + "type": "string", + "description": "The edition of Rust to use for this binary (default is 2021)", + "default": "2021", + "enum": [ + "2015", + "2018", + "2021" + ] + }, + "tags": { + "type": "string", + "description": "Add tags to the project (used for linting)", + "alias": "t" + }, + "directory": { + "type": "string", + "description": "A directory where the project is placed", + "alias": "d" + } + }, + "required": [ + "name" + ] +} diff --git a/packages/rust/src/generators/create-napi-npm-dirs/generator.ts b/packages/rust/src/generators/create-napi-npm-dirs/generator.ts new file mode 100644 index 0000000..1f2a1ad --- /dev/null +++ b/packages/rust/src/generators/create-napi-npm-dirs/generator.ts @@ -0,0 +1,36 @@ +import { + ProjectConfiguration, + Tree, + formatFiles, + getPackageManagerCommand, + getProjects, + joinPathFragments, +} from '@nx/devkit'; +import { CreateNapiNpmDirsGeneratorSchema } from './schema'; +import { runProcess } from '../../utils/run-process'; + +export default async function ( + tree: Tree, + options: CreateNapiNpmDirsGeneratorSchema +) { + const project = getProjects(tree).get(options.project); + if (!project) { + throw 'Project not found'; + } + + addNpmFiles(project); + + await formatFiles(tree); +} + +function addNpmFiles(project: ProjectConfiguration) { + const { exec } = getPackageManagerCommand(); + const command = `${exec} napi create-npm-dir`; + runProcess( + command, + '-c', + joinPathFragments(project.root, 'package.json'), + '-t', + project.root + ); +} diff --git a/packages/rust/src/generators/create-napi-npm-dirs/schema.d.ts b/packages/rust/src/generators/create-napi-npm-dirs/schema.d.ts new file mode 100644 index 0000000..6d154a2 --- /dev/null +++ b/packages/rust/src/generators/create-napi-npm-dirs/schema.d.ts @@ -0,0 +1,3 @@ +export interface CreateNapiNpmDirsGeneratorSchema { + project: string; +} diff --git a/packages/rust/src/generators/create-napi-npm-dirs/schema.json b/packages/rust/src/generators/create-napi-npm-dirs/schema.json new file mode 100644 index 0000000..6bd4ecc --- /dev/null +++ b/packages/rust/src/generators/create-napi-npm-dirs/schema.json @@ -0,0 +1,16 @@ +{ + "$schema": "http://json-schema.org/schema", + "$id": "CreateNapiNpmDirs", + "title": "", + "type": "object", + "properties": { + "project": { + "description": "The name of the project", + "$default": { + "$source": "projectName", + "index": 0 + } + } + }, + "required": [] +} diff --git a/packages/rust/src/generators/init/files/Cargo.toml__template__ b/packages/rust/src/generators/init/files/Cargo.toml__template__ new file mode 100644 index 0000000..dce044b --- /dev/null +++ b/packages/rust/src/generators/init/files/Cargo.toml__template__ @@ -0,0 +1,6 @@ +[workspace] +resolver = "2" +members = [] + +[profile.release] +lto = true diff --git a/packages/rust/src/generators/init/generator.spec.ts b/packages/rust/src/generators/init/generator.spec.ts new file mode 100644 index 0000000..363e3ac --- /dev/null +++ b/packages/rust/src/generators/init/generator.spec.ts @@ -0,0 +1,63 @@ +import TOML from '@ltd/j-toml'; +import { readJson, Tree, updateJson } from '@nx/devkit'; +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; + +import generator from './generator'; + +function readNxJson(tree: Tree) { + return readJson(tree, 'nx.json'); +} + +describe('init generator', () => { + let appTree: Tree; + + beforeEach(() => { + appTree = createTreeWithEmptyWorkspace(); + }); + + it('should run successfully', async () => { + await generator(appTree); + const cargoToml = appTree.read('./Cargo.toml')?.toString() ?? ''; + + expect(TOML.parse(cargoToml)).toMatchInlineSnapshot(` + Object { + "profile": Object { + "release": Object { + "lto": true, + }, + }, + "workspace": Object { + "members": Array [], + "resolver": "2", + }, + } + `); + }); + + describe('project graph plugin inclusion', () => { + it('should include the project graph plugin', async () => { + await generator(appTree); + const nxJson = readNxJson(appTree); + expect(nxJson?.plugins).toMatchInlineSnapshot(` + Array [ + "@loafle/nx-rust", + ] + `); + }); + + it('should not remove previous plugins', async () => { + updateJson(appTree, 'nx.json', (json) => { + json.plugins = ['@nrwl/graph/plugin']; + return json; + }); + await generator(appTree); + const nxJson = readNxJson(appTree); + expect(nxJson?.plugins).toMatchInlineSnapshot(` + Array [ + "@nrwl/graph/plugin", + "@loafle/nx-rust", + ] + `); + }); + }); +}); diff --git a/packages/rust/src/generators/init/generator.ts b/packages/rust/src/generators/init/generator.ts new file mode 100644 index 0000000..8ed2350 --- /dev/null +++ b/packages/rust/src/generators/init/generator.ts @@ -0,0 +1,61 @@ +import { + formatFiles, + generateFiles, + getWorkspaceLayout, + readNxJson, + Tree, + updateNxJson, +} from '@nx/devkit'; + +import * as path from 'path'; + +type NormalizedSchema = { + libsDir: string; + appsDir: string; + cargoMembers: string; +}; + +function normalizeOptions(tree: Tree): NormalizedSchema { + const { libsDir, appsDir } = getWorkspaceLayout(tree); + return { + libsDir, + appsDir, + cargoMembers: Array.from( + new Set([`"${libsDir}/*"`, `"${appsDir}/*"`]) + ).join(','), + }; +} + +function addFiles(tree: Tree, options: NormalizedSchema) { + const templateOptions = { + ...options, + template: '', + }; + generateFiles(tree, path.join(__dirname, 'files'), './', templateOptions); + tree.write( + '.cargo/config.toml', + `[build] +target-dir = 'dist/target' +` + ); +} + +function includeProjectGraphPlugin(tree: Tree) { + const config = readNxJson(tree); + if (!config) { + return; + } + (config.plugins ??= []).push('@loafle/nx-rust'); + updateNxJson(tree, config); +} + +export default async function init(tree: Tree) { + if (tree.exists('./Cargo.toml')) { + return; + } + + const normalizedOptions = normalizeOptions(tree); + addFiles(tree, normalizedOptions); + includeProjectGraphPlugin(tree); + await formatFiles(tree); +} diff --git a/packages/rust/src/generators/init/schema.d.ts b/packages/rust/src/generators/init/schema.d.ts new file mode 100644 index 0000000..bdf9706 --- /dev/null +++ b/packages/rust/src/generators/init/schema.d.ts @@ -0,0 +1,2 @@ +// eslint-disable-next-line @typescript-eslint/no-empty-interface +export interface InitGeneratorSchema {} diff --git a/packages/rust/src/generators/init/schema.json b/packages/rust/src/generators/init/schema.json new file mode 100644 index 0000000..fe0f615 --- /dev/null +++ b/packages/rust/src/generators/init/schema.json @@ -0,0 +1,8 @@ +{ + "$schema": "http://json-schema.org/schema", + "$id": "Init", + "title": "", + "type": "object", + "properties": {}, + "required": [] +} diff --git a/packages/rust/src/generators/library/files/Cargo.toml__template__ b/packages/rust/src/generators/library/files/Cargo.toml__template__ new file mode 100644 index 0000000..701df34 --- /dev/null +++ b/packages/rust/src/generators/library/files/Cargo.toml__template__ @@ -0,0 +1,8 @@ +[package] +name = "<%= projectName %>" +version = "0.1.0" +edition = "<%= edition %>" + +[dependencies] + +# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html diff --git a/packages/rust/src/generators/library/files/src/lib.rs__template__ b/packages/rust/src/generators/library/files/src/lib.rs__template__ new file mode 100644 index 0000000..1b4a90c --- /dev/null +++ b/packages/rust/src/generators/library/files/src/lib.rs__template__ @@ -0,0 +1,8 @@ +#[cfg(test)] +mod tests { + #[test] + fn it_works() { + let result = 2 + 2; + assert_eq!(result, 4); + } +} diff --git a/packages/rust/src/generators/library/generator.spec.ts b/packages/rust/src/generators/library/generator.spec.ts new file mode 100644 index 0000000..b315b9e --- /dev/null +++ b/packages/rust/src/generators/library/generator.spec.ts @@ -0,0 +1,87 @@ +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import { Tree, readProjectConfiguration } from '@nx/devkit'; +import TOML from '@ltd/j-toml'; +import generator from './generator'; +import { RustLibraryGeneratorSchema } from './schema'; + +describe('rust generator', () => { + let appTree: Tree; + const options: RustLibraryGeneratorSchema = { name: 'test-name' }; + + beforeEach(() => { + appTree = createTreeWithEmptyWorkspace(); + }); + + it('should run successfully', async () => { + await generator(appTree, options); + const config = readProjectConfiguration(appTree, 'test_name'); + expect(config).toBeDefined(); + }); + + it('should create a Cargo.toml project', async () => { + await generator(appTree, { ...options }); + const cargoToml = appTree.read('./test_name/Cargo.toml')?.toString() ?? ''; + expect(cargoToml.length).toBeGreaterThan(0); + expect(TOML.parse(cargoToml)).toMatchInlineSnapshot(` + Object { + "dependencies": Object {}, + "package": Object { + "edition": "2021", + "name": "test_name", + "version": "0.1.0", + }, + } + `); + }); + + it('should create a project with a specified edition', async () => { + await generator(appTree, { ...options, edition: '2018' }); + const cargoToml = appTree.read('./test_name/Cargo.toml')?.toString() ?? ''; + expect(TOML.parse(cargoToml)).toMatchInlineSnapshot(` + Object { + "dependencies": Object {}, + "package": Object { + "edition": "2018", + "name": "test_name", + "version": "0.1.0", + }, + } + `); + }); + + it('should add a project to the main Cargo.toml workspace members', async () => { + await generator(appTree, options); + const cargoToml = appTree.read('Cargo.toml')?.toString() ?? ''; + expect(TOML.parse(cargoToml)).toMatchInlineSnapshot(` + Object { + "profile": Object { + "release": Object { + "lto": true, + }, + }, + "workspace": Object { + "members": Array [ + "test_name", + ], + "resolver": "2", + }, + } + `); + }); + + it('should generate into a directory', async () => { + await generator(appTree, { ...options, directory: 'test-dir' }); + const cargoToml = + appTree.read('./test_dir/test_name/Cargo.toml')?.toString() ?? ''; + expect(TOML.parse(cargoToml)).toMatchInlineSnapshot(` + Object { + "dependencies": Object {}, + "package": Object { + "edition": "2021", + "name": "test_dir_test_name", + "version": "0.1.0", + }, + } + `); + }); +}); diff --git a/packages/rust/src/generators/library/generator.ts b/packages/rust/src/generators/library/generator.ts new file mode 100644 index 0000000..c60048b --- /dev/null +++ b/packages/rust/src/generators/library/generator.ts @@ -0,0 +1,88 @@ +import { + Tree, + addProjectConfiguration, + formatFiles, + generateFiles, + names, + offsetFromRoot, + GeneratorCallback, +} from '@nx/devkit'; +import * as path from 'path'; +import { + addCheckExecutor, + addLintExecutor, + addTestExecutor, +} from '../../utils/add-executors'; +import { addToCargoWorkspace } from '../../utils/add-to-workspace'; +import { + NormalizedSchema, + normalizeOptions, +} from '../../utils/normalize-options'; +import wasmGenerator from '../add-wasm/generator'; +import napiGenerator from '../add-napi/generator'; +import init from '../init/generator'; + +import { RustLibraryGeneratorSchema } from './schema'; + +function addFiles( + tree: Tree, + options: NormalizedSchema & RustLibraryGeneratorSchema +) { + const templateOptions = { + ...options, + ...names(options.name), + offsetFromRoot: offsetFromRoot(options.projectRoot), + template: '', + }; + generateFiles( + tree, + path.join(__dirname, 'files'), + options.projectRoot, + templateOptions + ); +} + +export default async function libraryGenerator( + tree: Tree, + options: RustLibraryGeneratorSchema +) { + await init(tree); + const normalizedOptions = normalizeOptions(tree, 'lib', options); + addProjectConfiguration(tree, normalizedOptions.projectName, { + root: normalizedOptions.projectRoot, + projectType: 'library', + sourceRoot: `${normalizedOptions.projectRoot}/src`, + targets: { + build: addCheckExecutor({ 'target-dir': normalizedOptions.targetDir }), + test: addTestExecutor({ 'target-dir': normalizedOptions.targetDir }), + lint: addLintExecutor({ 'target-dir': normalizedOptions.targetDir }), + }, + tags: normalizedOptions.parsedTags, + }); + addFiles(tree, normalizedOptions); + addToCargoWorkspace(tree, normalizedOptions.projectRoot); + + const tasks: GeneratorCallback[] = []; + if (options.wasm) { + await wasmGenerator(tree, { + generateDefaultLib: true, + useWebSys: true, + project: normalizedOptions.projectName, + }); + } + + if (options.napi) { + tasks.push( + await napiGenerator(tree, { + project: normalizedOptions.projectName, + }) + ); + } + await formatFiles(tree); + + return async () => { + for (const task of tasks) { + await task(); + } + }; +} diff --git a/packages/rust/src/generators/library/schema.d.ts b/packages/rust/src/generators/library/schema.d.ts new file mode 100644 index 0000000..6898d65 --- /dev/null +++ b/packages/rust/src/generators/library/schema.d.ts @@ -0,0 +1,8 @@ +export interface RustLibraryGeneratorSchema { + name: string; + edition?: '2015' | '2018' | '2021'; + tags?: string; + directory?: string; + wasm?: boolean; + napi?: boolean; +} diff --git a/packages/rust/src/generators/library/schema.json b/packages/rust/src/generators/library/schema.json new file mode 100644 index 0000000..94b4231 --- /dev/null +++ b/packages/rust/src/generators/library/schema.json @@ -0,0 +1,51 @@ +{ + "$schema": "http://json-schema.org/schema", + "$id": "Library", + "title": "", + "type": "object", + "properties": { + "name": { + "type": "string", + "description": "", + "$default": { + "$source": "argv", + "index": 0 + }, + "x-prompt": "What name would you like to use?" + }, + "edition": { + "type": "string", + "description": "The edition of Rust to use for this binary (default is 2021)", + "default": "2021", + "enum": [ + "2015", + "2018", + "2021" + ] + }, + "tags": { + "type": "string", + "description": "Add tags to the project (used for linting)", + "alias": "t" + }, + "directory": { + "type": "string", + "description": "A directory where the project is placed", + "alias": "d" + }, + "wasm": { + "type": "boolean", + "description": "Adds wasm support to the generated library", + "default": false, + "hidden": "true" + }, + "napi": { + "type": "boolean", + "description": "Adds napi support to the generated library", + "default": false + } + }, + "required": [ + "name" + ] +} diff --git a/packages/rust/src/generators/preset/generator.ts b/packages/rust/src/generators/preset/generator.ts new file mode 100644 index 0000000..8974d04 --- /dev/null +++ b/packages/rust/src/generators/preset/generator.ts @@ -0,0 +1,6 @@ +import { Tree } from '@nx/devkit'; +import init from '../init/generator'; + +export default async function (tree: Tree) { + init(tree); +} diff --git a/packages/rust/src/generators/preset/schema.json b/packages/rust/src/generators/preset/schema.json new file mode 100644 index 0000000..8855614 --- /dev/null +++ b/packages/rust/src/generators/preset/schema.json @@ -0,0 +1,8 @@ +{ + "$schema": "http://json-schema.org/schema", + "$id": "Preset", + "title": "", + "type": "object", + "properties": {}, + "required": [] +} diff --git a/packages/rust/src/generators/release-version/release-version.spec.ts b/packages/rust/src/generators/release-version/release-version.spec.ts new file mode 100644 index 0000000..0eb061a --- /dev/null +++ b/packages/rust/src/generators/release-version/release-version.spec.ts @@ -0,0 +1,1153 @@ +const originalExit = process.exit; +let stubProcessExit = false; + +const processExitSpy = jest + .spyOn(process, 'exit') + .mockImplementation((...args) => { + if (stubProcessExit) { + return undefined as never; + } + return originalExit(...args); + }); + +import { ProjectGraph, Tree, output } from '@nx/devkit'; +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import enquirer from 'enquirer'; +import { ReleaseGroupWithName } from 'nx/src/command-line/release/config/filter-release-groups'; +import { parseCargoTomlWithTree } from '../../utils/toml'; +import { releaseVersionGenerator } from './release-version'; +import { createWorkspaceWithPackageDependencies } from './test-utils/create-workspace-with-package-dependencies'; + +jest.mock('enquirer'); + +// Using the daemon in unit tests would cause jest to never exit +process.env.NX_DAEMON = 'false'; + +describe('release-version', () => { + let tree: Tree; + let projectGraph: ProjectGraph; + + beforeEach(() => { + // @ts-expect-error read-only property + process.exit = processExitSpy; + + tree = createTreeWithEmptyWorkspace(); + + projectGraph = createWorkspaceWithPackageDependencies(tree, { + 'my-lib': { + projectRoot: 'libs/my-lib', + packageName: 'my-lib', + version: '0.0.1', + cargoTomlPath: 'libs/my-lib/Cargo.toml', + localDependencies: [], + }, + 'project-with-dependency-on-my-pkg': { + projectRoot: 'libs/project-with-dependency-on-my-pkg', + packageName: 'project-with-dependency-on-my-pkg', + version: '0.0.1', + cargoTomlPath: 'libs/project-with-dependency-on-my-pkg/Cargo.toml', + localDependencies: [ + { + projectName: 'my-lib', + dependencyCollection: 'dependencies', + version: '0.0.1', + }, + ], + }, + 'project-with-devDependency-on-my-pkg': { + projectRoot: 'libs/project-with-devDependency-on-my-pkg', + packageName: 'project-with-devDependency-on-my-pkg', + version: '0.0.1', + cargoTomlPath: 'libs/project-with-devDependency-on-my-pkg/Cargo.toml', + localDependencies: [ + { + projectName: 'my-lib', + dependencyCollection: 'dev-dependencies', + version: '0.0.1', + }, + ], + }, + }); + }); + afterEach(() => { + jest.clearAllMocks(); + stubProcessExit = false; + }); + afterAll(() => { + process.exit = originalExit; + }); + + it('should return a versionData object', async () => { + expect( + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: 'major', + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + }) + ).toMatchInlineSnapshot(` + Object { + "callback": [Function], + "data": Object { + "my-lib": Object { + "currentVersion": "0.0.1", + "dependentProjects": Array [ + Object { + "dependencyCollection": "dependencies", + "source": "project-with-dependency-on-my-pkg", + "target": "my-lib", + "type": "static", + }, + Object { + "dependencyCollection": "dev-dependencies", + "source": "project-with-devDependency-on-my-pkg", + "target": "my-lib", + "type": "static", + }, + ], + "newVersion": "1.0.0", + }, + "project-with-dependency-on-my-pkg": Object { + "currentVersion": "0.0.1", + "dependentProjects": Array [], + "newVersion": "1.0.0", + }, + "project-with-devDependency-on-my-pkg": Object { + "currentVersion": "0.0.1", + "dependentProjects": Array [], + "newVersion": "1.0.0", + }, + }, + } + `); + }); + + describe('not all given projects have Cargo.toml files', () => { + beforeEach(() => { + tree.delete('libs/my-lib/Cargo.toml'); + }); + + it(`should exit with code one and print guidance when not all of the given projects are appropriate for Rust versioning`, async () => { + stubProcessExit = true; + + const outputSpy = jest + .spyOn(output, 'error') + .mockImplementationOnce(() => { + return undefined as never; + }); + + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: 'major', + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + }); + + expect(outputSpy).toHaveBeenCalledWith({ + title: `The project "my-lib" does not have a Cargo.toml available at libs/my-lib/Cargo.toml. + +To fix this you will either need to add a Cargo.toml file at that location, or configure "release" within your nx.json to exclude "my-lib" from the current release group, or amend the packageRoot configuration to point to where the Cargo.toml should be.`, + }); + + outputSpy.mockRestore(); + expect(processExitSpy).toHaveBeenCalledWith(1); + + stubProcessExit = false; + }); + }); + + describe('fixed release group', () => { + it(`should work with semver keywords and exact semver versions`, async () => { + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('0.0.1'); + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: 'major', + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + }); + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('1.0.0'); + + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: 'minor', + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + }); + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('1.1.0'); + + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: 'patch', + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + }); + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('1.1.1'); + + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: '1.2.3', // exact version + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + }); + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('1.2.3'); + }); + + it(`should apply the updated version to the projects, including updating dependents`, async () => { + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: 'major', + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + }); + + expect(parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib')) + .toMatchInlineSnapshot(` + Object { + "package": Object { + "name": "my-lib", + "version": "1.0.0", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-dependency-on-my-pkg', + 'project-with-dependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dependencies": Object { + "my-lib": Object { + "version": "1.0.0", + }, + }, + "package": Object { + "name": "project-with-dependency-on-my-pkg", + "version": "1.0.0", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-devDependency-on-my-pkg', + 'project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "1.0.0", + }, + }, + "package": Object { + "name": "project-with-devDependency-on-my-pkg", + "version": "1.0.0", + }, + } + `); + }); + }); + + describe('independent release group', () => { + describe('specifierSource: prompt', () => { + it(`should appropriately prompt for each project independently and apply the version updates across all Cargo.toml files`, async () => { + enquirer.prompt = jest + .fn() + // First project will be minor + .mockReturnValueOnce(Promise.resolve({ specifier: 'minor' })) + // Next project will be patch + .mockReturnValueOnce(Promise.resolve({ specifier: 'patch' })) + // Final project will be custom explicit version + .mockReturnValueOnce(Promise.resolve({ specifier: 'custom' })) + .mockReturnValueOnce(Promise.resolve({ specifier: '1.2.3' })); + + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('0.0.1'); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-dependency-on-my-pkg', + 'project-with-dependency-on-my-pkg' + ).package.version + ).toEqual('0.0.1'); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-devDependency-on-my-pkg', + 'project-with-devDependency-on-my-pkg' + ).package.version + ).toEqual('0.0.1'); + + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: '', // no specifier override set, each individual project will be prompted + currentVersionResolver: 'disk', + specifierSource: 'prompt', + releaseGroup: createReleaseGroup('independent'), + }); + + expect(parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib')) + .toMatchInlineSnapshot(` + Object { + "package": Object { + "name": "my-lib", + "version": "0.1.0", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-dependency-on-my-pkg', + 'project-with-dependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dependencies": Object { + "my-lib": Object { + "version": "0.1.0", + }, + }, + "package": Object { + "name": "project-with-dependency-on-my-pkg", + "version": "0.0.2", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-devDependency-on-my-pkg', + 'project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "0.1.0", + }, + }, + "package": Object { + "name": "project-with-devDependency-on-my-pkg", + "version": "1.2.3", + }, + } + `); + }); + + it(`should respect an explicit user CLI specifier for all, even when projects are independent, and apply the version updates across all Cargo.toml files`, async () => { + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('0.0.1'); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-dependency-on-my-pkg', + 'project-with-dependency-on-my-pkg' + ).package.version + ).toEqual('0.0.1'); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-devDependency-on-my-pkg', + 'project-with-devDependency-on-my-pkg' + ).package.version + ).toEqual('0.0.1'); + + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: '4.5.6', // user CLI specifier override set, no prompting should occur + currentVersionResolver: 'disk', + specifierSource: 'prompt', + releaseGroup: createReleaseGroup('independent'), + }); + + expect(parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib')) + .toMatchInlineSnapshot(` + Object { + "package": Object { + "name": "my-lib", + "version": "4.5.6", + }, + } + `); + + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-dependency-on-my-pkg', + 'project-with-dependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dependencies": Object { + "my-lib": Object { + "version": "4.5.6", + }, + }, + "package": Object { + "name": "project-with-dependency-on-my-pkg", + "version": "4.5.6", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-devDependency-on-my-pkg', + 'project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "4.5.6", + }, + }, + "package": Object { + "name": "project-with-devDependency-on-my-pkg", + "version": "4.5.6", + }, + } + `); + }); + + it(`should update dependents even when filtering to a subset of projects which do not include those dependents`, async () => { + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('0.0.1'); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-dependency-on-my-pkg', + 'project-with-dependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dependencies": Object { + "my-lib": Object { + "version": "0.0.1", + }, + }, + "package": Object { + "name": "project-with-dependency-on-my-pkg", + "version": "0.0.1", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-devDependency-on-my-pkg', + 'project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "0.0.1", + }, + }, + "package": Object { + "name": "project-with-devDependency-on-my-pkg", + "version": "0.0.1", + }, + } + `); + + await releaseVersionGenerator(tree, { + projects: [projectGraph.nodes['my-lib']], // version only my-lib + projectGraph, + specifier: '9.9.9', // user CLI specifier override set, no prompting should occur + currentVersionResolver: 'disk', + specifierSource: 'prompt', + releaseGroup: createReleaseGroup('independent'), + }); + + expect(parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib')) + .toMatchInlineSnapshot(` + Object { + "package": Object { + "name": "my-lib", + "version": "9.9.9", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-dependency-on-my-pkg', + 'project-with-dependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dependencies": Object { + "my-lib": Object { + "version": "9.9.9", + }, + }, + "package": Object { + "name": "project-with-dependency-on-my-pkg", + "version": "0.0.1", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-devDependency-on-my-pkg', + 'project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "9.9.9", + }, + }, + "package": Object { + "name": "project-with-devDependency-on-my-pkg", + "version": "0.0.1", + }, + } + `); + }); + + it(`should not throw with project without cargo.toml and even when filtering to a subset of projects which do not include those dependents`, async () => { + // Add project without Cargo.toml + const projectWithoutCargoToml = 'project-without-cargoToml'; + projectGraph.nodes[projectWithoutCargoToml] = { + name: projectWithoutCargoToml, + type: 'lib', + data: { + root: `libs/${projectWithoutCargoToml}`, + }, + }; + projectGraph.dependencies[projectWithoutCargoToml] = [ + { + target: projectWithoutCargoToml, + source: 'project-with-dependency-on-my-pkg', + type: 'static', + }, + ]; + tree.write( + `libs/${projectWithoutCargoToml}/package.json`, + JSON.stringify({ name: projectWithoutCargoToml, version: '0.0.1' }) + ); + + await releaseVersionGenerator(tree, { + projects: [projectGraph.nodes['my-lib']], // version only my-lib + projectGraph, + specifier: '9.9.9', // user CLI specifier override set, no prompting should occur + currentVersionResolver: 'disk', + specifierSource: 'prompt', + releaseGroup: createReleaseGroup('independent'), + }); + + expect(parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib')) + .toMatchInlineSnapshot(` + Object { + "package": Object { + "name": "my-lib", + "version": "9.9.9", + }, + } + `); + }); + }); + }); + + describe('leading v in version', () => { + it(`should strip a leading v from the provided specifier`, async () => { + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('0.0.1'); + + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: 'v8.8.8', + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + }); + + expect(parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib')) + .toMatchInlineSnapshot(` + Object { + "package": Object { + "name": "my-lib", + "version": "8.8.8", + }, + } + `); + + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-dependency-on-my-pkg', + 'project-with-dependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dependencies": Object { + "my-lib": Object { + "version": "8.8.8", + }, + }, + "package": Object { + "name": "project-with-dependency-on-my-pkg", + "version": "8.8.8", + }, + } + `); + + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-devDependency-on-my-pkg', + 'project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "8.8.8", + }, + }, + "package": Object { + "name": "project-with-devDependency-on-my-pkg", + "version": "8.8.8", + }, + } + `); + }); + }); + + describe('dependent version prefix', () => { + beforeEach(() => { + projectGraph = createWorkspaceWithPackageDependencies(tree, { + 'my-lib': { + projectRoot: 'libs/my-lib', + packageName: 'my-lib', + version: '0.0.1', + cargoTomlPath: 'libs/my-lib/Cargo.toml', + localDependencies: [], + }, + 'project-with-dependency-on-my-pkg': { + projectRoot: 'libs/project-with-dependency-on-my-pkg', + packageName: 'project-with-dependency-on-my-pkg', + version: '0.0.1', + cargoTomlPath: 'libs/project-with-dependency-on-my-pkg/Cargo.toml', + localDependencies: [ + { + projectName: 'my-lib', + dependencyCollection: 'dependencies', + version: '~0.0.1', // already has ~ + }, + ], + }, + 'project-with-devDependency-on-my-pkg': { + projectRoot: 'libs/project-with-devDependency-on-my-pkg', + packageName: 'project-with-devDependency-on-my-pkg', + version: '0.0.1', + cargoTomlPath: 'libs/project-with-devDependency-on-my-pkg/Cargo.toml', + localDependencies: [ + { + projectName: 'my-lib', + dependencyCollection: 'dev-dependencies', + version: '^0.0.1', // already has ^ + }, + ], + }, + 'another-project-with-devDependency-on-my-pkg': { + projectRoot: 'libs/another-project-with-devDependency-on-my-pkg', + packageName: 'another-project-with-devDependency-on-my-pkg', + version: '0.0.1', + cargoTomlPath: + 'libs/another-project-with-devDependency-on-my-pkg/Cargo.toml', + localDependencies: [ + { + projectName: 'my-lib', + dependencyCollection: 'dev-dependencies', + version: '0.0.1', // has no prefix + }, + ], + }, + }); + }); + afterEach(() => { + jest.clearAllMocks(); + }); + + it('should work with an empty prefix', async () => { + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('0.0.1'); + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: '9.9.9', + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + versionPrefix: '', + }); + expect(parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib')) + .toMatchInlineSnapshot(` + Object { + "package": Object { + "name": "my-lib", + "version": "9.9.9", + }, + } + `); + + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-dependency-on-my-pkg', + 'project-with-dependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dependencies": Object { + "my-lib": Object { + "version": "9.9.9", + }, + }, + "package": Object { + "name": "project-with-dependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-devDependency-on-my-pkg', + 'project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "9.9.9", + }, + }, + "package": Object { + "name": "project-with-devDependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + + expect( + parseCargoTomlWithTree( + tree, + 'libs/another-project-with-devDependency-on-my-pkg', + 'another-project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "9.9.9", + }, + }, + "package": Object { + "name": "another-project-with-devDependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + }); + + it('should work with a ^ prefix', async () => { + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('0.0.1'); + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: '9.9.9', + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + versionPrefix: '^', + }); + expect(parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib')) + .toMatchInlineSnapshot(` + Object { + "package": Object { + "name": "my-lib", + "version": "9.9.9", + }, + } + `); + + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-dependency-on-my-pkg', + 'project-with-dependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dependencies": Object { + "my-lib": Object { + "version": "^9.9.9", + }, + }, + "package": Object { + "name": "project-with-dependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-devDependency-on-my-pkg', + 'project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "^9.9.9", + }, + }, + "package": Object { + "name": "project-with-devDependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/another-project-with-devDependency-on-my-pkg', + 'another-project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "^9.9.9", + }, + }, + "package": Object { + "name": "another-project-with-devDependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + }); + + it('should work with a ~ prefix', async () => { + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('0.0.1'); + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: '9.9.9', + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + versionPrefix: '~', + }); + expect(parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib')) + .toMatchInlineSnapshot(` + Object { + "package": Object { + "name": "my-lib", + "version": "9.9.9", + }, + } + `); + + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-dependency-on-my-pkg', + 'project-with-dependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dependencies": Object { + "my-lib": Object { + "version": "~9.9.9", + }, + }, + "package": Object { + "name": "project-with-dependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-devDependency-on-my-pkg', + 'project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "~9.9.9", + }, + }, + "package": Object { + "name": "project-with-devDependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/another-project-with-devDependency-on-my-pkg', + 'another-project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "~9.9.9", + }, + }, + "package": Object { + "name": "another-project-with-devDependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + }); + + it('should respect any existing prefix when set to "auto"', async () => { + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('0.0.1'); + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: '9.9.9', + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + versionPrefix: 'auto', + }); + expect(parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib')) + .toMatchInlineSnapshot(` + Object { + "package": Object { + "name": "my-lib", + "version": "9.9.9", + }, + } + `); + + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-dependency-on-my-pkg', + 'project-with-dependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dependencies": Object { + "my-lib": Object { + "version": "~9.9.9", + }, + }, + "package": Object { + "name": "project-with-dependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-devDependency-on-my-pkg', + 'project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "^9.9.9", + }, + }, + "package": Object { + "name": "project-with-devDependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/another-project-with-devDependency-on-my-pkg', + 'another-project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "9.9.9", + }, + }, + "package": Object { + "name": "another-project-with-devDependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + }); + + it('should use the behavior of "auto" by default', async () => { + expect( + parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib').package.version + ).toEqual('0.0.1'); + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: '9.9.9', + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + versionPrefix: undefined, + }); + expect(parseCargoTomlWithTree(tree, 'libs/my-lib', 'my-lib')) + .toMatchInlineSnapshot(` + Object { + "package": Object { + "name": "my-lib", + "version": "9.9.9", + }, + } + `); + + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-dependency-on-my-pkg', + 'project-with-dependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dependencies": Object { + "my-lib": Object { + "version": "~9.9.9", + }, + }, + "package": Object { + "name": "project-with-dependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/project-with-devDependency-on-my-pkg', + 'project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "^9.9.9", + }, + }, + "package": Object { + "name": "project-with-devDependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + expect( + parseCargoTomlWithTree( + tree, + 'libs/another-project-with-devDependency-on-my-pkg', + 'another-project-with-devDependency-on-my-pkg' + ) + ).toMatchInlineSnapshot(` + Object { + "dev-dependencies": Object { + "my-lib": Object { + "version": "9.9.9", + }, + }, + "package": Object { + "name": "another-project-with-devDependency-on-my-pkg", + "version": "9.9.9", + }, + } + `); + }); + + it(`should exit with code one and print guidance for invalid prefix values`, async () => { + stubProcessExit = true; + + const outputSpy = jest + .spyOn(output, 'error') + .mockImplementationOnce(() => { + return undefined as never; + }); + + await releaseVersionGenerator(tree, { + projects: Object.values(projectGraph.nodes), // version all projects + projectGraph, + specifier: 'major', + currentVersionResolver: 'disk', + releaseGroup: createReleaseGroup('fixed'), + versionPrefix: '$' as any, + }); + + expect(outputSpy).toHaveBeenCalledWith({ + title: `Invalid value for version.generatorOptions.versionPrefix: "$" + +Valid values are: "auto", "", "~", "^", "="`, + }); + + outputSpy.mockRestore(); + expect(processExitSpy).toHaveBeenCalledWith(1); + + stubProcessExit = false; + }); + }); +}); + +function createReleaseGroup( + relationship: ReleaseGroupWithName['projectsRelationship'], + partialGroup: Partial = {} +): ReleaseGroupWithName { + return { + name: 'myReleaseGroup', + releaseTagPattern: '{projectName}@v{version}', + ...partialGroup, + projectsRelationship: relationship, + } as ReleaseGroupWithName; +} diff --git a/packages/rust/src/generators/release-version/release-version.ts b/packages/rust/src/generators/release-version/release-version.ts new file mode 100644 index 0000000..202e64b --- /dev/null +++ b/packages/rust/src/generators/release-version/release-version.ts @@ -0,0 +1,683 @@ +import { + ProjectGraph, + ProjectGraphDependency, + ProjectGraphProjectNode, + Tree, + formatFiles, + joinPathFragments, + output, + workspaceRoot, +} from '@nx/devkit'; +import chalk from 'chalk'; +import { execSync } from 'node:child_process'; +import { relative } from 'node:path'; +import { IMPLICIT_DEFAULT_RELEASE_GROUP } from 'nx/src/command-line/release/config/config'; +import { + getFirstGitCommit, + getLatestGitTagForPattern, +} from 'nx/src/command-line/release/utils/git'; +import { + resolveSemverSpecifierFromConventionalCommits, + resolveSemverSpecifierFromPrompt, +} from 'nx/src/command-line/release/utils/resolve-semver-specifier'; +import { isValidSemverSpecifier } from 'nx/src/command-line/release/utils/semver'; +import { + ReleaseVersionGeneratorResult, + VersionData, + deriveNewSemverVersion, + validReleaseVersionPrefixes, +} from 'nx/src/command-line/release/version'; +import { interpolate } from 'nx/src/tasks-runner/utils'; +import { prerelease } from 'semver'; +import { + modifyCargoTable, + parseCargoToml, + parseCargoTomlWithTree, + stringifyCargoToml, +} from '../../utils/toml'; +import { ReleaseVersionGeneratorSchema } from './schema'; + +export async function releaseVersionGenerator( + tree: Tree, + options: ReleaseVersionGeneratorSchema +): Promise { + try { + const versionData: VersionData = {}; + + // If the user provided a specifier, validate that it is valid semver or a relative semver keyword + if (options.specifier) { + if (!isValidSemverSpecifier(options.specifier)) { + throw new Error( + `The given version specifier "${options.specifier}" is not valid. You provide an exact version or a valid semver keyword such as "major", "minor", "patch", etc.` + ); + } + // The node semver library classes a leading `v` as valid, but we want to ensure it is not present in the final version + options.specifier = options.specifier.replace(/^v/, ''); + } + + if ( + options.versionPrefix && + validReleaseVersionPrefixes.indexOf(options.versionPrefix) === -1 + ) { + throw new Error( + `Invalid value for version.generatorOptions.versionPrefix: "${ + options.versionPrefix + }" + +Valid values are: ${validReleaseVersionPrefixes + .map((s) => `"${s}"`) + .join(', ')}` + ); + } + + if (options.firstRelease) { + // always use disk as a fallback for the first release + options.fallbackCurrentVersionResolver = 'disk'; + } + + const projects = options.projects; + + const resolvePackageRoot = createResolvePackageRoot(options.packageRoot); + + // Resolve any custom package roots for each project upfront as they will need to be reused during dependency resolution + const projectNameToPackageRootMap = new Map(); + for (const project of projects) { + projectNameToPackageRootMap.set( + project.name, + resolvePackageRoot(project) + ); + } + + let currentVersion: string | undefined = undefined; + let currentVersionResolvedFromFallback = false; + + // only used for options.currentVersionResolver === 'git-tag', but + // must be declared here in order to reuse it for additional projects + let latestMatchingGitTag: + | { tag: string; extractedVersion: string } + | null + | undefined = undefined; + + // if specifier is undefined, then we haven't resolved it yet + // if specifier is null, then it has been resolved and no changes are necessary + let specifier: string | null | undefined = options.specifier + ? options.specifier + : undefined; + + for (const project of projects) { + const projectName = project.name; + const packageRoot = projectNameToPackageRootMap.get(projectName); + if (!packageRoot) { + throw new Error( + `The project "${projectName}" does not have a packageRoot available. Please report this issue on https://github.com/nrwl/nx` + ); + } + + const cargoTomlPath = joinPathFragments(packageRoot, 'Cargo.toml'); + const workspaceRelativeCargoTomlPath = relative( + workspaceRoot, + cargoTomlPath + ); + + const color = getColor(projectName); + const log = (msg: string) => { + console.log(color.instance.bold(projectName) + ' ' + msg); + }; + + if (!tree.exists(cargoTomlPath)) { + throw new Error( + `The project "${projectName}" does not have a Cargo.toml available at ${workspaceRelativeCargoTomlPath}. + +To fix this you will either need to add a Cargo.toml file at that location, or configure "release" within your nx.json to exclude "${projectName}" from the current release group, or amend the packageRoot configuration to point to where the Cargo.toml should be.` + ); + } + + output.logSingleLine( + `Running release version for project: ${color.instance.bold( + project.name + )}` + ); + + const cargoTomlContents = tree.read(cargoTomlPath)!.toString('utf-8'); + const data = parseCargoToml(cargoTomlContents); + const pkg = data.package; + + log( + `🔍 Reading data for crate "${pkg.name}" from ${workspaceRelativeCargoTomlPath}` + ); + + const packageName = pkg.name; + const currentVersionFromDisk = pkg.version; + + switch (options.currentVersionResolver) { + /** + * TODO: implement `cargo show` powered registry resolver + */ + // case 'registry': {} + case 'disk': + currentVersion = currentVersionFromDisk; + log( + `📄 Resolved the current version as ${currentVersion} from ${cargoTomlPath}` + ); + break; + case 'git-tag': { + if ( + !currentVersion || + // We always need to independently resolve the current version from git tag per project if the projects are independent + options.releaseGroup.projectsRelationship === 'independent' + ) { + const releaseTagPattern = options.releaseGroup.releaseTagPattern; + latestMatchingGitTag = await getLatestGitTagForPattern( + releaseTagPattern, + { + projectName: project.name, + } + ); + if (!latestMatchingGitTag) { + if (options.fallbackCurrentVersionResolver === 'disk') { + log( + `📄 Unable to resolve the current version from git tag using pattern "${releaseTagPattern}". Falling back to the version on disk of ${currentVersionFromDisk}` + ); + currentVersion = currentVersionFromDisk; + currentVersionResolvedFromFallback = true; + } else { + throw new Error( + `No git tags matching pattern "${releaseTagPattern}" for project "${project.name}" were found. You will need to create an initial matching tag to use as a base for determining the next version. Alternatively, you can use the --first-release option or set "release.version.generatorOptions.fallbackCurrentVersionResolver" to "disk" in order to fallback to the version on disk when no matching git tags are found.` + ); + } + } else { + currentVersion = latestMatchingGitTag.extractedVersion; + log( + `📄 Resolved the current version as ${currentVersion} from git tag "${latestMatchingGitTag.tag}".` + ); + } + } else { + if (currentVersionResolvedFromFallback) { + log( + `📄 Using the current version ${currentVersion} already resolved from disk fallback.` + ); + } else { + log( + // In this code path we know that latestMatchingGitTag is defined, because we are not relying on the fallbackCurrentVersionResolver, so we can safely use the non-null assertion operator + `📄 Using the current version ${currentVersion} already resolved from git tag "${ + latestMatchingGitTag!.tag + }".` + ); + } + } + break; + } + default: + throw new Error( + `Invalid value for options.currentVersionResolver: ${options.currentVersionResolver}` + ); + } + + if (options.specifier) { + log(`📄 Using the provided version specifier "${options.specifier}".`); + } + + /** + * If we are versioning independently then we always need to determine the specifier for each project individually, except + * for the case where the user has provided an explicit specifier on the command. + * + * Otherwise, if versioning the projects together we only need to perform this logic if the specifier is still unset from + * previous iterations of the loop. + * + * NOTE: In the case that we have previously determined via conventional commits that no changes are necessary, the specifier + * will be explicitly set to `null`, so that is why we only check for `undefined` explicitly here. + */ + if ( + specifier === undefined || + (options.releaseGroup.projectsRelationship === 'independent' && + !options.specifier) + ) { + const specifierSource = options.specifierSource; + switch (specifierSource) { + case 'conventional-commits': { + if (options.currentVersionResolver !== 'git-tag') { + throw new Error( + `Invalid currentVersionResolver "${options.currentVersionResolver}" provided for release group "${options.releaseGroup.name}". Must be "git-tag" when "specifierSource" is "conventional-commits"` + ); + } + + const affectedProjects = + options.releaseGroup.projectsRelationship === 'independent' + ? [projectName] + : projects.map((p) => p.name); + + // latestMatchingGitTag will be undefined if the current version was resolved from the disk fallback. + // In this case, we want to use the first commit as the ref to be consistent with the changelog command. + const previousVersionRef = latestMatchingGitTag + ? latestMatchingGitTag.tag + : options.fallbackCurrentVersionResolver === 'disk' + ? await getFirstGitCommit() + : undefined; + + if (!previousVersionRef) { + // This should never happen since the checks above should catch if the current version couldn't be resolved + throw new Error( + `Unable to determine previous version ref for the projects ${affectedProjects.join( + ', ' + )}. This is likely a bug in Nx.` + ); + } + + specifier = await resolveSemverSpecifierFromConventionalCommits( + previousVersionRef, + options.projectGraph, + affectedProjects, + options.conventionalCommitsConfig! + ); + + if (!specifier) { + log( + `🚫 No changes were detected using git history and the conventional commits standard.` + ); + break; + } + + // TODO: reevaluate this logic/workflow for independent projects + // + // Always assume that if the current version is a prerelease, then the next version should be a prerelease. + // Users must manually graduate from a prerelease to a release by providing an explicit specifier. + if (prerelease(currentVersion ?? '')) { + specifier = 'prerelease'; + log( + `📄 Resolved the specifier as "${specifier}" since the current version is a prerelease.` + ); + } else { + log( + `📄 Resolved the specifier as "${specifier}" using git history and the conventional commits standard.` + ); + } + break; + } + case 'prompt': { + // Only add the release group name to the log if it is one set by the user, otherwise it is useless noise + const maybeLogReleaseGroup = (log: string): string => { + if ( + options.releaseGroup.name === IMPLICIT_DEFAULT_RELEASE_GROUP + ) { + return log; + } + return `${log} within release group "${options.releaseGroup.name}"`; + }; + if (options.releaseGroup.projectsRelationship === 'independent') { + specifier = await resolveSemverSpecifierFromPrompt( + `${maybeLogReleaseGroup( + `What kind of change is this for project "${projectName}"` + )}?`, + `${maybeLogReleaseGroup( + `What is the exact version for project "${projectName}"` + )}?` + ); + } else { + specifier = await resolveSemverSpecifierFromPrompt( + `${maybeLogReleaseGroup( + `What kind of change is this for the ${projects.length} matched projects(s)` + )}?`, + `${maybeLogReleaseGroup( + `What is the exact version for the ${projects.length} matched project(s)` + )}?` + ); + } + break; + } + default: + throw new Error( + `Invalid specifierSource "${specifierSource}" provided. Must be one of "prompt" or "conventional-commits"` + ); + } + } + + // Resolve any local package dependencies for this project (before applying the new version or updating the versionData) + const localPackageDependencies = resolveLocalPackageDependencies( + tree, + options.projectGraph, + projects, + projectNameToPackageRootMap, + resolvePackageRoot, + // includeAll when the release group is independent, as we may be filtering to a specific subset of projects, but we still want to update their dependents + options.releaseGroup.projectsRelationship === 'independent' + ); + + const dependentProjects = Object.values(localPackageDependencies) + .flat() + .filter((localPackageDependency) => { + return localPackageDependency.target === project.name; + }); + + if (!currentVersion) { + throw new Error( + `The current version for project "${project.name}" could not be resolved. Please report this on https://github.com/nrwl/nx` + ); + } + + versionData[projectName] = { + currentVersion, + dependentProjects, + newVersion: null, // will stay as null in the final result in the case that no changes are detected + }; + + if (!specifier) { + log( + `🚫 Skipping versioning "${packageName}" as no changes were detected.` + ); + continue; + } + + const newVersion = deriveNewSemverVersion( + currentVersion, + specifier, + options.preid + ); + versionData[projectName].newVersion = newVersion; + + pkg.version = newVersion; + tree.write(cargoTomlPath, stringifyCargoToml(data)); + + log( + `✍️ New version ${newVersion} written to ${workspaceRelativeCargoTomlPath}` + ); + + if (dependentProjects.length > 0) { + log( + `✍️ Applying new version ${newVersion} to ${ + dependentProjects.length + } ${ + dependentProjects.length > 1 + ? 'packages which depend' + : 'package which depends' + } on ${project.name}` + ); + } + + for (const dependentProject of dependentProjects) { + const dependentPackageRoot = projectNameToPackageRootMap.get( + dependentProject.source + ); + if (!dependentPackageRoot) { + throw new Error( + `The dependent project "${dependentProject.source}" does not have a packageRoot available. Please report this issue on https://github.com/nrwl/nx` + ); + } + const dependentPkg = parseCargoTomlWithTree( + tree, + dependentPackageRoot, + dependentProject.source + ); + + // Auto (i.e.infer existing) by default + let versionPrefix = options.versionPrefix ?? 'auto'; + let updatedDependencyData: string | Record = ''; + + for (const [dependencyName, dependencyData] of Object.entries( + dependentPkg[dependentProject.dependencyCollection] ?? {} + )) { + if (dependencyName !== dependentProject.target) { + continue; + } + + // For auto, we infer the prefix based on the current version of the dependent + if (versionPrefix === 'auto') { + versionPrefix = ''; // we don't want to end up printing auto + + if (currentVersion) { + const dependencyVersion = + typeof dependencyData === 'string' + ? dependencyData + : dependencyData.version; + const prefixMatch = dependencyVersion?.match(/^[~^=]/); + if (prefixMatch) { + versionPrefix = prefixMatch[0]; + } else { + versionPrefix = ''; + } + + // In rust the default version prefix/behavior is ^, so a ^ may have been inferred by cargo metadata via no prefix or an explicit ^. + if (versionPrefix === '^') { + // dependencyData.version is ensured to not be null here because of the versionPrefix == '^' check + if (!dependencyData.version.startsWith('^')) { + versionPrefix = ''; + } + } + } + } + const newVersionWithPrefix = `${versionPrefix}${newVersion}`; + updatedDependencyData = + typeof dependencyData === 'string' + ? newVersionWithPrefix + : { + ...dependencyData, + version: newVersionWithPrefix, + }; + break; + } + + const cargoTomlToUpdate = joinPathFragments( + dependentPackageRoot, + 'Cargo.toml' + ); + + modifyCargoTable( + dependentPkg, + dependentProject.dependencyCollection, + dependentProject.target, + updatedDependencyData + ); + + tree.write(cargoTomlToUpdate, stringifyCargoToml(dependentPkg)); + } + } + + /** + * Ensure that formatting is applied so that version bump diffs are as minimal as possible + * within the context of the user's workspace. + */ + await formatFiles(tree); + + // Return the version data so that it can be leveraged by the overall version command + return { + data: versionData, + callback: async (tree, opts) => { + output.logSingleLine(`Updating Cargo.lock file`); + if (opts.generatorOptions?.skipLockFileUpdate) { + if (process.env.NX_VERBOSE_LOGGING === 'true') { + console.log( + '\nSkipped lock file update because skipLockFileUpdate was set.' + ); + } + return []; + } + if (opts.dryRun) { + return []; + } + const updatedPackages: string[] = []; + Object.entries(versionData).forEach(([projectName, versionData]) => { + if (versionData.newVersion) { + updatedPackages.push(projectName); + } + }); + execSync(`cargo update ${updatedPackages.join(' ')}`, { + maxBuffer: 1024 * 1024 * 1024, + cwd: tree.root, + }); + return hasGitDiff('Cargo.lock') ? ['Cargo.lock'] : []; + }, + }; + } catch (e: any) { + if (process.env.NX_VERBOSE_LOGGING === 'true') { + output.error({ + title: e.message, + }); + // Dump the full stack trace in verbose mode + console.error(e); + } else { + output.error({ + title: e.message, + }); + } + process.exit(1); + } +} + +export default releaseVersionGenerator; + +function createResolvePackageRoot(customPackageRoot?: string) { + return (projectNode: ProjectGraphProjectNode): string => { + // Default to the project root if no custom packageRoot + if (!customPackageRoot) { + return projectNode.data.root; + } + return interpolate(customPackageRoot, { + workspaceRoot: '', + projectRoot: projectNode.data.root, + projectName: projectNode.name, + }); + }; +} + +const colors = [ + { instance: chalk.green, spinnerColor: 'green' }, + { instance: chalk.greenBright, spinnerColor: 'green' }, + { instance: chalk.red, spinnerColor: 'red' }, + { instance: chalk.redBright, spinnerColor: 'red' }, + { instance: chalk.cyan, spinnerColor: 'cyan' }, + { instance: chalk.cyanBright, spinnerColor: 'cyan' }, + { instance: chalk.yellow, spinnerColor: 'yellow' }, + { instance: chalk.yellowBright, spinnerColor: 'yellow' }, + { instance: chalk.magenta, spinnerColor: 'magenta' }, + { instance: chalk.magentaBright, spinnerColor: 'magenta' }, +] as const; + +function getColor(projectName: string) { + let code = 0; + for (let i = 0; i < projectName.length; ++i) { + code += projectName.charCodeAt(i); + } + const colorIndex = code % colors.length; + + return colors[colorIndex]; +} + +interface LocalPackageDependency extends ProjectGraphDependency { + dependencyCollection: 'dependencies' | 'dev-dependencies'; +} + +function fillPackageRootMap( + projectNameToPackageRootMap: Map, + projectNode: ProjectGraphProjectNode, + resolvePackageRoot: (projectNode: ProjectGraphProjectNode) => string +) { + // Resolve the Cargo.toml path for the project, taking into account any custom packageRoot settings + const packageRoot = projectNameToPackageRootMap.get(projectNode.name); + // packageRoot wasn't added to the map yet, try to resolve it dynamically + if (!packageRoot) { + const resolvedPackageRoot = resolvePackageRoot(projectNode); + // Append it to the map for later use within the release version generator + if (resolvedPackageRoot) { + projectNameToPackageRootMap.set(projectNode.name, resolvedPackageRoot); + } + } +} + +function resolveLocalPackageDependencies( + tree: Tree, + projectGraph: ProjectGraph, + filteredProjects: ProjectGraphProjectNode[], + projectNameToPackageRootMap: Map, + resolvePackageRoot: (projectNode: ProjectGraphProjectNode) => string, + includeDependents = false +): Record { + const localPackageDependencies: Record = {}; + const filteredProjectsSet = new Set(); + + // Recursively retrieves all dependents for a given project + function addDeps(projectName: string, seen: Set) { + if (seen.has(projectName)) return; + seen.add(projectName); + Object.values(projectGraph.dependencies) + .filter((deps) => deps.some((d) => d.target === projectName)) + .flatMap((deps) => deps.map((d) => d.source)) + .forEach((d) => addDeps(d, seen)); + } + + filteredProjects.forEach((p) => addDeps(p.name, filteredProjectsSet)); + + const projects = includeDependents + ? [...filteredProjectsSet] + .map((dep) => projectGraph.nodes[dep]) + .filter(Boolean) + : filteredProjects; + + for (const projectNode of projects) { + // Ensure that the packageRoot is resolved for the project and added to the map for later use + if (includeDependents) { + fillPackageRootMap( + projectNameToPackageRootMap, + projectNode, + resolvePackageRoot + ); + } + const projectDeps = projectGraph.dependencies[projectNode.name]; + if (!projectDeps) { + continue; + } + const localPackageDepsForProject = []; + for (const dep of projectDeps) { + const depProject = projectGraph.nodes[dep.target]; + if (!depProject) { + continue; + } + // Ensure that the packageRoot is resolved for the dependent project and added to the map for later use + fillPackageRootMap( + projectNameToPackageRootMap, + depProject, + resolvePackageRoot + ); + const depProjectRoot = projectNameToPackageRootMap.get(dep.target); + if (!depProjectRoot) { + throw new Error( + `The project "${dep.target}" does not have a packageRoot available. Please report this issue on https://github.com/nrwl/nx` + ); + } + const cargoToml = parseCargoTomlWithTree( + tree, + resolvePackageRoot(projectNode), + projectNode.name + ); + const dependencies = cargoToml.dependencies ?? {}; + const devDependencies = cargoToml['dev-dependencies'] ?? {}; + const dependencyCollection: 'dependencies' | 'dev-dependencies' | null = + dependencies[depProject.name] + ? 'dependencies' + : devDependencies[depProject.name] + ? 'dev-dependencies' + : null; + if (!dependencyCollection) { + throw new Error( + `The project "${projectNode.name}" does not have a local dependency on "${depProject.name}" in its Cargo.toml` + ); + } + localPackageDepsForProject.push({ + ...dep, + dependencyCollection, + }); + } + + localPackageDependencies[projectNode.name] = localPackageDepsForProject; + } + + return localPackageDependencies; +} + +function hasGitDiff(filePath: string) { + try { + const result = execSync(`git diff --name-only "${filePath}"`).toString(); + return result.trim() === filePath; + } catch (error) { + // Assuming any error means no diff or a problem executing git command + return false; + } +} diff --git a/packages/rust/src/generators/release-version/schema.d.ts b/packages/rust/src/generators/release-version/schema.d.ts new file mode 100644 index 0000000..7ac2c73 --- /dev/null +++ b/packages/rust/src/generators/release-version/schema.d.ts @@ -0,0 +1 @@ +export { ReleaseVersionGeneratorSchema } from 'nx/src/command-line/release/version'; \ No newline at end of file diff --git a/packages/rust/src/generators/release-version/schema.json b/packages/rust/src/generators/release-version/schema.json new file mode 100644 index 0000000..74eb664 --- /dev/null +++ b/packages/rust/src/generators/release-version/schema.json @@ -0,0 +1,55 @@ +{ + "$schema": "https://json-schema.org/schema", + "$id": "NxRustReleaseVersionGenerator", + "cli": "nx", + "title": "Implementation details of `nx release version`", + "description": "DO NOT INVOKE DIRECTLY WITH `nx generate`. Use `nx release version` instead.", + "type": "object", + "properties": { + "projects": { + "type": "array", + "description": "The ProjectGraphProjectNodes being versioned in the current execution.", + "items": { + "type": "object" + } + }, + "projectGraph": { + "type": "object", + "description": "ProjectGraph instance" + }, + "specifier": { + "type": "string", + "description": "Exact version or semver keyword to apply to the selected release group. Overrides specifierSource." + }, + "releaseGroup": { + "type": "object", + "description": "The resolved release group configuration, including name, relevant to all projects in the current execution." + }, + "specifierSource": { + "type": "string", + "default": "prompt", + "description": "Which approach to use to determine the semver specifier used to bump the version of the project.", + "enum": ["prompt", "conventional-commits"] + }, + "preid": { + "type": "string", + "description": "The optional prerelease identifier to apply to the version, in the case that specifier has been set to prerelease." + }, + "packageRoot": { + "type": "string", + "description": "The root directory of the directory (containing a manifest file at its root) to publish. Defaults to the project root" + }, + "currentVersionResolver": { + "type": "string", + "default": "disk", + "description": "Which approach to use to determine the current version of the project.", + "enum": ["registry", "disk", "git-tag"] + }, + "currentVersionResolverMetadata": { + "type": "object", + "description": "Additional metadata to pass to the current version resolver.", + "default": {} + } + }, + "required": ["projects", "projectGraph", "releaseGroup"] +} diff --git a/packages/rust/src/generators/release-version/test-utils/create-workspace-with-package-dependencies.ts b/packages/rust/src/generators/release-version/test-utils/create-workspace-with-package-dependencies.ts new file mode 100644 index 0000000..305b9db --- /dev/null +++ b/packages/rust/src/generators/release-version/test-utils/create-workspace-with-package-dependencies.ts @@ -0,0 +1,68 @@ +import { ProjectGraph, Tree } from '@nx/devkit'; +import { CargoToml } from '../../../models/cargo.toml'; +import { modifyCargoTable, stringifyCargoToml } from '../../../utils/toml'; + +interface ProjectAndPackageData { + [projectName: string]: { + projectRoot: string; + packageName: string; + version: string; + cargoTomlPath: string; + localDependencies: { + projectName: string; + dependencyCollection: 'dependencies' | 'dev-dependencies'; + version: string; + }[]; + }; +} + +export function createWorkspaceWithPackageDependencies( + tree: Tree, + projectAndPackageData: ProjectAndPackageData +): ProjectGraph { + const projectGraph: ProjectGraph = { + nodes: {}, + dependencies: {}, + }; + + for (const [projectName, data] of Object.entries(projectAndPackageData)) { + const cargoToml: CargoToml = { + package: { + name: data.packageName, + version: data.version, + }, + }; + for (const dependency of data.localDependencies) { + const dependencyPackageName = + projectAndPackageData[dependency.projectName].packageName; + modifyCargoTable( + cargoToml, + dependency.dependencyCollection, + dependencyPackageName, + { + version: dependency.version, + } + ); + } + // add the project and its nx project level dependencies to the projectGraph + projectGraph.nodes[projectName] = { + name: projectName, + type: 'lib', + data: { + root: data.projectRoot, + }, + }; + projectGraph.dependencies[projectName] = data.localDependencies.map( + (dependency) => ({ + source: projectName, + target: dependency.projectName, + type: 'static', + }) + ); + + // create the Cargo.toml in the tree + tree.write(data.cargoTomlPath, stringifyCargoToml(cargoToml)); + } + + return projectGraph; +} diff --git a/packages/rust/src/graph.ts b/packages/rust/src/graph.ts new file mode 100644 index 0000000..dbc5aff --- /dev/null +++ b/packages/rust/src/graph.ts @@ -0,0 +1,194 @@ +import { + createNodesFromFiles, + normalizePath, + workspaceRoot, + type CreateDependencies, + type CreateNodes, + type CreateNodesContext, + type CreateNodesContextV2, + type CreateNodesV2, + type ProjectConfiguration, + type RawProjectGraphDependency, +} from '@nx/devkit'; +import { + DependencyType, + ProjectGraphExternalNode, +} from 'nx/src/config/project-graph'; +import { dirname, relative } from 'path'; +import type { Package } from './models/cargo-metadata'; +import { cargoMetadata, isExternal } from './utils/cargo'; + +const cargoGlob = '*/**/Cargo.toml'; + +export const createNodesV2: CreateNodesV2 = [ + cargoGlob, + async (configFilePaths, options, context) => { + const result = processCargoMetadata(context); + + return await createNodesFromFiles( + async (configFile, options, context) => { + const projects = filterProject(result.projects, configFile); + if (!projects) { + return { projects: {}, externalNodes: {} }; + } + + return { projects, externalNodes: result.externalNodes }; + }, + configFilePaths, + options, + context + ); + }, +]; + +export const createNodes: CreateNodes = [ + cargoGlob, + (projectFile, opts, context) => { + const result = processCargoMetadata(context); + + const projects = filterProject(result.projects, projectFile); + if (!projects) { + return { projects: {}, externalNodes: {} }; + } + + return { projects, externalNodes: result.externalNodes }; + }, +]; + +function processCargoMetadata(ctx: CreateNodesContext | CreateNodesContextV2): { + projects: Record; + externalNodes: Record; +} { + const metadata = cargoMetadata(); + if (!metadata) { + return { projects: {}, externalNodes: {} }; + } + + const { packages: cargoPackages } = metadata; + + const externalNodes: Record = {}; + const projects: Record = {}; + + const cargoPackageMap = cargoPackages.reduce((acc, p) => { + if (!acc.has(p.name)) { + acc.set(p.name, p); + } + return acc; + }, new Map()); + + for (const pkg of cargoPackages) { + if (!isExternal(pkg, ctx.workspaceRoot)) { + const root = normalizePath( + dirname(relative(ctx.workspaceRoot, pkg.manifest_path)) + ); + + // TODO(cammisuli): provide defaults for non-project.json workspaces + const targets: ProjectConfiguration['targets'] = {}; + + // Apply nx-release-publish target for non-private projects + const isPrivate = pkg.publish?.length === 0; + if (!isPrivate) { + targets['nx-release-publish'] = { + dependsOn: ['^nx-release-publish'], + executor: '@loafle/nx-rust:release-publish', + options: {}, + }; + } + + projects[root] = { + root, + name: pkg.name, + targets, + release: { + version: { + generator: '@loafle/nx-rust:release-version', + }, + }, + }; + } + for (const dep of pkg.dependencies) { + if (isExternal(dep, ctx.workspaceRoot)) { + const externalDepName = `cargo:${dep.name}`; + if (!externalNodes?.[externalDepName]) { + externalNodes[externalDepName] = { + type: 'cargo' as any, + name: externalDepName as any, + data: { + packageName: dep.name, + version: cargoPackageMap.get(dep.name)?.version ?? '0.0.0', + }, + }; + } + } + } + } + + return { + projects, + externalNodes, + }; +} + +function filterProject( + projects: Record, + configFile: string +): Record | null { + const configDir = normalizePath(dirname(configFile)); + + if (projects[configDir]) { + return { [configDir]: projects[configDir] }; + } + + return null; +} + +export const createDependencies: CreateDependencies = ( + _, + { projects, externalNodes } +) => { + const metadata = cargoMetadata(); + if (!metadata) { + return []; + } + + const { packages: cargoPackages } = metadata; + + const dependencies: RawProjectGraphDependency[] = []; + + for (const pkg of cargoPackages) { + if (projects[pkg.name]) { + for (const deps of pkg.dependencies) { + // if the dependency is listed in nx projects, it's not an external dependency + if (projects[deps.name]) { + dependencies.push( + createDependency(pkg, deps.name, DependencyType.static) + ); + } else { + const externalDepName = `cargo:${deps.name}`; + if (externalDepName in (externalNodes ?? {})) { + dependencies.push( + createDependency(pkg, externalDepName, DependencyType.static) + ); + } + } + } + } + } + + return dependencies; +}; + +function createDependency( + pkg: Package, + depName: string, + type: DependencyType +): RawProjectGraphDependency { + const target = pkg.manifest_path.replace(/\\/g, '/'); + const workspaceRootClean = workspaceRoot.replace(/\\/g, '/'); + return { + type, + source: pkg.name, + target: depName, + sourceFile: target.replace(`${workspaceRootClean}/`, ''), + }; +} diff --git a/packages/rust/src/index.ts b/packages/rust/src/index.ts new file mode 100644 index 0000000..13c663c --- /dev/null +++ b/packages/rust/src/index.ts @@ -0,0 +1,11 @@ +import { NxPlugin } from '@nx/devkit'; +import { createDependencies, createNodes, createNodesV2 } from './graph'; + +const nxPlugin: NxPlugin = { + name: '@loafle/nx-rust', + createDependencies, + createNodes, + createNodesV2, +}; + +export = nxPlugin; diff --git a/packages/rust/src/models/base-options.d.ts b/packages/rust/src/models/base-options.d.ts new file mode 100644 index 0000000..c491036 --- /dev/null +++ b/packages/rust/src/models/base-options.d.ts @@ -0,0 +1,12 @@ +export interface BaseOptions { + package?: string; + toolchain?: 'stable' | 'beta' | 'nightly'; + target?: string; + profile?: string; + release?: boolean; + 'target-dir'?: string; + cwd?: string; + features?: string | string[]; + 'all-features'?: boolean; + args?: string | string[]; +} diff --git a/packages/rust/src/models/cargo-metadata.ts b/packages/rust/src/models/cargo-metadata.ts new file mode 100644 index 0000000..8a4e7d3 --- /dev/null +++ b/packages/rust/src/models/cargo-metadata.ts @@ -0,0 +1,130 @@ +/** + * Cargo metadata type retrieved from + * https://doc.rust-lang.org/cargo/commands/cargo-metadata.html + */ + +export interface CargoMetadata { + packages: Package[]; + workspace_members: string[]; + resolve: Resolve; + cwd: string; + target_directory: string; + version: number; + workspace_root: string; + metadata: Metadata2; +} + +export interface Package { + name: string; + version: string; + id: string; + license: string; + license_file: string; + description: string; + source: any; + dependencies: Dependency[]; + targets: Target[]; + features: Features; + manifest_path: string; + metadata: Metadata; + /** + * From the docs: + * "List of registries to which this package may be published. + * Publishing is unrestricted if null, and forbidden if an empty array." + * + * Additional observation: + * false can be used by the end user but it will be converted to an empty + * array in the cargo metadata output. + */ + publish: string[] | null; + authors: string[]; + categories: string[]; + default_run: any; + rust_version: string; + keywords: string[]; + readme: string; + repository: string; + homepage: string; + documentation: string; + edition: string; + links: any; +} + +export interface Dependency { + name: string; + source: string; + req: string; + kind: any; + rename: any; + optional: boolean; + uses_default_features: boolean; + features: any[]; + target: string; + path: string; + registry: any; +} + +export interface Target { + kind: string[]; + crate_types: string[]; + name: string; + src_path: string; + edition: string; + 'required-features': string[]; + doc: boolean; + doctest: boolean; + test: boolean; +} + +export interface Features { + default: string[]; + feat1: any[]; + feat2: any[]; +} + +export interface Metadata { + docs: Docs; +} + +export interface Docs { + rs: Rs; +} + +export interface Rs { + 'all-features': boolean; +} + +export interface Resolve { + nodes: Node[]; + root: string; +} + +export interface Node { + id: string; + dependencies: string[]; + deps: Dep[]; + features: string[]; +} + +export interface Dep { + name: string; + pkg: string; + dep_kinds: DepKind[]; +} + +export interface DepKind { + kind: any; + target: string; +} + +export interface Metadata2 { + docs: Docs2; +} + +export interface Docs2 { + rs: Rs2; +} + +export interface Rs2 { + 'all-features': boolean; +} diff --git a/packages/rust/src/models/cargo.toml.ts b/packages/rust/src/models/cargo.toml.ts new file mode 100644 index 0000000..a4e533a --- /dev/null +++ b/packages/rust/src/models/cargo.toml.ts @@ -0,0 +1,14 @@ +export interface CargoToml { + // Workspace is only applicable to the root Cargo.toml + workspace?: { members: string[] }; + package: any; + dependencies?: Record< + string, + string | { version: string; features?: string[]; optional?: boolean } + >; + 'dev-dependencies'?: Record< + string, + string | { version: string; features: string[] } + >; + [key: string]: any; +} diff --git a/packages/rust/src/utils/add-executors.ts b/packages/rust/src/utils/add-executors.ts new file mode 100644 index 0000000..c213c6b --- /dev/null +++ b/packages/rust/src/utils/add-executors.ts @@ -0,0 +1,102 @@ +import { TargetConfiguration } from '@nx/devkit'; +import { BuildExecutorSchema } from '../executors/build/schema'; +import { LintExecutorSchema } from '../executors/lint/schema'; +import { RunExecutorSchema } from '../executors/run/schema'; +import { TestExecutorSchema } from '../executors/test/schema'; +import { WasmPackExecutorSchema } from '../executors/wasm-pack/schema'; + +export function addBuildExecutor( + additionalOptions?: BuildExecutorSchema +): TargetConfiguration { + return { + cache: true, + executor: '@loafle/nx-rust:build', + outputs: ['{options.target-dir}'], + options: { + ...additionalOptions, + }, + configurations: { + production: { + release: true, + }, + }, + }; +} + +export function addCheckExecutor( + additionalOptions?: BuildExecutorSchema +): TargetConfiguration { + return { + executor: '@loafle/nx-rust:check', + outputs: ['{options.target-dir}'], + options: { + ...additionalOptions, + }, + }; +} + +export function addTestExecutor( + additionalOptions?: TestExecutorSchema +): TargetConfiguration { + return { + cache: true, + executor: '@loafle/nx-rust:test', + outputs: ['{options.target-dir}'], + options: { + ...additionalOptions, + }, + configurations: { + production: { + release: true, + }, + }, + }; +} + +export function addRunExecutor( + additionalOptions?: RunExecutorSchema +): TargetConfiguration { + return { + executor: '@loafle/nx-rust:run', + outputs: ['{options.target-dir}'], + options: { + ...additionalOptions, + }, + configurations: { + production: { + release: true, + }, + }, + }; +} + +export function addLintExecutor( + additionalOptions?: LintExecutorSchema +): TargetConfiguration { + return { + cache: true, + executor: '@loafle/nx-rust:lint', + outputs: ['{options.target-dir}'], + options: { + ...additionalOptions, + }, + }; +} + +export function addWasmPackExecutor( + additionalOptions?: WasmPackExecutorSchema +): TargetConfiguration { + return { + cache: true, + executor: '@loafle/nx-rust:wasm-pack', + outputs: ['{options.target-dir}'], + options: { + ...additionalOptions, + }, + configurations: { + production: { + release: true, + }, + }, + }; +} diff --git a/packages/rust/src/utils/add-to-workspace.ts b/packages/rust/src/utils/add-to-workspace.ts new file mode 100644 index 0000000..58aa2d8 --- /dev/null +++ b/packages/rust/src/utils/add-to-workspace.ts @@ -0,0 +1,32 @@ +import { Tree, logger } from '@nx/devkit'; +import { parseCargoToml, stringifyCargoToml } from './toml'; + +export function addToCargoWorkspace(tree: Tree, projectPath: string) { + const cargoTomlString = tree.read('./Cargo.toml')?.toString(); + if (!cargoTomlString) { + return; + } + + const cargoToml = parseCargoToml(cargoTomlString); + const workspace = cargoToml.workspace; + if (!workspace) { + throw new Error('Cargo.toml does not contain a workspace section'); + } + + const members = workspace.members; + if (!members) { + throw new Error('Cargo.toml workspace section does not contain members'); + } + + // Remove leading './' if it exists + const cleanProjectPath = projectPath.replace(/^\.\//, ''); + + if (members.includes(cleanProjectPath)) { + logger.info(`${cleanProjectPath} already exists in the Cargo.toml members`); + } else { + workspace.members = members.concat([cleanProjectPath]); + } + + const newCargoToml = stringifyCargoToml(cargoToml); + tree.write('./Cargo.toml', newCargoToml); +} diff --git a/packages/rust/src/utils/build-command.spec.ts b/packages/rust/src/utils/build-command.spec.ts new file mode 100644 index 0000000..41a7a0d --- /dev/null +++ b/packages/rust/src/utils/build-command.spec.ts @@ -0,0 +1,129 @@ +import { buildCommand } from './build-command'; + +describe('build command', () => { + const context = { + projectName: 'project', + cwd: '', + isVerbose: false, + root: '', + workspace: {} as any, + projectsConfigurations: {} as any, + nxJsonConfiguration: {} as any, + projectGraph: {} as any, + }; + + it('should build a command for cargo with no arguments', () => { + const command = buildCommand('run', {}, context); + expect(command).toMatchInlineSnapshot(` + Array [ + "run", + "-p", + "project", + ] + `); + }); + + it('should always have the toolchain before all other arguments with a "+"', () => { + const command = buildCommand( + 'run', + { toolchain: 'beta', 'all-features': true, profile: 'release' }, + context + ); + expect(command).toMatchInlineSnapshot(` + Array [ + "+beta", + "run", + "--all-features", + "--profile", + "release", + "-p", + "project", + ] + `); + }); + + describe('boolean arguments', () => { + it('false arguments should not be present', () => { + const command = buildCommand('run', { release: false }, context); + expect(command).toMatchInlineSnapshot(` + Array [ + "run", + "-p", + "project", + ] + `); + }); + + it('true arguments should be present', () => { + const command = buildCommand('run', { release: true }, context); + expect(command).toMatchInlineSnapshot(` + Array [ + "run", + "--release", + "-p", + "project", + ] + `); + }); + }); + + describe('array arguments', () => { + it('should include multiple flags for arrays', () => { + const command = buildCommand( + 'run', + { + features: ['foo', 'bar'], + }, + context + ); + expect(command).toMatchInlineSnapshot(` + Array [ + "run", + "--features", + "foo", + "--features", + "bar", + "-p", + "project", + ] + `); + }); + }); + + describe('user arguments', () => { + it('should put single string user arguments at the end of the command after --', () => { + const command = buildCommand( + 'run', + { args: "file1 file2" }, + context + ); + expect(command).toMatchInlineSnapshot(` + Array [ + "run", + "-p", + "project", + "--", + "file1 file2", + ] + `); + }); + + it('should put array of user arguments at the end of the command after --', () => { + const command = buildCommand( + 'run', + { args: ["file1", "file2"] }, + context + ); + expect(command).toMatchInlineSnapshot(` + Array [ + "run", + "-p", + "project", + "--", + "file1", + "file2", + ] + `); + }); + }); +}); diff --git a/packages/rust/src/utils/build-command.ts b/packages/rust/src/utils/build-command.ts new file mode 100644 index 0000000..2d18bd2 --- /dev/null +++ b/packages/rust/src/utils/build-command.ts @@ -0,0 +1,51 @@ +import { ExecutorContext } from '@nx/devkit'; +import { BaseOptions } from '../models/base-options'; + +export function buildCommand( + baseCommand: string, + options: BaseOptions, + context: ExecutorContext +): string[] { + const args = []; + + if (options.toolchain && options.toolchain !== 'stable') { + args.push(`+${options.toolchain}`); + } + + args.push(baseCommand); + + for (const [key, value] of Object.entries(options)) { + if (key === 'toolchain') { + continue; + } + + if (key === 'args') { + continue; + } + + if (typeof value === 'boolean') { + // false flags should not be added to the cargo args + if (value) { + args.push(`--${key}`); + } + } else if (Array.isArray(value)) { + for (const item of value) { + args.push(`--${key}`, item); + } + } else { + args.push(`--${key}`, value); + } + } + + if (!args.includes("--package")) { + args.push("-p", context.projectName); + } + + if (options.args && Array.isArray(options.args)) { + args.push("--", ...options.args); + } else if (options.args && !Array.isArray(options.args)) { + args.push("--", options.args); + } + + return args; +} diff --git a/packages/rust/src/utils/cargo.ts b/packages/rust/src/utils/cargo.ts new file mode 100644 index 0000000..45e38f0 --- /dev/null +++ b/packages/rust/src/utils/cargo.ts @@ -0,0 +1,113 @@ +import chalk from 'chalk'; +import { relative } from 'path'; +import { ChildProcess, execSync, spawn, StdioOptions } from 'child_process'; +import { runProcess } from './run-process'; +import { CargoMetadata, Dependency, Package } from '../models/cargo-metadata'; + +interface CargoRun { + success: boolean; + output: string; +} + +interface RunCargoOptions { + stdio: StdioOptions; + env: NodeJS.ProcessEnv | undefined; +} + +export let childProcess: ChildProcess | null; + +export async function cargoCommand( + ...args: string[] +): Promise<{ success: boolean }> { + console.log(chalk.dim(`> cargo ${args.join(' ')}`)); + return runProcess('cargo', ...['--color', 'always', ...args]); +} + +export function cargoRunCommand( + ...args: string[] +): Promise<{ success: boolean }> { + console.log(chalk.dim(`> cargo ${args.join(' ')}`)); + return new Promise((resolve, reject) => { + childProcess = spawn('cargo', ['--color', 'always', ...args], { + cwd: process.cwd(), + windowsHide: true, + detached: false, + shell: false, + stdio: ['inherit', 'inherit', 'inherit'], + }); + + // Ensure the child process is killed when the parent exits + process.on('exit', () => childProcess?.kill()); + process.on('SIGTERM', () => childProcess?.kill()); + process.on('SIGINT', () => childProcess?.kill()); + + childProcess.on('error', (err) => { + reject({ success: false }); + }); + + childProcess.on('exit', (code) => { + childProcess = null; + if (code === 0) { + resolve({ success: true }); + } else { + reject({ success: false }); + } + }); + }); +} + +export function cargoCommandSync( + args = '', + options?: Partial +): CargoRun { + const normalizedOptions: RunCargoOptions = { + stdio: options?.stdio ?? 'inherit', + env: { + ...process.env, + ...options?.env, + }, + }; + + try { + return { + output: execSync(`cargo ${args}`, { + encoding: 'utf8', + windowsHide: true, + stdio: normalizedOptions.stdio, + env: normalizedOptions.env, + maxBuffer: 1024 * 1024 * 10, + }), + success: true, + }; + } catch (e) { + return { + output: e as string, + success: false, + }; + } +} + +export function cargoMetadata(): CargoMetadata | null { + const output = cargoCommandSync('metadata --format-version=1', { + stdio: 'pipe', + }); + + if (!output.success) { + return null; + } + + return JSON.parse(output.output) as CargoMetadata; +} + +export function isExternal( + packageOrDep: Package | Dependency, + workspaceRoot: string +) { + const isRegistry = packageOrDep.source?.startsWith('registry+') ?? false; + const isGit = packageOrDep.source?.startsWith('git+') ?? false; + const isOutsideWorkspace = + 'path' in packageOrDep && + relative(workspaceRoot, packageOrDep.path).startsWith('..'); + + return isRegistry || isGit || isOutsideWorkspace; +} diff --git a/packages/rust/src/utils/normalize-options.spec.ts b/packages/rust/src/utils/normalize-options.spec.ts new file mode 100644 index 0000000..9e8e261 --- /dev/null +++ b/packages/rust/src/utils/normalize-options.spec.ts @@ -0,0 +1,83 @@ +import { Tree, updateJson } from '@nx/devkit'; +import { createTreeWithEmptyWorkspace } from '@nx/devkit/testing'; +import { normalizeOptions } from './normalize-options'; + +describe('normalize options', () => { + let appTree: Tree; + + beforeEach(() => { + appTree = createTreeWithEmptyWorkspace(); + }); + + it('should normalize options for an app', () => { + const options = normalizeOptions(appTree, 'app', { + name: 'test-name', + directory: 'test-directory/sub/sub-two', + tags: 'test-tag, test-tag-two', + }); + expect(options).toMatchInlineSnapshot(` + Object { + "directory": "test-directory/sub/sub-two", + "edition": "2021", + "name": "test-name", + "parsedTags": Array [ + "test-tag", + "test-tag-two", + ], + "projectDirectory": "test_directory/sub/sub_two/test_name", + "projectName": "test_directory_sub_sub_two_test_name", + "projectRoot": "./test_directory/sub/sub_two/test_name", + "tags": "test-tag, test-tag-two", + "targetDir": "dist/target/test_directory_sub_sub_two_test_name", + } + `); + }); + it('should normalize options for a lib', () => { + const options = normalizeOptions(appTree, 'lib', { + name: 'test-name', + directory: 'test-directory/sub/sub-two', + tags: 'test-tag, test-tag-two', + }); + expect(options).toMatchInlineSnapshot(` + Object { + "directory": "test-directory/sub/sub-two", + "edition": "2021", + "name": "test-name", + "parsedTags": Array [ + "test-tag", + "test-tag-two", + ], + "projectDirectory": "test_directory/sub/sub_two/test_name", + "projectName": "test_directory_sub_sub_two_test_name", + "projectRoot": "./test_directory/sub/sub_two/test_name", + "tags": "test-tag, test-tag-two", + "targetDir": "dist/target/test_directory_sub_sub_two_test_name", + } + `); + }); + + it('should handle empty appsDir or libsDir', () => { + updateJson(appTree, 'nx.json', (json) => { + json.workspaceLayout = { + appsDir: '', + libsDir: '', + }; + return json; + }); + const options = normalizeOptions(appTree, 'lib', { + name: 'test-name', + }); + + expect(options).toMatchInlineSnapshot(` + Object { + "edition": "2021", + "name": "test-name", + "parsedTags": Array [], + "projectDirectory": "test_name", + "projectName": "test_name", + "projectRoot": "test_name", + "targetDir": "dist/target/test_name", + } + `); + }); +}); diff --git a/packages/rust/src/utils/normalize-options.ts b/packages/rust/src/utils/normalize-options.ts new file mode 100644 index 0000000..a15cb15 --- /dev/null +++ b/packages/rust/src/utils/normalize-options.ts @@ -0,0 +1,51 @@ +import { getWorkspaceLayout, Tree } from '@nx/devkit'; +import snake_case from './snake_case'; + +export interface NormalizedSchema { + projectName: string; + projectRoot: string; + projectDirectory: string; + parsedTags: string[]; + targetDir: string; +} + +export function normalizeOptions< + T extends { + name: string; + edition?: '2015' | '2018' | '2021'; + tags?: string; + directory?: string; + } +>(tree: Tree, type: 'app' | 'lib', options: T): NormalizedSchema & T { + const name = snake_case(options.name); + const projectDirectory = options.directory + ? `${options.directory + .split('/') + .map((p) => snake_case(p)) + .join('/')}/${name}` + : name; + const projectName = projectDirectory.replace(new RegExp('/', 'g'), '_'); + + const { appsDir, libsDir } = getWorkspaceLayout(tree); + let baseDir = ''; + if (appsDir && libsDir) { + baseDir = (type === 'app' ? appsDir : libsDir) + '/'; + } + const projectRoot = `${baseDir}${projectDirectory}`; + const parsedTags = options.tags + ? options.tags.split(',').map((s) => s.trim()) + : []; + + // rust specifics + options.edition ??= '2021'; + const targetDir = `dist/target/${projectName}`; + + return { + ...options, + projectName, + projectRoot, + projectDirectory, + parsedTags, + targetDir, + }; +} diff --git a/packages/rust/src/utils/run-process.ts b/packages/rust/src/utils/run-process.ts new file mode 100644 index 0000000..5506901 --- /dev/null +++ b/packages/rust/src/utils/run-process.ts @@ -0,0 +1,34 @@ +import { execSync } from 'child_process'; +import { joinPathFragments, workspaceRoot } from '@nx/devkit'; +import { cargoMetadata } from './cargo'; + +export function runProcess( + processCmd: string, + ...args: string[] +): { success: boolean } | PromiseLike<{ success: boolean }> { + const metadata = cargoMetadata(); + const cwd = metadata?.cwd ?? process.cwd(); + const targetDir = + metadata?.target_directory ?? + joinPathFragments(workspaceRoot, 'dist', 'cargo'); + + return new Promise((resolve) => { + if (process.env.VERCEL) { + // Vercel doesnt have support for cargo atm, so auto success builds + return resolve({ success: true }); + } + + execSync(processCmd + ' ' + args.join(' '), { + cwd, + env: { + ...process.env, + RUSTC_WRAPPER: '', + CARGO_TARGET_DIR: targetDir, + CARGO_BUILD_TARGET_DIR: targetDir, + }, + windowsHide: true, + stdio: ['inherit', 'inherit', 'inherit'], + }); + resolve({ success: true }); + }); +} diff --git a/packages/rust/src/utils/snake_case.spec.ts b/packages/rust/src/utils/snake_case.spec.ts new file mode 100644 index 0000000..f2ad6fe --- /dev/null +++ b/packages/rust/src/utils/snake_case.spec.ts @@ -0,0 +1,18 @@ +import snake_case from './snake_case'; + +describe('snake_case', () => { + it('should convert strings to snake_case', () => { + expect(snake_case('hello world')).toEqual('hello_world'); + expect(snake_case('hello-world')).toEqual('hello_world'); + expect(snake_case('hell0 9world')).toEqual('hell0_9world'); + expect(snake_case('hello--world')).toEqual('hello__world'); + expect(snake_case('hello(world')).toEqual('hello_world'); + expect(snake_case('hello(world')).toEqual('hello_world'); + expect(snake_case('hello*world')).toEqual('hello_world'); + expect(snake_case('hello*world again')).toEqual('hello_world_again'); + expect(snake_case('hello.world.again')).toEqual('hello_world_again'); + expect(snake_case('h e l l o')).toEqual('h_e_l_l_o'); + expect(snake_case('HELLO WORLD')).toEqual('hello_world'); + expect(snake_case('HELLO-WORLD')).toEqual('hello_world'); + }); +}); diff --git a/packages/rust/src/utils/snake_case.ts b/packages/rust/src/utils/snake_case.ts new file mode 100644 index 0000000..dfb5e46 --- /dev/null +++ b/packages/rust/src/utils/snake_case.ts @@ -0,0 +1,26 @@ +export default function snake_case(str: string): string { + const chars = str.split(''); + + let converted = ''; + + for (const char of chars) { + if (isLetter(char)) { + converted += char.toLowerCase(); + } else if (isNumber(char)) { + converted += char; + } else { + converted += '_'; + } + } + + return converted; +} + +function isLetter(char: string) { + return char.toLowerCase() != char.toUpperCase(); +} + +function isNumber(char: string) { + const int = parseInt(char, 10); + return !isNaN(int); +} diff --git a/packages/rust/src/utils/toml.ts b/packages/rust/src/utils/toml.ts new file mode 100644 index 0000000..abb5dc4 --- /dev/null +++ b/packages/rust/src/utils/toml.ts @@ -0,0 +1,60 @@ +import TOML from '@ltd/j-toml'; +import { Tree, logger } from '@nx/devkit'; +import { CargoToml } from '../models/cargo.toml'; + +export function parseCargoTomlWithTree( + tree: Tree, + projectRoot: string, + projectName: string +) { + const cargoTomlString = tree.read(projectRoot + '/Cargo.toml')?.toString(); + if (!cargoTomlString) { + logger.error(`Cannot find a Cargo.toml file in the ${projectName}`); + throw new Error(); + } + + return parseCargoToml(cargoTomlString); +} + +export function parseCargoToml(cargoString: string) { + return TOML.parse(cargoString, { + x: { comment: true }, + }) as unknown as CargoToml; +} + +export function stringifyCargoToml(cargoToml: CargoToml) { + const tomlString = TOML.stringify(cargoToml, { + newlineAround: 'section', + }); + + if (Array.isArray(tomlString)) { + return tomlString.join('\n'); + } + + return tomlString; +} + +export function modifyCargoTable( + toml: CargoToml, + section: string, + key: string, + value: string | object | Array | (() => any) +) { + toml[section] ??= TOML.Section({}); + toml[section][key] = + typeof value === 'object' && !Array.isArray(value) + ? TOML.inline(value as any) + : typeof value === 'function' + ? value() + : value; +} + +export function modifyCargoNestedTable( + toml: CargoToml, + section: string, + key: string, + value: object +) { + toml[section] ??= {}; + toml[section][key] = TOML.Section(value as any); +} diff --git a/packages/rust/src/utils/versions.ts b/packages/rust/src/utils/versions.ts new file mode 100644 index 0000000..eb8330e --- /dev/null +++ b/packages/rust/src/utils/versions.ts @@ -0,0 +1,3 @@ +export const NAPI_VERSION = '3.0.0-alpha.63'; +export const NAPI_WASM_RUNTIME = '^0.2.4'; +export const NAPI_EMNAPI = '^1.1.0'; diff --git a/packages/rust/tsconfig.json b/packages/rust/tsconfig.json new file mode 100644 index 0000000..44cd445 --- /dev/null +++ b/packages/rust/tsconfig.json @@ -0,0 +1,17 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "module": "node16", + "moduleResolution": "node16" + }, + "files": [], + "include": [], + "references": [ + { + "path": "./tsconfig.lib.json" + }, + { + "path": "./tsconfig.spec.json" + } + ] +} diff --git a/packages/rust/tsconfig.lib.json b/packages/rust/tsconfig.lib.json new file mode 100644 index 0000000..0e68bec --- /dev/null +++ b/packages/rust/tsconfig.lib.json @@ -0,0 +1,10 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "declaration": true, + "types": ["node"] + }, + "exclude": ["**/*.spec.ts", "**/*.test.ts", "jest.config.ts"], + "include": ["**/*.ts"] +} diff --git a/packages/rust/tsconfig.spec.json b/packages/rust/tsconfig.spec.json new file mode 100644 index 0000000..46f9467 --- /dev/null +++ b/packages/rust/tsconfig.spec.json @@ -0,0 +1,20 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "outDir": "../../dist/out-tsc", + "module": "commonjs", + "types": ["jest", "node"] + }, + "include": [ + "**/*.spec.ts", + "**/*.test.ts", + "**/*.spec.tsx", + "**/*.test.tsx", + "**/*.spec.js", + "**/*.test.js", + "**/*.spec.jsx", + "**/*.test.jsx", + "**/*.d.ts", + "jest.config.ts" + ] +} diff --git a/project.json b/project.json new file mode 100644 index 0000000..5fe2ee0 --- /dev/null +++ b/project.json @@ -0,0 +1,14 @@ +{ + "name": "loafle", + "$schema": "node_modules/nx/schemas/project-schema.json", + "targets": { + "local-registry": { + "executor": "@nx/js:verdaccio", + "options": { + "config": ".verdaccio/config.yml", + "port": 3889, + "clear": true + } + } + } +} diff --git a/rust-toolchain.toml b/rust-toolchain.toml new file mode 100644 index 0000000..e588558 --- /dev/null +++ b/rust-toolchain.toml @@ -0,0 +1,4 @@ +[toolchain] +channel = "1.80.0" +targets = ["wasm32-wasip1-threads"] +profile = "default" diff --git a/tools/scripts/release.js b/tools/scripts/release.js new file mode 100644 index 0000000..6c3650f --- /dev/null +++ b/tools/scripts/release.js @@ -0,0 +1,135 @@ +// @ts-check + +const { execSync } = require('node:child_process'); +const { + releaseChangelog, + releaseVersion, + releasePublish, +} = require('nx/src/command-line/release'); +const yargs = require('yargs'); + +(async () => { + try { + const options = await yargs + .version(false) + .option('version', { + description: + 'Explicit version specifier to use, if overriding conventional commits', + type: 'string', + }) + .option('dryRun', { + alias: 'd', + description: + 'Whether or not to perform a dry-run of the release process, defaults to true', + type: 'boolean', + default: true, + }) + .option('verbose', { + description: + 'Whether or not to enable verbose logging, defaults to false', + type: 'boolean', + default: false, + }) + .option('local', { + description: 'Whether or not you are running a local release', + type: 'boolean', + default: true, + }) + .option('gitRemote', { + description: + 'The name of the git remote to push the release to, defaults to origin', + type: 'string', + }) + .option('otp', { + description: 'The otp code used for publishing in npm', + type: 'number', + }) + .parseAsync(); + if (!options.dryRun && !options.local) { + if (!process.env.GH_TOKEN && !process.env.GITHUB_TOKEN) { + throw new Error( + `GH_TOKEN or GITHUB_TOKEN environment variable must be set in order to run a real release` + ); + } + } + + if (!options.gitRemote) { + options.gitRemote = getRemoteFor('https://git.loafle.net/loafle/nx.git'); + } + + console.log(); + console.info(`********* Release Options **********`); + console.info( + `version : ${options.version ?? 'use conventional commits'}` + ); + console.info( + `dryRun : ${options.dryRun} ${options.dryRun ? '😅' : '🚨🚨🚨'}` + ); + console.info(`verbose : ${options.verbose}`); + console.info(`gitRemote : ${options.gitRemote}`); + + let registry = getRegistry(); + if (registry.hostname != 'localhost' && options.local) { + throw new Error( + '--local is set to true, while trying to publish to npm. Please make sure to set --local false' + ); + } + + // Prepare the packages for publishing + execSync('yarn nx run-many -t build', { + stdio: 'inherit', + maxBuffer: 1024 * 1024 * 1024, // 1GB + }); + + const { workspaceVersion, projectsVersionData } = await releaseVersion({ + specifier: options.version, + dryRun: options.dryRun, + verbose: options.verbose, + stageChanges: false, + }); + + if (options.dryRun || !options.local) { + await releaseChangelog({ + versionData: projectsVersionData, + version: workspaceVersion, + interactive: 'workspace', + gitRemote: options.gitRemote, + dryRun: options.dryRun, + verbose: options.verbose, + }); + } + + const status = await releasePublish({ + dryRun: options.dryRun, + verbose: options.verbose, + otp: options.otp, + tag: options.version?.includes('-') ? 'next' : undefined, + }); + process.exit(0); + } catch (err) { + console.error(err); + process.exit(1); + } +})(); + +function getRegistry() { + return new URL(execSync('npm config get registry').toString().trim()); +} + +/** + * Gets the name of the git remote for the given URL, if + * the remote is not found an error is thrown. + * @param {string} url + * @returns The name of the git remote for the given URL + */ +function getRemoteFor(url) { + const stdout = execSync('git remote -v').toString(); + const lines = stdout.split('\n'); + for (const line of lines) { + const parts = line.split(/\s+/); + if (parts.length > 1 && parts[1] === url) { + return parts[0]; + } + } + throw new Error(`Could not find remote for "${url}"`); +} diff --git a/tools/scripts/start-local-registry.ts b/tools/scripts/start-local-registry.ts new file mode 100644 index 0000000..962ba99 --- /dev/null +++ b/tools/scripts/start-local-registry.ts @@ -0,0 +1,31 @@ +/** + * This script starts a local registry for e2e testing purposes. + * It is meant to be called in jest's globalSetup. + */ +import { startLocalRegistry } from '@nx/js/plugins/jest/local-registry'; +import { releasePublish, releaseVersion } from 'nx/release'; + +export default async () => { + // local registry target to run + const localRegistryTarget = 'loafle:local-registry'; + // storage folder for the local registry + const storage = './tmp/local-registry/storage'; + + (global as any).stopLocalRegistry = await startLocalRegistry({ + localRegistryTarget, + storage, + verbose: true, + }); + + await releaseVersion({ + specifier: '0.0.0-e2e', + gitCommit: false, + gitTag: false, + stageChanges: false, + verbose: true, + }); + await releasePublish({ + tag: 'e2e', + verbose: true, + }); +}; diff --git a/tools/scripts/stop-local-registry.ts b/tools/scripts/stop-local-registry.ts new file mode 100644 index 0000000..59e23ba --- /dev/null +++ b/tools/scripts/stop-local-registry.ts @@ -0,0 +1,10 @@ +/** + * This script stops the local registry for e2e testing purposes. + * It is meant to be called in jest's globalTeardown. + */ + +export default () => { + if ((global as any).stopLocalRegistry) { + (global as any).stopLocalRegistry(); + } +}; diff --git a/tools/tsconfig.tools.json b/tools/tsconfig.tools.json new file mode 100644 index 0000000..99428e1 --- /dev/null +++ b/tools/tsconfig.tools.json @@ -0,0 +1,12 @@ +{ + "extends": "../tsconfig.base.json", + "compilerOptions": { + "outDir": "../dist/out-tsc/tools", + "rootDir": ".", + "module": "commonjs", + "target": "es5", + "types": ["node"], + "importHelpers": false + }, + "include": ["**/*.ts"] +} diff --git a/tsconfig.base.json b/tsconfig.base.json new file mode 100644 index 0000000..884442f --- /dev/null +++ b/tsconfig.base.json @@ -0,0 +1,23 @@ +{ + "compileOnSave": false, + "compilerOptions": { + "rootDir": ".", + "strict": true, + "inlineSourceMap": true, + "moduleResolution": "node", + "emitDecoratorMetadata": true, + "experimentalDecorators": true, + "esModuleInterop": true, + "importHelpers": true, + "target": "es2020", + "module": "esnext", + "lib": ["es2017", "dom"], + "skipLibCheck": true, + "skipDefaultLibCheck": true, + "baseUrl": ".", + "paths": { + "@loafle/nx-rust": ["packages/rust/src/index.ts"] + } + }, + "exclude": ["node_modules", "tmp"] +} diff --git a/yarn.lock b/yarn.lock new file mode 100644 index 0000000..c7cc76f --- /dev/null +++ b/yarn.lock @@ -0,0 +1,8628 @@ +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@ampproject/remapping@^2.2.0": + version "2.3.0" + resolved "https://registry.yarnpkg.com/@ampproject/remapping/-/remapping-2.3.0.tgz#ed441b6fa600072520ce18b43d2c8cc8caecc7f4" + integrity sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw== + dependencies: + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.24" + +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.27.1.tgz#200f715e66d52a23b221a9435534a91cc13ad5be" + integrity sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg== + dependencies: + "@babel/helper-validator-identifier" "^7.27.1" + js-tokens "^4.0.0" + picocolors "^1.1.1" + +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.27.1.tgz#db7cf122745e0a332c44e847ddc4f5e5221a43f6" + integrity sha512-Q+E+rd/yBzNQhXkG+zQnF58e4zoZfBedaxwzPmicKsiK3nt8iJYrSrDbjwFFDGC4f+rPafqRaPH6TsDoSvMf7A== + +"@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.2", "@babel/core@^7.23.9": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.27.1.tgz#89de51e86bd12246003e3524704c49541b16c3e6" + integrity sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ== + dependencies: + "@ampproject/remapping" "^2.2.0" + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.1" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helpers" "^7.27.1" + "@babel/parser" "^7.27.1" + "@babel/template" "^7.27.1" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + convert-source-map "^2.0.0" + debug "^4.1.0" + gensync "^1.0.0-beta.2" + json5 "^2.2.3" + semver "^6.3.1" + +"@babel/generator@^7.27.1", "@babel/generator@^7.7.2": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.1.tgz#862d4fad858f7208edd487c28b58144036b76230" + integrity sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w== + dependencies: + "@babel/parser" "^7.27.1" + "@babel/types" "^7.27.1" + "@jridgewell/gen-mapping" "^0.3.5" + "@jridgewell/trace-mapping" "^0.3.25" + jsesc "^3.0.2" + +"@babel/helper-annotate-as-pure@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.27.1.tgz#4345d81a9a46a6486e24d069469f13e60445c05d" + integrity sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow== + dependencies: + "@babel/types" "^7.27.1" + +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.1.tgz#eac1096c7374f161e4f33fc8ae38f4ddf122087a" + integrity sha512-2YaDd/Rd9E598B5+WIc8wJPmWETiiJXFYVE60oX8FDohv7rAUU3CQj+A1MgeEmcsk2+dQuEjIe/GDvig0SqL4g== + dependencies: + "@babel/compat-data" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + browserslist "^4.24.0" + lru-cache "^5.1.1" + semver "^6.3.1" + +"@babel/helper-create-class-features-plugin@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.1.tgz#5bee4262a6ea5ddc852d0806199eb17ca3de9281" + integrity sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/traverse" "^7.27.1" + semver "^6.3.1" + +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.1.tgz#05b0882d97ba1d4d03519e4bce615d70afa18c53" + integrity sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + regexpu-core "^6.2.0" + semver "^6.3.1" + +"@babel/helper-define-polyfill-provider@^0.6.3", "@babel/helper-define-polyfill-provider@^0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz#15e8746368bfa671785f5926ff74b3064c291fab" + integrity sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw== + dependencies: + "@babel/helper-compilation-targets" "^7.22.6" + "@babel/helper-plugin-utils" "^7.22.5" + debug "^4.1.1" + lodash.debounce "^4.0.8" + resolve "^1.14.2" + +"@babel/helper-member-expression-to-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.27.1.tgz#ea1211276be93e798ce19037da6f06fbb994fa44" + integrity sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-imports@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.27.1.tgz#7ef769a323e2655e126673bb6d2d6913bbead204" + integrity sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-module-transforms@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.27.1.tgz#e1663b8b71d2de948da5c4fb2a20ca4f3ec27a6f" + integrity sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-optimise-call-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.27.1.tgz#c65221b61a643f3e62705e5dd2b5f115e35f9200" + integrity sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw== + dependencies: + "@babel/types" "^7.27.1" + +"@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.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.27.1", "@babel/helper-plugin-utils@^7.8.0": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.27.1.tgz#ddb2f876534ff8013e6c2b299bf4d39b3c51d44c" + integrity sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw== + +"@babel/helper-remap-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.27.1.tgz#4601d5c7ce2eb2aea58328d43725523fcd362ce6" + integrity sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-wrap-function" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-replace-supers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.27.1.tgz#b1ed2d634ce3bdb730e4b52de30f8cccfd692bc0" + integrity sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.27.1" + "@babel/helper-optimise-call-expression" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/helper-skip-transparent-expression-wrappers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.27.1.tgz#62bb91b3abba8c7f1fec0252d9dbea11b3ee7a56" + integrity sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg== + dependencies: + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helper-string-parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.27.1.tgz#54da796097ab19ce67ed9f88b47bb2ec49367687" + integrity sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA== + +"@babel/helper-validator-identifier@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.27.1.tgz#a7054dcc145a967dd4dc8fee845a57c1316c9df8" + integrity sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow== + +"@babel/helper-validator-option@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.27.1.tgz#fa52f5b1e7db1ab049445b421c4471303897702f" + integrity sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg== + +"@babel/helper-wrap-function@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.27.1.tgz#b88285009c31427af318d4fe37651cd62a142409" + integrity sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ== + dependencies: + "@babel/template" "^7.27.1" + "@babel/traverse" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/helpers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.1.tgz#ffc27013038607cdba3288e692c3611c06a18aa4" + integrity sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ== + dependencies: + "@babel/template" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.1.tgz#c55d5bed74449d1223701f1869b9ee345cc94cc9" + integrity sha512-I0dZ3ZpCrJ1c04OqlNsQcKiZlsrXf/kkE4FXzID9rIOYICsAbA8mMDzhW/luRNAHdCNt7os/u8wenklZDlUVUQ== + dependencies: + "@babel/types" "^7.27.1" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.27.1.tgz#61dd8a8e61f7eb568268d1b5f129da3eee364bf9" + integrity sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.27.1.tgz#43f70a6d7efd52370eefbdf55ae03d91b293856d" + integrity sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.27.1.tgz#beb623bd573b8b6f3047bd04c32506adc3e58a72" + integrity sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.27.1.tgz#e134a5479eb2ba9c02714e8c1ebf1ec9076124fd" + integrity sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.27.1.tgz#bb1c25af34d75115ce229a1de7fa44bf8f955670" + integrity sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-proposal-decorators@^7.22.7": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.27.1.tgz#3686f424b2f8b2fee7579aa4df133a4f5244a596" + integrity sha512-DTxe4LBPrtFdsWzgpmbBKevg3e9PBy+dXRt19kSbucbZvL2uqtdqwwpluL1jfxYE0wIDTFp1nTy/q6gNLsxXrg== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-syntax-decorators" "^7.27.1" + +"@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": + version "7.21.0-placeholder-for-preset-env.2" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-property-in-object/-/plugin-proposal-private-property-in-object-7.21.0-placeholder-for-preset-env.2.tgz#7844f9289546efa9febac2de4cfe358a050bd703" + integrity sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w== + +"@babel/plugin-syntax-async-generators@^7.8.4": + version "7.8.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" + integrity sha512-tycmZxkGfZaxhMRbXlPXuVFpdWlXpir2W4AMhSJgRKzk/eDlIXOhb2LHWoLpDF7TEHylV5zNhykX6KAgHJmTNw== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-bigint@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-bigint/-/plugin-syntax-bigint-7.8.3.tgz#4c9a6f669f5d0cdf1b90a1671e9a146be5300cea" + integrity sha512-wnTnFlG+YxQm3vDxpGE57Pj0srRU4sHE/mDkt1qv2YJJSeUAec2ma4WLUnUPeKjyrfntVwe/N6dCXpU+zL3Npg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-class-properties@^7.12.13": + version "7.12.13" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" + integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== + dependencies: + "@babel/helper-plugin-utils" "^7.12.13" + +"@babel/plugin-syntax-class-static-block@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-static-block/-/plugin-syntax-class-static-block-7.14.5.tgz#195df89b146b4b78b3bf897fd7a257c84659d406" + integrity sha512-b+YyPmr6ldyNnM6sqYeMWE+bgJcJpO6yS4QD7ymxgH34GBPNDM/THBh8iunyvKIZztiwLH4CJZ0RxTk9emgpjw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-decorators@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.27.1.tgz#ee7dd9590aeebc05f9d4c8c0560007b05979a63d" + integrity sha512-YMq8Z87Lhl8EGkmb0MwYkt36QnxC+fzCgrl66ereamPlYToRpIk5nUjKUY3QKLWq8mwUB1BgbeXcTJhZOCDg5A== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-import-assertions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.27.1.tgz#88894aefd2b03b5ee6ad1562a7c8e1587496aecd" + integrity sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.27.1.tgz#34c017d54496f9b11b61474e7ea3dfd5563ffe07" + integrity sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-import-meta@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" + integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-json-strings@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-json-strings/-/plugin-syntax-json-strings-7.8.3.tgz#01ca21b668cd8218c9e640cb6dd88c5412b2c96a" + integrity sha512-lY6kdGpWHvjoe2vk4WrAapEuBR69EMxZl+RoGRhrFGNYVK8mOPAW8VfbT/ZgrFbXlDNiiaxQnAtgVCZ6jv30EA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-jsx@^7.27.1", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.27.1.tgz#2f9beb5eff30fa507c5532d107daac7b888fa34c" + integrity sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" + integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-nullish-coalescing-operator@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-nullish-coalescing-operator/-/plugin-syntax-nullish-coalescing-operator-7.8.3.tgz#167ed70368886081f74b5c36c65a88c03b66d1a9" + integrity sha512-aSff4zPII1u2QD7y+F8oDsz19ew4IGEJg9SVW+bqwpwtfFleiQDMdzA/R+UlWDzfnHFCxxleFT0PMIrR36XLNQ== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-numeric-separator@^7.10.4": + version "7.10.4" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" + integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-syntax-object-rest-spread@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-object-rest-spread/-/plugin-syntax-object-rest-spread-7.8.3.tgz#60e225edcbd98a640332a2e72dd3e66f1af55871" + integrity sha512-XoqMijGZb9y3y2XskN+P1wUGiVwWZ5JmoDRwx5+3GmEplNyVM2s2Dg8ILFQm8rWM48orGy5YpI5Bl8U1y7ydlA== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-catch-binding@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-catch-binding/-/plugin-syntax-optional-catch-binding-7.8.3.tgz#6111a265bcfb020eb9efd0fdfd7d26402b9ed6c1" + integrity sha512-6VPD0Pc1lpTqw0aKoeRTMiB+kWhAoT24PA+ksWSBrFtl5SIRVpZlwN3NNPQjehA2E/91FV3RjLWoVTglWcSV3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-optional-chaining@^7.8.3": + version "7.8.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-optional-chaining/-/plugin-syntax-optional-chaining-7.8.3.tgz#4f69c2ab95167e0180cd5336613f8c5788f7d48a" + integrity sha512-KoK9ErH1MBlCPxV0VANkXW2/dw4vlbGDrFgz8bmUsBGYkFRcbRwMh6cIJubdPrkxRwuGdtCk0v/wPTKbQgBjkg== + dependencies: + "@babel/helper-plugin-utils" "^7.8.0" + +"@babel/plugin-syntax-private-property-in-object@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-private-property-in-object/-/plugin-syntax-private-property-in-object-7.14.5.tgz#0dc6671ec0ea22b6e94a1114f857970cd39de1ad" + integrity sha512-0wVnp9dxJ72ZUJDV27ZfbSj6iHLoytYZmh3rFcxNnvsJF3ktkzLDZPy/mA17HGsaQT3/DQsWYX1f1QGWkCoVUg== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-top-level-await@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" + integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== + dependencies: + "@babel/helper-plugin-utils" "^7.14.5" + +"@babel/plugin-syntax-typescript@^7.27.1", "@babel/plugin-syntax-typescript@^7.3.3", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.27.1.tgz#5147d29066a793450f220c63fa3a9431b7e6dd18" + integrity sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-syntax-unicode-sets-regex@^7.18.6": + version "7.18.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-unicode-sets-regex/-/plugin-syntax-unicode-sets-regex-7.18.6.tgz#d49a3b3e6b52e5be6740022317580234a6a47357" + integrity sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.18.6" + "@babel/helper-plugin-utils" "^7.18.6" + +"@babel/plugin-transform-arrow-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.27.1.tgz#6e2061067ba3ab0266d834a9f94811196f2aba9a" + integrity sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-async-generator-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.27.1.tgz#ca433df983d68e1375398e7ca71bf2a4f6fd89d7" + integrity sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-transform-async-to-generator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.27.1.tgz#9a93893b9379b39466c74474f55af03de78c66e7" + integrity sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-remap-async-to-generator" "^7.27.1" + +"@babel/plugin-transform-block-scoped-functions@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.27.1.tgz#558a9d6e24cf72802dd3b62a4b51e0d62c0f57f9" + integrity sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-block-scoping@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.1.tgz#bc0dbe8ac6de5602981ba58ef68c6df8ef9bfbb3" + integrity sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-class-properties@^7.22.5", "@babel/plugin-transform-class-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.27.1.tgz#dd40a6a370dfd49d32362ae206ddaf2bb082a925" + integrity sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-class-static-block@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.27.1.tgz#7e920d5625b25bbccd3061aefbcc05805ed56ce4" + integrity sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-classes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.27.1.tgz#03bb04bea2c7b2f711f0db7304a8da46a85cced4" + integrity sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + "@babel/traverse" "^7.27.1" + globals "^11.1.0" + +"@babel/plugin-transform-computed-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.27.1.tgz#81662e78bf5e734a97982c2b7f0a793288ef3caa" + integrity sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/template" "^7.27.1" + +"@babel/plugin-transform-destructuring@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.27.1.tgz#d5916ef7089cb254df0418ae524533c1b72ba656" + integrity sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-dotall-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.27.1.tgz#aa6821de864c528b1fecf286f0a174e38e826f4d" + integrity sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-duplicate-keys@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.27.1.tgz#f1fbf628ece18e12e7b32b175940e68358f546d1" + integrity sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.27.1.tgz#5043854ca620a94149372e69030ff8cb6a9eb0ec" + integrity sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-dynamic-import@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.27.1.tgz#4c78f35552ac0e06aa1f6e3c573d67695e8af5a4" + integrity sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-exponentiation-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.27.1.tgz#fc497b12d8277e559747f5a3ed868dd8064f83e1" + integrity sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-export-namespace-from@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.27.1.tgz#71ca69d3471edd6daa711cf4dfc3400415df9c23" + integrity sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-for-of@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.27.1.tgz#bc24f7080e9ff721b63a70ac7b2564ca15b6c40a" + integrity sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-function-name@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.27.1.tgz#4d0bf307720e4dce6d7c30fcb1fd6ca77bdeb3a7" + integrity sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ== + dependencies: + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-transform-json-strings@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.27.1.tgz#a2e0ce6ef256376bd527f290da023983527a4f4c" + integrity sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.27.1.tgz#baaefa4d10a1d4206f9dcdda50d7d5827bb70b24" + integrity sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-logical-assignment-operators@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.27.1.tgz#890cb20e0270e0e5bebe3f025b434841c32d5baa" + integrity sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-member-expression-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.27.1.tgz#37b88ba594d852418e99536f5612f795f23aeaf9" + integrity sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-amd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.27.1.tgz#a4145f9d87c2291fe2d05f994b65dba4e3e7196f" + integrity sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-commonjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.27.1.tgz#8e44ed37c2787ecc23bdc367f49977476614e832" + integrity sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-modules-systemjs@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.27.1.tgz#00e05b61863070d0f3292a00126c16c0e024c4ed" + integrity sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + "@babel/traverse" "^7.27.1" + +"@babel/plugin-transform-modules-umd@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.27.1.tgz#63f2cf4f6dc15debc12f694e44714863d34cd334" + integrity sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w== + dependencies: + "@babel/helper-module-transforms" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-named-capturing-groups-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.27.1.tgz#f32b8f7818d8fc0cc46ee20a8ef75f071af976e1" + integrity sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-new-target@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.27.1.tgz#259c43939728cad1706ac17351b7e6a7bea1abeb" + integrity sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-nullish-coalescing-operator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.27.1.tgz#4f9d3153bf6782d73dd42785a9d22d03197bc91d" + integrity sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-numeric-separator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.27.1.tgz#614e0b15cc800e5997dadd9bd6ea524ed6c819c6" + integrity sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-object-rest-spread@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.27.1.tgz#845bdcd74c87b8f565c25cc6812f7f4f43c9ed79" + integrity sha512-/sSliVc9gHE20/7D5qsdGlq7RG5NCDTWsAhyqzGuq174EtWJoGzIu1BQ7G56eDsTcy1jseBZwv50olSdXOlGuA== + dependencies: + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/plugin-transform-parameters" "^7.27.1" + +"@babel/plugin-transform-object-super@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.27.1.tgz#1c932cd27bf3874c43a5cac4f43ebf970c9871b5" + integrity sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-replace-supers" "^7.27.1" + +"@babel/plugin-transform-optional-catch-binding@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.27.1.tgz#84c7341ebde35ccd36b137e9e45866825072a30c" + integrity sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-optional-chaining@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.27.1.tgz#874ce3c4f06b7780592e946026eb76a32830454f" + integrity sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-parameters@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.27.1.tgz#80334b54b9b1ac5244155a0c8304a187a618d5a7" + integrity sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-private-methods@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.27.1.tgz#fdacbab1c5ed81ec70dfdbb8b213d65da148b6af" + integrity sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-private-property-in-object@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.27.1.tgz#4dbbef283b5b2f01a21e81e299f76e35f900fb11" + integrity sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-property-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.27.1.tgz#07eafd618800591e88073a0af1b940d9a42c6424" + integrity sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-regenerator@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.1.tgz#0a471df9213416e44cd66bf67176b66f65768401" + integrity sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-regexp-modifiers@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.27.1.tgz#df9ba5577c974e3f1449888b70b76169998a6d09" + integrity sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-reserved-words@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.27.1.tgz#40fba4878ccbd1c56605a4479a3a891ac0274bb4" + integrity sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-runtime@^7.23.2": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.27.1.tgz#f9fbf71949a209eb26b3e60375b1d956937b8be9" + integrity sha512-TqGF3desVsTcp3WrJGj4HfKokfCXCLcHpt4PJF0D8/iT6LPd9RS82Upw3KPeyr6B22Lfd3DO8MVrmp0oRkUDdw== + dependencies: + "@babel/helper-module-imports" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.11.0" + babel-plugin-polyfill-regenerator "^0.6.1" + semver "^6.3.1" + +"@babel/plugin-transform-shorthand-properties@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.27.1.tgz#532abdacdec87bfee1e0ef8e2fcdee543fe32b90" + integrity sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-spread@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.27.1.tgz#1a264d5fc12750918f50e3fe3e24e437178abb08" + integrity sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + +"@babel/plugin-transform-sticky-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.27.1.tgz#18984935d9d2296843a491d78a014939f7dcd280" + integrity sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-template-literals@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.27.1.tgz#1a0eb35d8bb3e6efc06c9fd40eb0bcef548328b8" + integrity sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-typeof-symbol@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.1.tgz#70e966bb492e03509cf37eafa6dcc3051f844369" + integrity sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-typescript@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.1.tgz#d3bb65598bece03f773111e88cc4e8e5070f1140" + integrity sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.27.1" + "@babel/helper-create-class-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-skip-transparent-expression-wrappers" "^7.27.1" + "@babel/plugin-syntax-typescript" "^7.27.1" + +"@babel/plugin-transform-unicode-escapes@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.27.1.tgz#3e3143f8438aef842de28816ece58780190cf806" + integrity sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-property-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.27.1.tgz#bdfe2d3170c78c5691a3c3be934c8c0087525956" + integrity sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.27.1.tgz#25948f5c395db15f609028e370667ed8bae9af97" + integrity sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/plugin-transform-unicode-sets-regex@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.27.1.tgz#6ab706d10f801b5c72da8bb2548561fa04193cd1" + integrity sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + +"@babel/preset-env@^7.23.2": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.27.1.tgz#23463ab94f36540630924f5de3b4c7a8dde3b6a2" + integrity sha512-TZ5USxFpLgKDpdEt8YWBR7p6g+bZo6sHaXLqP2BY/U0acaoI8FTVflcYCr/v94twM1C5IWFdZ/hscq9WjUeLXA== + dependencies: + "@babel/compat-data" "^7.27.1" + "@babel/helper-compilation-targets" "^7.27.1" + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.27.1" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.27.1" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.27.1" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.27.1" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.27.1" + "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" + "@babel/plugin-syntax-import-assertions" "^7.27.1" + "@babel/plugin-syntax-import-attributes" "^7.27.1" + "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" + "@babel/plugin-transform-arrow-functions" "^7.27.1" + "@babel/plugin-transform-async-generator-functions" "^7.27.1" + "@babel/plugin-transform-async-to-generator" "^7.27.1" + "@babel/plugin-transform-block-scoped-functions" "^7.27.1" + "@babel/plugin-transform-block-scoping" "^7.27.1" + "@babel/plugin-transform-class-properties" "^7.27.1" + "@babel/plugin-transform-class-static-block" "^7.27.1" + "@babel/plugin-transform-classes" "^7.27.1" + "@babel/plugin-transform-computed-properties" "^7.27.1" + "@babel/plugin-transform-destructuring" "^7.27.1" + "@babel/plugin-transform-dotall-regex" "^7.27.1" + "@babel/plugin-transform-duplicate-keys" "^7.27.1" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-dynamic-import" "^7.27.1" + "@babel/plugin-transform-exponentiation-operator" "^7.27.1" + "@babel/plugin-transform-export-namespace-from" "^7.27.1" + "@babel/plugin-transform-for-of" "^7.27.1" + "@babel/plugin-transform-function-name" "^7.27.1" + "@babel/plugin-transform-json-strings" "^7.27.1" + "@babel/plugin-transform-literals" "^7.27.1" + "@babel/plugin-transform-logical-assignment-operators" "^7.27.1" + "@babel/plugin-transform-member-expression-literals" "^7.27.1" + "@babel/plugin-transform-modules-amd" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-modules-systemjs" "^7.27.1" + "@babel/plugin-transform-modules-umd" "^7.27.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.27.1" + "@babel/plugin-transform-new-target" "^7.27.1" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.27.1" + "@babel/plugin-transform-numeric-separator" "^7.27.1" + "@babel/plugin-transform-object-rest-spread" "^7.27.1" + "@babel/plugin-transform-object-super" "^7.27.1" + "@babel/plugin-transform-optional-catch-binding" "^7.27.1" + "@babel/plugin-transform-optional-chaining" "^7.27.1" + "@babel/plugin-transform-parameters" "^7.27.1" + "@babel/plugin-transform-private-methods" "^7.27.1" + "@babel/plugin-transform-private-property-in-object" "^7.27.1" + "@babel/plugin-transform-property-literals" "^7.27.1" + "@babel/plugin-transform-regenerator" "^7.27.1" + "@babel/plugin-transform-regexp-modifiers" "^7.27.1" + "@babel/plugin-transform-reserved-words" "^7.27.1" + "@babel/plugin-transform-shorthand-properties" "^7.27.1" + "@babel/plugin-transform-spread" "^7.27.1" + "@babel/plugin-transform-sticky-regex" "^7.27.1" + "@babel/plugin-transform-template-literals" "^7.27.1" + "@babel/plugin-transform-typeof-symbol" "^7.27.1" + "@babel/plugin-transform-unicode-escapes" "^7.27.1" + "@babel/plugin-transform-unicode-property-regex" "^7.27.1" + "@babel/plugin-transform-unicode-regex" "^7.27.1" + "@babel/plugin-transform-unicode-sets-regex" "^7.27.1" + "@babel/preset-modules" "0.1.6-no-external-plugins" + babel-plugin-polyfill-corejs2 "^0.4.10" + babel-plugin-polyfill-corejs3 "^0.11.0" + babel-plugin-polyfill-regenerator "^0.6.1" + core-js-compat "^3.40.0" + semver "^6.3.1" + +"@babel/preset-modules@0.1.6-no-external-plugins": + version "0.1.6-no-external-plugins" + resolved "https://registry.yarnpkg.com/@babel/preset-modules/-/preset-modules-0.1.6-no-external-plugins.tgz#ccb88a2c49c817236861fee7826080573b8a923a" + integrity sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/types" "^7.4.4" + esutils "^2.0.2" + +"@babel/preset-typescript@^7.22.5": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.1.tgz#190742a6428d282306648a55b0529b561484f912" + integrity sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ== + dependencies: + "@babel/helper-plugin-utils" "^7.27.1" + "@babel/helper-validator-option" "^7.27.1" + "@babel/plugin-syntax-jsx" "^7.27.1" + "@babel/plugin-transform-modules-commonjs" "^7.27.1" + "@babel/plugin-transform-typescript" "^7.27.1" + +"@babel/runtime@^7.22.6", "@babel/runtime@^7.7.2": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.1.tgz#9fce313d12c9a77507f264de74626e87fd0dc541" + integrity sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog== + +"@babel/template@^7.27.1", "@babel/template@^7.3.3": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.1.tgz#b9e4f55c17a92312774dfbdde1b3c01c547bbae2" + integrity sha512-Fyo3ghWMqkHHpHQCoBs2VnYjR4iWFFjguTDEqA5WgZDOrFesVjMhMM2FSqTKSoUSDO1VQtavj8NFpdRBEvJTtg== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/parser" "^7.27.1" + "@babel/types" "^7.27.1" + +"@babel/traverse@^7.16.0", "@babel/traverse@^7.27.1": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.1.tgz#4db772902b133bbddd1c4f7a7ee47761c1b9f291" + integrity sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg== + dependencies: + "@babel/code-frame" "^7.27.1" + "@babel/generator" "^7.27.1" + "@babel/parser" "^7.27.1" + "@babel/template" "^7.27.1" + "@babel/types" "^7.27.1" + debug "^4.3.1" + globals "^11.1.0" + +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.27.1", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.27.1" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.1.tgz#9defc53c16fc899e46941fc6901a9eea1c9d8560" + integrity sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q== + dependencies: + "@babel/helper-string-parser" "^7.27.1" + "@babel/helper-validator-identifier" "^7.27.1" + +"@bcoe/v8-coverage@^0.2.3": + version "0.2.3" + resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" + integrity sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== + +"@commitlint/cli@17.3.0": + version "17.3.0" + resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.3.0.tgz#d8497f03e27a5161178e802168d77de2941959a0" + integrity sha512-/H0md7TsKflKzVPz226VfXzVafJFO1f9+r2KcFvmBu08V0T56lZU1s8WL7/xlxqLMqBTVaBf7Ixtc4bskdEEZg== + dependencies: + "@commitlint/format" "^17.0.0" + "@commitlint/lint" "^17.3.0" + "@commitlint/load" "^17.3.0" + "@commitlint/read" "^17.2.0" + "@commitlint/types" "^17.0.0" + execa "^5.0.0" + lodash.isfunction "^3.0.9" + resolve-from "5.0.0" + resolve-global "1.0.0" + yargs "^17.0.0" + +"@commitlint/config-conventional@17.3.0": + version "17.3.0" + resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.3.0.tgz#77bcfabfed932bc80e97f31f2201ba05f504e145" + integrity sha512-hgI+fN5xF8nhS9uG/V06xyT0nlcyvHHMkq0kwRSr96vl5BFlRGaL2C0/YY4kQagfU087tmj01bJkG9Ek98Wllw== + dependencies: + conventional-changelog-conventionalcommits "^5.0.0" + +"@commitlint/config-validator@^17.8.1": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-17.8.1.tgz#5cc93b6b49d5524c9cc345a60e5bf74bcca2b7f9" + integrity sha512-UUgUC+sNiiMwkyiuIFR7JG2cfd9t/7MV8VB4TZ+q02ZFkHoduUS4tJGsCBWvBOGD9Btev6IecPMvlWUfJorkEA== + dependencies: + "@commitlint/types" "^17.8.1" + ajv "^8.11.0" + +"@commitlint/ensure@^17.8.1": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-17.8.1.tgz#59183557844999dbb6aab6d03629a3d104d01a8d" + integrity sha512-xjafwKxid8s1K23NFpL8JNo6JnY/ysetKo8kegVM7c8vs+kWLP8VrQq+NbhgVlmCojhEDbzQKp4eRXSjVOGsow== + dependencies: + "@commitlint/types" "^17.8.1" + lodash.camelcase "^4.3.0" + lodash.kebabcase "^4.1.1" + lodash.snakecase "^4.1.1" + lodash.startcase "^4.4.0" + lodash.upperfirst "^4.3.1" + +"@commitlint/execute-rule@^17.8.1": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-17.8.1.tgz#504ed69eb61044eeb84fdfd10cc18f0dab14f34c" + integrity sha512-JHVupQeSdNI6xzA9SqMF+p/JjrHTcrJdI02PwesQIDCIGUrv04hicJgCcws5nzaoZbROapPs0s6zeVHoxpMwFQ== + +"@commitlint/format@^17.0.0": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-17.8.1.tgz#6108bb6b4408e711006680649927e1b559bdc5f8" + integrity sha512-f3oMTyZ84M9ht7fb93wbCKmWxO5/kKSbwuYvS867duVomoOsgrgljkGGIztmT/srZnaiGbaK8+Wf8Ik2tSr5eg== + dependencies: + "@commitlint/types" "^17.8.1" + chalk "^4.1.0" + +"@commitlint/is-ignored@^17.8.1": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.8.1.tgz#cf25bcd8409c79684b63f8bdeb35df48edda244e" + integrity sha512-UshMi4Ltb4ZlNn4F7WtSEugFDZmctzFpmbqvpyxD3la510J+PLcnyhf9chs7EryaRFJMdAKwsEKfNK0jL/QM4g== + dependencies: + "@commitlint/types" "^17.8.1" + semver "7.5.4" + +"@commitlint/lint@^17.3.0": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.8.1.tgz#bfc21215f6b18d41d4d43e2aa3cb79a5d7726cd8" + integrity sha512-aQUlwIR1/VMv2D4GXSk7PfL5hIaFSfy6hSHV94O8Y27T5q+DlDEgd/cZ4KmVI+MWKzFfCTiTuWqjfRSfdRllCA== + dependencies: + "@commitlint/is-ignored" "^17.8.1" + "@commitlint/parse" "^17.8.1" + "@commitlint/rules" "^17.8.1" + "@commitlint/types" "^17.8.1" + +"@commitlint/load@^17.3.0": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.8.1.tgz#fa061e7bfa53281eb03ca8517ca26d66a189030c" + integrity sha512-iF4CL7KDFstP1kpVUkT8K2Wl17h2yx9VaR1ztTc8vzByWWcbO/WaKwxsnCOqow9tVAlzPfo1ywk9m2oJ9ucMqA== + dependencies: + "@commitlint/config-validator" "^17.8.1" + "@commitlint/execute-rule" "^17.8.1" + "@commitlint/resolve-extends" "^17.8.1" + "@commitlint/types" "^17.8.1" + "@types/node" "20.5.1" + chalk "^4.1.0" + cosmiconfig "^8.0.0" + cosmiconfig-typescript-loader "^4.0.0" + lodash.isplainobject "^4.0.6" + lodash.merge "^4.6.2" + lodash.uniq "^4.5.0" + resolve-from "^5.0.0" + ts-node "^10.8.1" + typescript "^4.6.4 || ^5.2.2" + +"@commitlint/message@^17.8.1": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-17.8.1.tgz#a5cd226c419be20ee03c3d237db6ac37b95958b3" + integrity sha512-6bYL1GUQsD6bLhTH3QQty8pVFoETfFQlMn2Nzmz3AOLqRVfNNtXBaSY0dhZ0dM6A2MEq4+2d7L/2LP8TjqGRkA== + +"@commitlint/parse@^17.8.1": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-17.8.1.tgz#6e00b8f50ebd63562d25dcf4230da2c9f984e626" + integrity sha512-/wLUickTo0rNpQgWwLPavTm7WbwkZoBy3X8PpkUmlSmQJyWQTj0m6bDjiykMaDt41qcUbfeFfaCvXfiR4EGnfw== + dependencies: + "@commitlint/types" "^17.8.1" + conventional-changelog-angular "^6.0.0" + conventional-commits-parser "^4.0.0" + +"@commitlint/read@^17.2.0": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-17.8.1.tgz#b3f28777607c756078356cc133368b0e8c08092f" + integrity sha512-Fd55Oaz9irzBESPCdMd8vWWgxsW3OWR99wOntBDHgf9h7Y6OOHjWEdS9Xzen1GFndqgyoaFplQS5y7KZe0kO2w== + dependencies: + "@commitlint/top-level" "^17.8.1" + "@commitlint/types" "^17.8.1" + fs-extra "^11.0.0" + git-raw-commits "^2.0.11" + minimist "^1.2.6" + +"@commitlint/resolve-extends@^17.8.1": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-17.8.1.tgz#9af01432bf2fd9ce3dd5a00d266cce14e4c977e7" + integrity sha512-W/ryRoQ0TSVXqJrx5SGkaYuAaE/BUontL1j1HsKckvM6e5ZaG0M9126zcwL6peKSuIetJi7E87PRQF8O86EW0Q== + dependencies: + "@commitlint/config-validator" "^17.8.1" + "@commitlint/types" "^17.8.1" + import-fresh "^3.0.0" + lodash.mergewith "^4.6.2" + resolve-from "^5.0.0" + resolve-global "^1.0.0" + +"@commitlint/rules@^17.8.1": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-17.8.1.tgz#da49cab1b7ebaf90d108de9f58f684dc4ccb65a0" + integrity sha512-2b7OdVbN7MTAt9U0vKOYKCDsOvESVXxQmrvuVUZ0rGFMCrCPJWWP1GJ7f0lAypbDAhaGb8zqtdOr47192LBrIA== + dependencies: + "@commitlint/ensure" "^17.8.1" + "@commitlint/message" "^17.8.1" + "@commitlint/to-lines" "^17.8.1" + "@commitlint/types" "^17.8.1" + execa "^5.0.0" + +"@commitlint/to-lines@^17.8.1": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-17.8.1.tgz#a5c4a7cf7dff3dbdd69289fc0eb19b66f3cfe017" + integrity sha512-LE0jb8CuR/mj6xJyrIk8VLz03OEzXFgLdivBytoooKO5xLt5yalc8Ma5guTWobw998sbR3ogDd+2jed03CFmJA== + +"@commitlint/top-level@^17.8.1": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-17.8.1.tgz#206d37d6782f33c9572e44fbe3758392fdeea7bc" + integrity sha512-l6+Z6rrNf5p333SHfEte6r+WkOxGlWK4bLuZKbtf/2TXRN+qhrvn1XE63VhD8Oe9oIHQ7F7W1nG2k/TJFhx2yA== + dependencies: + find-up "^5.0.0" + +"@commitlint/types@^17.0.0", "@commitlint/types@^17.8.1": + version "17.8.1" + resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-17.8.1.tgz#883a0ad35c5206d5fef7bc6ce1bbe648118af44e" + integrity sha512-PXDQXkAmiMEG162Bqdh9ChML/GJZo6vU+7F03ALKDK8zYc6SuAr47LjG7hGYRqUOz+WK0dU7bQ0xzuqFMdxzeQ== + dependencies: + chalk "^4.1.0" + +"@cspotcode/source-map-support@^0.8.0": + version "0.8.1" + resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" + integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== + dependencies: + "@jridgewell/trace-mapping" "0.3.9" + +"@cypress/request@3.0.6": + version "3.0.6" + resolved "https://registry.yarnpkg.com/@cypress/request/-/request-3.0.6.tgz#f5580add6acee0e183b4d4e07eff4f31327ae12b" + integrity sha512-fi0eVdCOtKu5Ed6+E8mYxUF6ZTFJDZvHogCBelM0xVXmrDEkyM22gRArQzq1YcHPm1V47Vf/iAD+WgVdUlJCGg== + dependencies: + aws-sign2 "~0.7.0" + aws4 "^1.8.0" + caseless "~0.12.0" + combined-stream "~1.0.6" + extend "~3.0.2" + forever-agent "~0.6.1" + form-data "~4.0.0" + http-signature "~1.4.0" + is-typedarray "~1.0.0" + isstream "~0.1.2" + json-stringify-safe "~5.0.1" + mime-types "~2.1.19" + performance-now "^2.1.0" + qs "6.13.0" + safe-buffer "^5.1.2" + tough-cookie "^5.0.0" + tunnel-agent "^0.6.0" + uuid "^8.3.2" + +"@emnapi/core@^1.1.0", "@emnapi/core@^1.4.0": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@emnapi/core/-/core-1.4.3.tgz#9ac52d2d5aea958f67e52c40a065f51de59b77d6" + integrity sha512-4m62DuCE07lw01soJwPiBGC0nAww0Q+RY70VZ+n49yDIO13yyinhbWCeNnaob0lakDtWQzSdtNWzJeOJt2ma+g== + dependencies: + "@emnapi/wasi-threads" "1.0.2" + tslib "^2.4.0" + +"@emnapi/runtime@^1.1.0", "@emnapi/runtime@^1.4.0": + version "1.4.3" + resolved "https://registry.yarnpkg.com/@emnapi/runtime/-/runtime-1.4.3.tgz#c0564665c80dc81c448adac23f9dfbed6c838f7d" + integrity sha512-pBPWdu6MLKROBX05wSNKcNb++m5Er+KQ9QkB+WVM+pW2Kx9hoSrVTnu3BdkI5eBLZoKu/J6mW/B6i6bJB2ytXQ== + dependencies: + tslib "^2.4.0" + +"@emnapi/wasi-threads@1.0.2": + version "1.0.2" + resolved "https://registry.yarnpkg.com/@emnapi/wasi-threads/-/wasi-threads-1.0.2.tgz#977f44f844eac7d6c138a415a123818c655f874c" + integrity sha512-5n3nTJblwRi8LlXkJ9eBzu+kZR8Yxcc7ubakyQTFzPMtIhFpUBRbsnc2Dv88IZDIbCDlBiWrknhB4Lsz7mg6BA== + dependencies: + tslib "^2.4.0" + +"@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0", "@eslint-community/eslint-utils@^4.7.0": + version "4.7.0" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.7.0.tgz#607084630c6c033992a082de6e6fbc1a8b52175a" + integrity sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw== + dependencies: + eslint-visitor-keys "^3.4.3" + +"@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== + +"@eslint/compat@^1.1.1": + version "1.2.9" + resolved "https://registry.yarnpkg.com/@eslint/compat/-/compat-1.2.9.tgz#1a234508c30660fdf10dd7bed2d37cc86c8d8f53" + integrity sha512-gCdSY54n7k+driCadyMNv8JSPzYLeDVM/ikZRtvtROBpRdFSkS8W9A82MqsaY7lZuwL0wiapgD0NT1xT0hyJsA== + +"@eslint/eslintrc@^2.1.4": + version "2.1.4" + resolved "https://registry.yarnpkg.com/@eslint/eslintrc/-/eslintrc-2.1.4.tgz#388a269f0f25c1b6adc317b5a2c55714894c70ad" + integrity sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ== + dependencies: + ajv "^6.12.4" + debug "^4.3.2" + espree "^9.6.0" + globals "^13.19.0" + ignore "^5.2.0" + import-fresh "^3.2.1" + js-yaml "^4.1.0" + minimatch "^3.1.2" + strip-json-comments "^3.1.1" + +"@eslint/js@8.57.0": + version "8.57.0" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" + integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== + +"@humanwhocodes/config-array@^0.11.14": + version "0.11.14" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" + integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== + dependencies: + "@humanwhocodes/object-schema" "^2.0.2" + debug "^4.3.1" + minimatch "^3.0.5" + +"@humanwhocodes/module-importer@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" + integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== + +"@humanwhocodes/object-schema@^2.0.2": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" + integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== + +"@inquirer/checkbox@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/checkbox/-/checkbox-3.0.1.tgz#0a57f704265f78c36e17f07e421b98efb4b9867b" + integrity sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/confirm@^4.0.1": + version "4.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/confirm/-/confirm-4.0.1.tgz#9106d6bffa0b2fdd0e4f60319b6f04f2e06e6e25" + integrity sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + +"@inquirer/core@^9.2.1": + version "9.2.1" + resolved "https://registry.yarnpkg.com/@inquirer/core/-/core-9.2.1.tgz#677c49dee399c9063f31e0c93f0f37bddc67add1" + integrity sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg== + dependencies: + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + "@types/mute-stream" "^0.0.4" + "@types/node" "^22.5.5" + "@types/wrap-ansi" "^3.0.0" + ansi-escapes "^4.3.2" + cli-width "^4.1.0" + mute-stream "^1.0.0" + signal-exit "^4.1.0" + strip-ansi "^6.0.1" + wrap-ansi "^6.2.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/editor@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/editor/-/editor-3.0.1.tgz#d109f21e050af6b960725388cb1c04214ed7c7bc" + integrity sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + external-editor "^3.1.0" + +"@inquirer/expand@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/expand/-/expand-3.0.1.tgz#aed9183cac4d12811be47a4a895ea8e82a17e22c" + integrity sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/figures@^1.0.6": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@inquirer/figures/-/figures-1.0.11.tgz#4744e6db95288fea1dead779554859710a959a21" + integrity sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw== + +"@inquirer/input@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/input/-/input-3.0.1.tgz#de63d49e516487388508d42049deb70f2cb5f28e" + integrity sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + +"@inquirer/number@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/number/-/number-2.0.1.tgz#b9863080d02ab7dc2e56e16433d83abea0f2a980" + integrity sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + +"@inquirer/password@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/password/-/password-3.0.1.tgz#2a9a9143591088336bbd573bcb05d5bf080dbf87" + integrity sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + ansi-escapes "^4.3.2" + +"@inquirer/prompts@^6.0.0": + version "6.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/prompts/-/prompts-6.0.1.tgz#43f5c0ed35c5ebfe52f1d43d46da2d363d950071" + integrity sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A== + dependencies: + "@inquirer/checkbox" "^3.0.1" + "@inquirer/confirm" "^4.0.1" + "@inquirer/editor" "^3.0.1" + "@inquirer/expand" "^3.0.1" + "@inquirer/input" "^3.0.1" + "@inquirer/number" "^2.0.1" + "@inquirer/password" "^3.0.1" + "@inquirer/rawlist" "^3.0.1" + "@inquirer/search" "^2.0.1" + "@inquirer/select" "^3.0.1" + +"@inquirer/rawlist@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/rawlist/-/rawlist-3.0.1.tgz#729def358419cc929045f264131878ed379e0af3" + integrity sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/type" "^2.0.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/search@^2.0.1": + version "2.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/search/-/search-2.0.1.tgz#69b774a0a826de2e27b48981d01bc5ad81e73721" + integrity sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + yoctocolors-cjs "^2.1.2" + +"@inquirer/select@^3.0.1": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@inquirer/select/-/select-3.0.1.tgz#1df9ed27fb85a5f526d559ac5ce7cc4e9dc4e7ec" + integrity sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q== + dependencies: + "@inquirer/core" "^9.2.1" + "@inquirer/figures" "^1.0.6" + "@inquirer/type" "^2.0.0" + ansi-escapes "^4.3.2" + yoctocolors-cjs "^2.1.2" + +"@inquirer/type@^2.0.0": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@inquirer/type/-/type-2.0.0.tgz#08fa513dca2cb6264fe1b0a2fabade051444e3f6" + integrity sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag== + dependencies: + mute-stream "^1.0.0" + +"@istanbuljs/load-nyc-config@^1.0.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@istanbuljs/load-nyc-config/-/load-nyc-config-1.1.0.tgz#fd3db1d59ecf7cf121e80650bb86712f9b55eced" + integrity sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ== + dependencies: + camelcase "^5.3.1" + find-up "^4.1.0" + get-package-type "^0.1.0" + js-yaml "^3.13.1" + resolve-from "^5.0.0" + +"@istanbuljs/schema@^0.1.2", "@istanbuljs/schema@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@istanbuljs/schema/-/schema-0.1.3.tgz#e45e384e4b8ec16bce2fd903af78450f6bf7ec98" + integrity sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== + +"@jest/console@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/console/-/console-29.7.0.tgz#cd4822dbdb84529265c5a2bdb529a3c9cc950ffc" + integrity sha512-5Ni4CU7XHQi32IJ398EEP4RrB8eV09sXP2ROqD4bksHrnTree52PsxvX8tpL8LvTZ3pFzXyPbNQReSN41CAhOg== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + +"@jest/core@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/core/-/core-29.7.0.tgz#b6cccc239f30ff36609658c5a5e2291757ce448f" + integrity sha512-n7aeXWKMnGtDA48y8TLWJPJmLmmZ642Ceo78cYWEpiD7FzDgmNDV/GCVRorPABdXLJZ/9wzzgZAlHjXjxDHGsg== + dependencies: + "@jest/console" "^29.7.0" + "@jest/reporters" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + ci-info "^3.2.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-changed-files "^29.7.0" + jest-config "^29.7.0" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-resolve-dependencies "^29.7.0" + jest-runner "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + jest-watcher "^29.7.0" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-ansi "^6.0.0" + +"@jest/environment@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/environment/-/environment-29.7.0.tgz#24d61f54ff1f786f3cd4073b4b94416383baf2a7" + integrity sha512-aQIfHDq33ExsN4jP1NWGXhxgQ/wixs60gDiKO+XVMd8Mn0NWPWgc34ZQDTb2jKaUWQ7MuwoitXAsN2XVXNMpAw== + dependencies: + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + +"@jest/expect-utils@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect-utils/-/expect-utils-29.7.0.tgz#023efe5d26a8a70f21677d0a1afc0f0a44e3a1c6" + integrity sha512-GlsNBWiFQFCVi9QVSx7f5AgMeLxe9YCCs5PuP2O2LdjDAA8Jh9eX7lA1Jq/xdXw3Wb3hyvlFNfZIfcRetSzYcA== + dependencies: + jest-get-type "^29.6.3" + +"@jest/expect@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/expect/-/expect-29.7.0.tgz#76a3edb0cb753b70dfbfe23283510d3d45432bf2" + integrity sha512-8uMeAMycttpva3P1lBHB8VciS9V0XAr3GymPpipdyQXbBcuhkLQOSe8E/p92RyAdToS6ZD1tFkX+CkhoECE0dQ== + dependencies: + expect "^29.7.0" + jest-snapshot "^29.7.0" + +"@jest/fake-timers@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-29.7.0.tgz#fd91bf1fffb16d7d0d24a426ab1a47a49881a565" + integrity sha512-q4DH1Ha4TTFPdxLsqDXK1d3+ioSL7yL5oCMJZgDYm6i+6CygW5E5xVr/D1HdsGxjt1ZWSfUAs9OxSB/BNelWrQ== + dependencies: + "@jest/types" "^29.6.3" + "@sinonjs/fake-timers" "^10.0.2" + "@types/node" "*" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +"@jest/globals@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/globals/-/globals-29.7.0.tgz#8d9290f9ec47ff772607fa864ca1d5a2efae1d4d" + integrity sha512-mpiz3dutLbkW2MNFubUGUEVLkTGiqW6yLVTA+JbP6fI6J5iL9Y0Nlg8k95pcF8ctKwCS7WVxteBs29hhfAotzQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/types" "^29.6.3" + jest-mock "^29.7.0" + +"@jest/reporters@^29.4.1", "@jest/reporters@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/reporters/-/reporters-29.7.0.tgz#04b262ecb3b8faa83b0b3d321623972393e8f4c7" + integrity sha512-DApq0KJbJOEzAFYjHADNNxAE3KbhxQB1y5Kplb5Waqw6zVbuWatSnMjE5gs8FUgEPmNsnZA3NCWl9NG0ia04Pg== + dependencies: + "@bcoe/v8-coverage" "^0.2.3" + "@jest/console" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + "@types/node" "*" + chalk "^4.0.0" + collect-v8-coverage "^1.0.0" + exit "^0.1.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + istanbul-lib-coverage "^3.0.0" + istanbul-lib-instrument "^6.0.0" + istanbul-lib-report "^3.0.0" + istanbul-lib-source-maps "^4.0.0" + istanbul-reports "^3.1.3" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + jest-worker "^29.7.0" + slash "^3.0.0" + string-length "^4.0.1" + strip-ansi "^6.0.0" + v8-to-istanbul "^9.0.1" + +"@jest/schemas@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03" + integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA== + dependencies: + "@sinclair/typebox" "^0.27.8" + +"@jest/source-map@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/source-map/-/source-map-29.6.3.tgz#d90ba772095cf37a34a5eb9413f1b562a08554c4" + integrity sha512-MHjT95QuipcPrpLM+8JMSzFx6eHp5Bm+4XeFDJlwsvVBjmKNiIAvasGK2fxz2WbGRlnvqehFbh07MMa7n3YJnw== + dependencies: + "@jridgewell/trace-mapping" "^0.3.18" + callsites "^3.0.0" + graceful-fs "^4.2.9" + +"@jest/test-result@^29.4.1", "@jest/test-result@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-result/-/test-result-29.7.0.tgz#8db9a80aa1a097bb2262572686734baed9b1657c" + integrity sha512-Fdx+tv6x1zlkJPcWXmMDAG2HBnaR9XPSd5aDWQVsfrZmLVT3lU1cwyxLgRmXR9yrq4NBoEm9BMsfgFzTQAbJYA== + dependencies: + "@jest/console" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + collect-v8-coverage "^1.0.0" + +"@jest/test-sequencer@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/test-sequencer/-/test-sequencer-29.7.0.tgz#6cef977ce1d39834a3aea887a1726628a6f072ce" + integrity sha512-GQwJ5WZVrKnOJuiYiAF52UNUJXgTZx1NHjFSEB0qEMmSZKAkdMoIzw/Cj6x6NF4AvV23AUqDpFzQkN/eYCYTxw== + dependencies: + "@jest/test-result" "^29.7.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + slash "^3.0.0" + +"@jest/transform@^29.7.0": + version "29.7.0" + resolved "https://registry.yarnpkg.com/@jest/transform/-/transform-29.7.0.tgz#df2dd9c346c7d7768b8a06639994640c642e284c" + integrity sha512-ok/BTPFzFKVMwO5eOHRrvnBVHdRy9IrsrW1GpMaQ9MCnilNLXQKmAX8s1YXDFaai9xJpac2ySzV0YeRRECr2Vw== + dependencies: + "@babel/core" "^7.11.6" + "@jest/types" "^29.6.3" + "@jridgewell/trace-mapping" "^0.3.18" + babel-plugin-istanbul "^6.1.1" + chalk "^4.0.0" + convert-source-map "^2.0.0" + fast-json-stable-stringify "^2.1.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + micromatch "^4.0.4" + pirates "^4.0.4" + slash "^3.0.0" + write-file-atomic "^4.0.2" + +"@jest/types@^29.6.3": + version "29.6.3" + resolved "https://registry.yarnpkg.com/@jest/types/-/types-29.6.3.tgz#1131f8cf634e7e84c5e77bab12f052af585fba59" + integrity sha512-u3UPsIilWKOM3F9CXtrG8LEJmNxwoCQC/XVj4IKYXvvpx7QIi/Kg1LI5uDmDpKlac62NUtX7eLjRh+jVZcLOzw== + dependencies: + "@jest/schemas" "^29.6.3" + "@types/istanbul-lib-coverage" "^2.0.0" + "@types/istanbul-reports" "^3.0.0" + "@types/node" "*" + "@types/yargs" "^17.0.8" + chalk "^4.0.0" + +"@jridgewell/gen-mapping@^0.3.5": + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== + dependencies: + "@jridgewell/set-array" "^1.2.1" + "@jridgewell/sourcemap-codec" "^1.4.10" + "@jridgewell/trace-mapping" "^0.3.24" + +"@jridgewell/resolve-uri@^3.0.3", "@jridgewell/resolve-uri@^3.1.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz#7a0ee601f60f99a20c7c7c5ff0c80388c1189bd6" + integrity sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw== + +"@jridgewell/set-array@^1.2.1": + version "1.2.1" + resolved "https://registry.yarnpkg.com/@jridgewell/set-array/-/set-array-1.2.1.tgz#558fb6472ed16a4c850b889530e6b36438c49280" + integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== + +"@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== + +"@jridgewell/trace-mapping@0.3.9": + version "0.3.9" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" + integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== + dependencies: + "@jridgewell/resolve-uri" "^3.0.3" + "@jridgewell/sourcemap-codec" "^1.4.10" + +"@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": + version "0.3.25" + resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz#15f190e98895f3fc23276ee14bc76b675c2e50f0" + integrity sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ== + dependencies: + "@jridgewell/resolve-uri" "^3.1.0" + "@jridgewell/sourcemap-codec" "^1.4.14" + +"@ltd/j-toml@1.38.0": + version "1.38.0" + resolved "https://registry.yarnpkg.com/@ltd/j-toml/-/j-toml-1.38.0.tgz#00d19f6d65ac5dac39bc64f97a545f47e9ebefc4" + integrity sha512-lYtBcmvHustHQtg4X7TXUu1Xa/tbLC3p2wLvgQI+fWVySguVZJF60Snxijw5EiohumxZbR10kWYFFebh1zotiw== + +"@mole-inc/bin-wrapper@^8.0.1": + version "8.0.1" + resolved "https://registry.yarnpkg.com/@mole-inc/bin-wrapper/-/bin-wrapper-8.0.1.tgz#d7fd0ceb1cfa8a855293a3ed9d7d135f4d442f0e" + integrity sha512-sTGoeZnjI8N4KS+sW2AN95gDBErhAguvkw/tWdCjeM8bvxpz5lqrnd0vOJABA1A+Ic3zED7PYoLP/RANLgVotA== + dependencies: + bin-check "^4.1.0" + bin-version-check "^5.0.0" + content-disposition "^0.5.4" + ext-name "^5.0.0" + file-type "^17.1.6" + filenamify "^5.0.2" + got "^11.8.5" + os-filter-obj "^2.0.0" + +"@napi-rs/cli@3.0.0-alpha.63": + version "3.0.0-alpha.63" + resolved "https://registry.yarnpkg.com/@napi-rs/cli/-/cli-3.0.0-alpha.63.tgz#f4679ab5ff04b3291a5aedb4570a73e10a81a1ba" + integrity sha512-kccKMymb6IyS1nEfGHBYNq6aAXwGd3iVvQ6Wx7Wu4ewjO+6i5c6oSgLb75rd4qXL/KtskZp/AOlw7TB5XslTmA== + dependencies: + "@inquirer/prompts" "^6.0.0" + "@napi-rs/cross-toolchain" "^0.0.16" + "@napi-rs/wasm-tools" "^0.0.2" + "@octokit/rest" "^21.0.0" + clipanion "^3.2.1" + colorette "^2.0.20" + debug "^4.3.4" + emnapi "^1.2.0" + js-yaml "^4.1.0" + lodash-es "^4.17.21" + semver "^7.5.4" + toml "^3.0.0" + typanion "^3.14.0" + wasm-sjlj "^1.0.5" + +"@napi-rs/cross-toolchain@^0.0.16": + version "0.0.16" + resolved "https://registry.yarnpkg.com/@napi-rs/cross-toolchain/-/cross-toolchain-0.0.16.tgz#e3cdb8624207ef8f3411794583bdcba688c6430a" + integrity sha512-jwdjHT5L0m9MH0CmzDwPp0ckn/UO7afHCsPeo7NugHUvYgvlgS7SWhdMVgIgJW2HHqhcW/2nhaLLGpAU1c7QRQ== + dependencies: + "@napi-rs/lzma" "^1.3.1" + "@napi-rs/tar" "^0.1.1" + debug "^4.3.4" + +"@napi-rs/lzma-android-arm-eabi@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-android-arm-eabi/-/lzma-android-arm-eabi-1.4.2.tgz#4562b40dda7d6cc517b766d78b1a36351e389aac" + integrity sha512-VP6oUucQWxoMmPabUqJntzPGk/b/ggtZES0u5YCYHJXTBPRodtQ/vkoU4LFwuxCF8/ZATpAKA1ov9hcxgHLTcg== + +"@napi-rs/lzma-android-arm64@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-android-arm64/-/lzma-android-arm64-1.4.2.tgz#e41c8aa70ea330206725cd1d33ef91336faddd60" + integrity sha512-alFP9oGAZ9WtJXSJG4+FbkiI4EIZLkjqADgcjENWqpuXPur5t72kg/AmFNfd7WGvdIKkCXgM6P0YqREq7pOQmQ== + +"@napi-rs/lzma-darwin-arm64@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-darwin-arm64/-/lzma-darwin-arm64-1.4.2.tgz#abb31e6f2e0cd8c21e68f14f66299f6acca7ae0d" + integrity sha512-BcnQJDEv0o7mYGx+OmLI6DfinQnut3+CPlLX5M7UTDfCV48UxaYg/PkxLdTa2p2QoHLXcREsLsn8Wjk2DoJvQg== + +"@napi-rs/lzma-darwin-x64@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-darwin-x64/-/lzma-darwin-x64-1.4.2.tgz#17c4a4cee16f42dbf2db4e01a774c4b1729e585e" + integrity sha512-UP+hZBgK3kRRIxxacGMdiTGw+wHsAMYZd8AI9nTKe+i+qhJJgKy2rO6ANa1peugf+nTFLCE67Y4C/j/3H5Vw0w== + +"@napi-rs/lzma-freebsd-x64@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-freebsd-x64/-/lzma-freebsd-x64-1.4.2.tgz#c4a093179325f7943022973fbaf9da302aa15d0d" + integrity sha512-Gm6IOo1yehbGAujq+BrRRso8Bvl8F44BqOA5Oj5QoTJ8QEFBgNb2aJrPIjasHIBFFe6yltnjDODZSqBoSixXUw== + +"@napi-rs/lzma-linux-arm-gnueabihf@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-arm-gnueabihf/-/lzma-linux-arm-gnueabihf-1.4.2.tgz#9434f12f070de0039929e6a3cb269468f7c9aece" + integrity sha512-zODKevVujFrhYiyylR9Geo9jCwXm6XRjeiGwZmvNH6HbtTF0mVL5uVUhkGdI2ESV1PQJDKKXUVdUomhguzZ+Lw== + +"@napi-rs/lzma-linux-arm64-gnu@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-arm64-gnu/-/lzma-linux-arm64-gnu-1.4.2.tgz#3ccf620840c418c705aac6f949f86630b21fda45" + integrity sha512-y6B/xX59L75qdevv5tc5G4lbbGy7cttdzY3PkomkOj+K2EdrVqapNuDzhYRjH9DVU3UzjYsOLr4QFHGHUnzH2w== + +"@napi-rs/lzma-linux-arm64-musl@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-arm64-musl/-/lzma-linux-arm64-musl-1.4.2.tgz#e073f1a37218bbedabfd9ec4dbbdba3d8cb7e394" + integrity sha512-n6wkmuogLqb8RVx6vsFJlx0rNNEG3KVXxw8Bpr3JDj6L16HRHcqZrJSLbjyw6lr1HUA+MyKuEHT4JIVeOerouQ== + +"@napi-rs/lzma-linux-ppc64-gnu@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-ppc64-gnu/-/lzma-linux-ppc64-gnu-1.4.2.tgz#e1dac86ca320b7a197a9ac901bd518d93f0733f2" + integrity sha512-tby01kamxuk6nMkRTvOKJgnHPHDhvNRHq8HXWBDK2Ho6nOlLjyiBMwlgGHjH/q5JsckbNGEbmp/elScJiGcdOg== + +"@napi-rs/lzma-linux-riscv64-gnu@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-riscv64-gnu/-/lzma-linux-riscv64-gnu-1.4.2.tgz#b5d375ac16685add57ead2e2540a167b41aa631c" + integrity sha512-AmodiQF/A9itZqDsXcOfMLyOUFRsPc0Mnyc+cdvyiZuXboMIC4dJfJLpX3AtlmWXnQJHRXDFKIpoTeykTSXCCQ== + +"@napi-rs/lzma-linux-s390x-gnu@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-s390x-gnu/-/lzma-linux-s390x-gnu-1.4.2.tgz#09d0af35109f017b6f2b10aaf1cc3ebaa08f94a9" + integrity sha512-r98eJL42yypRjtuzhDa6VUKRejAE3dm6w4gFofKTKrJh7mS2VBzjzP53Z3l5XaTZQK2IuWJqWwnMrM6C0wmfGA== + +"@napi-rs/lzma-linux-x64-gnu@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-x64-gnu/-/lzma-linux-x64-gnu-1.4.2.tgz#bb1c321fa2db477367f0c4bd4762bb2d1f245d57" + integrity sha512-Ce3tIrJU7mfHK71F+5Vd/z6Utxbl8xI2m5qTouwucvgg0CkUy59F2Z1AtLcOkglaLOnRlpHtrzrMb2XDAgkvvA== + +"@napi-rs/lzma-linux-x64-musl@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-linux-x64-musl/-/lzma-linux-x64-musl-1.4.2.tgz#2878eca80ba88c34c61214c87d584e048648ae8f" + integrity sha512-7xChspbM6xDWxclEZPnXO2eENAQiJLSihaqtbTMDu88o1iJHA0M63xkTEhTZIP2M8s/Ung+OBsZtKLJlCTC8GA== + +"@napi-rs/lzma-wasm32-wasi@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-wasm32-wasi/-/lzma-wasm32-wasi-1.4.2.tgz#889af668f23611bc8ae6991f9e6bb7358a58a257" + integrity sha512-RMThQPmOxfDiQpOUMn49Y2QL2NHvEPPlIGe+VCNDjrMFZ9wsWlpVA2MguQjLyOWAmIPW3PuW+KfJacHKHh69Cg== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.9" + +"@napi-rs/lzma-win32-arm64-msvc@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-win32-arm64-msvc/-/lzma-win32-arm64-msvc-1.4.2.tgz#cbead385c07b0758df13c5054a2744daa9cbbb91" + integrity sha512-cDLb+J+Odh+JsDLI1kpa5K6r7DiCtmkFLPmpkRbWqUk4P+yotnXUHIvPRWRCTNWLEHZKDsigvkU6s4zsfJrXcA== + +"@napi-rs/lzma-win32-ia32-msvc@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-win32-ia32-msvc/-/lzma-win32-ia32-msvc-1.4.2.tgz#7534c29167fe3c38a2a30717414085bb6ca564b3" + integrity sha512-dqmDGad07o2z1lpe+z2rDRiTyBLGF9hdo8V4/4albWea1xptKMLmBWWF1Rodgtza/Pt9DuoUM1a0GlkYkCrzHw== + +"@napi-rs/lzma-win32-x64-msvc@1.4.2": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma-win32-x64-msvc/-/lzma-win32-x64-msvc-1.4.2.tgz#69f240dbea9d41256dffccd5f659f643b766860e" + integrity sha512-Duh4UZ8hT9pFJKJt4jRvFuUMKDKsjfJEo5OuWMpX3IdHjUFH9iRKCYDvHPTlIlFHGXgQNah8dXddD8FAt94Wxg== + +"@napi-rs/lzma@^1.3.1": + version "1.4.2" + resolved "https://registry.yarnpkg.com/@napi-rs/lzma/-/lzma-1.4.2.tgz#2b4a0c8feec58c0a2dafdc0c5d60f1a6b56b4609" + integrity sha512-c6xoopRe7J7SYitS9CnsiNb4+pATUT9O26s34HG3Bun/IWrzCAu2CGaUDN8Zm1nXNq49cTvRs976BMUtH3oxqw== + optionalDependencies: + "@napi-rs/lzma-android-arm-eabi" "1.4.2" + "@napi-rs/lzma-android-arm64" "1.4.2" + "@napi-rs/lzma-darwin-arm64" "1.4.2" + "@napi-rs/lzma-darwin-x64" "1.4.2" + "@napi-rs/lzma-freebsd-x64" "1.4.2" + "@napi-rs/lzma-linux-arm-gnueabihf" "1.4.2" + "@napi-rs/lzma-linux-arm64-gnu" "1.4.2" + "@napi-rs/lzma-linux-arm64-musl" "1.4.2" + "@napi-rs/lzma-linux-ppc64-gnu" "1.4.2" + "@napi-rs/lzma-linux-riscv64-gnu" "1.4.2" + "@napi-rs/lzma-linux-s390x-gnu" "1.4.2" + "@napi-rs/lzma-linux-x64-gnu" "1.4.2" + "@napi-rs/lzma-linux-x64-musl" "1.4.2" + "@napi-rs/lzma-wasm32-wasi" "1.4.2" + "@napi-rs/lzma-win32-arm64-msvc" "1.4.2" + "@napi-rs/lzma-win32-ia32-msvc" "1.4.2" + "@napi-rs/lzma-win32-x64-msvc" "1.4.2" + +"@napi-rs/nice-android-arm-eabi@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm-eabi/-/nice-android-arm-eabi-1.0.1.tgz#9a0cba12706ff56500df127d6f4caf28ddb94936" + integrity sha512-5qpvOu5IGwDo7MEKVqqyAxF90I6aLj4n07OzpARdgDRfz8UbBztTByBp0RC59r3J1Ij8uzYi6jI7r5Lws7nn6w== + +"@napi-rs/nice-android-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-android-arm64/-/nice-android-arm64-1.0.1.tgz#32fc32e9649bd759d2a39ad745e95766f6759d2f" + integrity sha512-GqvXL0P8fZ+mQqG1g0o4AO9hJjQaeYG84FRfZaYjyJtZZZcMjXW5TwkL8Y8UApheJgyE13TQ4YNUssQaTgTyvA== + +"@napi-rs/nice-darwin-arm64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-arm64/-/nice-darwin-arm64-1.0.1.tgz#d3c44c51b94b25a82d45803e2255891e833e787b" + integrity sha512-91k3HEqUl2fsrz/sKkuEkscj6EAj3/eZNCLqzD2AA0TtVbkQi8nqxZCZDMkfklULmxLkMxuUdKe7RvG/T6s2AA== + +"@napi-rs/nice-darwin-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-darwin-x64/-/nice-darwin-x64-1.0.1.tgz#f1b1365a8370c6a6957e90085a9b4873d0e6a957" + integrity sha512-jXnMleYSIR/+TAN/p5u+NkCA7yidgswx5ftqzXdD5wgy/hNR92oerTXHc0jrlBisbd7DpzoaGY4cFD7Sm5GlgQ== + +"@napi-rs/nice-freebsd-x64@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-freebsd-x64/-/nice-freebsd-x64-1.0.1.tgz#4280f081efbe0b46c5165fdaea8b286e55a8f89e" + integrity sha512-j+iJ/ezONXRQsVIB/FJfwjeQXX7A2tf3gEXs4WUGFrJjpe/z2KB7sOv6zpkm08PofF36C9S7wTNuzHZ/Iiccfw== + +"@napi-rs/nice-linux-arm-gnueabihf@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm-gnueabihf/-/nice-linux-arm-gnueabihf-1.0.1.tgz#07aec23a9467ed35eb7602af5e63d42c5d7bd473" + integrity sha512-G8RgJ8FYXYkkSGQwywAUh84m946UTn6l03/vmEXBYNJxQJcD+I3B3k5jmjFG/OPiU8DfvxutOP8bi+F89MCV7Q== + +"@napi-rs/nice-linux-arm64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-gnu/-/nice-linux-arm64-gnu-1.0.1.tgz#038a77134cc6df3c48059d5a5e199d6f50fb9a90" + integrity sha512-IMDak59/W5JSab1oZvmNbrms3mHqcreaCeClUjwlwDr0m3BoR09ZiN8cKFBzuSlXgRdZ4PNqCYNeGQv7YMTjuA== + +"@napi-rs/nice-linux-arm64-musl@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-arm64-musl/-/nice-linux-arm64-musl-1.0.1.tgz#715d0906582ba0cff025109f42e5b84ea68c2bcc" + integrity sha512-wG8fa2VKuWM4CfjOjjRX9YLIbysSVV1S3Kgm2Fnc67ap/soHBeYZa6AGMeR5BJAylYRjnoVOzV19Cmkco3QEPw== + +"@napi-rs/nice-linux-ppc64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-ppc64-gnu/-/nice-linux-ppc64-gnu-1.0.1.tgz#ac1c8f781c67b0559fa7a1cd4ae3ca2299dc3d06" + integrity sha512-lxQ9WrBf0IlNTCA9oS2jg/iAjQyTI6JHzABV664LLrLA/SIdD+I1i3Mjf7TsnoUbgopBcCuDztVLfJ0q9ubf6Q== + +"@napi-rs/nice-linux-riscv64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-riscv64-gnu/-/nice-linux-riscv64-gnu-1.0.1.tgz#b0a430549acfd3920ffd28ce544e2fe17833d263" + integrity sha512-3xs69dO8WSWBb13KBVex+yvxmUeEsdWexxibqskzoKaWx9AIqkMbWmE2npkazJoopPKX2ULKd8Fm9veEn0g4Ig== + +"@napi-rs/nice-linux-s390x-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-s390x-gnu/-/nice-linux-s390x-gnu-1.0.1.tgz#5b95caf411ad72a965885217db378c4d09733e97" + integrity sha512-lMFI3i9rlW7hgToyAzTaEybQYGbQHDrpRkg+1gJWEpH0PLAQoZ8jiY0IzakLfNWnVda1eTYYlxxFYzW8Rqczkg== + +"@napi-rs/nice-linux-x64-gnu@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-gnu/-/nice-linux-x64-gnu-1.0.1.tgz#a98cdef517549f8c17a83f0236a69418a90e77b7" + integrity sha512-XQAJs7DRN2GpLN6Fb+ZdGFeYZDdGl2Fn3TmFlqEL5JorgWKrQGRUrpGKbgZ25UeZPILuTKJ+OowG2avN8mThBA== + +"@napi-rs/nice-linux-x64-musl@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-linux-x64-musl/-/nice-linux-x64-musl-1.0.1.tgz#5e26843eafa940138aed437c870cca751c8a8957" + integrity sha512-/rodHpRSgiI9o1faq9SZOp/o2QkKQg7T+DK0R5AkbnI/YxvAIEHf2cngjYzLMQSQgUhxym+LFr+UGZx4vK4QdQ== + +"@napi-rs/nice-win32-arm64-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-arm64-msvc/-/nice-win32-arm64-msvc-1.0.1.tgz#bd62617d02f04aa30ab1e9081363856715f84cd8" + integrity sha512-rEcz9vZymaCB3OqEXoHnp9YViLct8ugF+6uO5McifTedjq4QMQs3DHz35xBEGhH3gJWEsXMUbzazkz5KNM5YUg== + +"@napi-rs/nice-win32-ia32-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-ia32-msvc/-/nice-win32-ia32-msvc-1.0.1.tgz#b8b7aad552a24836027473d9b9f16edaeabecf18" + integrity sha512-t7eBAyPUrWL8su3gDxw9xxxqNwZzAqKo0Szv3IjVQd1GpXXVkb6vBBQUuxfIYaXMzZLwlxRQ7uzM2vdUE9ULGw== + +"@napi-rs/nice-win32-x64-msvc@1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice-win32-x64-msvc/-/nice-win32-x64-msvc-1.0.1.tgz#37d8718b8f722f49067713e9f1e85540c9a3dd09" + integrity sha512-JlF+uDcatt3St2ntBG8H02F1mM45i5SF9W+bIKiReVE6wiy3o16oBP/yxt+RZ+N6LbCImJXJ6bXNO2kn9AXicg== + +"@napi-rs/nice@^1.0.1": + version "1.0.1" + resolved "https://registry.yarnpkg.com/@napi-rs/nice/-/nice-1.0.1.tgz#483d3ff31e5661829a1efb4825591a135c3bfa7d" + integrity sha512-zM0mVWSXE0a0h9aKACLwKmD6nHcRiKrPpCfvaKqG1CqDEyjEawId0ocXxVzPMCAm6kkWr2P025msfxXEnt8UGQ== + optionalDependencies: + "@napi-rs/nice-android-arm-eabi" "1.0.1" + "@napi-rs/nice-android-arm64" "1.0.1" + "@napi-rs/nice-darwin-arm64" "1.0.1" + "@napi-rs/nice-darwin-x64" "1.0.1" + "@napi-rs/nice-freebsd-x64" "1.0.1" + "@napi-rs/nice-linux-arm-gnueabihf" "1.0.1" + "@napi-rs/nice-linux-arm64-gnu" "1.0.1" + "@napi-rs/nice-linux-arm64-musl" "1.0.1" + "@napi-rs/nice-linux-ppc64-gnu" "1.0.1" + "@napi-rs/nice-linux-riscv64-gnu" "1.0.1" + "@napi-rs/nice-linux-s390x-gnu" "1.0.1" + "@napi-rs/nice-linux-x64-gnu" "1.0.1" + "@napi-rs/nice-linux-x64-musl" "1.0.1" + "@napi-rs/nice-win32-arm64-msvc" "1.0.1" + "@napi-rs/nice-win32-ia32-msvc" "1.0.1" + "@napi-rs/nice-win32-x64-msvc" "1.0.1" + +"@napi-rs/tar-android-arm-eabi@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-android-arm-eabi/-/tar-android-arm-eabi-0.1.5.tgz#ce6124c431a168fd54ec2a37fdf0cc4f19a2832b" + integrity sha512-FM2qNG3ELeYibnZC8dfsCV4i/pql1nlLKVINfRC7TSwqFfgj5gbezZ0rT8gRPHbLyslVt6m4MPZfRE8Uj/MuCA== + +"@napi-rs/tar-android-arm64@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-android-arm64/-/tar-android-arm64-0.1.5.tgz#521d913c8fa0b96b98630a30eaea83e73070e055" + integrity sha512-OpP0QyD+K0a68nqyko793lLWiC2BN1wWF/Doatus1OCKxgj61vtrUPVO2cQGQS5i07I/+YGRF8lD0tQDrk4JDQ== + +"@napi-rs/tar-darwin-arm64@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-darwin-arm64/-/tar-darwin-arm64-0.1.5.tgz#3c4ff59228b37de7577cd74dbadb34a5c3d60055" + integrity sha512-sfyM/9gxFabdMTFt4quvLJuKbXS6StGIUf7Cp3l8aV2WqCURJevdpN6wW8XtGBo/iSnAP52ERwMRdyIavPYruw== + +"@napi-rs/tar-darwin-x64@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-darwin-x64/-/tar-darwin-x64-0.1.5.tgz#2ac31d7f543c9ea4d87ff862b019608263ea4007" + integrity sha512-NtY8bADKE/3ODBM3hW/RgPeeERJpI6/jgipT3eLJ/CQWY1VJ6t9GHR7anJKhx1oxVdmSfqfCGMolM8WPV9x9bw== + +"@napi-rs/tar-freebsd-x64@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-freebsd-x64/-/tar-freebsd-x64-0.1.5.tgz#829e2be8383f6d011b9fe74758de520932a22f44" + integrity sha512-azl0nWrDJAGg25cGVKEY7UtU5ABGz4sQASKvemDLwGbzMDtkJgCoPb+OunI1pezijRAyhiuZEQ4jK8S1qNAWCg== + +"@napi-rs/tar-linux-arm-gnueabihf@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-arm-gnueabihf/-/tar-linux-arm-gnueabihf-0.1.5.tgz#ff2c90165f2424dca2d9454c215d11647e3ece0c" + integrity sha512-OjGdKjaW7b0m96rAvsLthMBhwYSSgpTM/WkHqRJo91HCYQ6tHXDBnq4VIQx2FpwT1PoetvRsbSgy0tOc95iYjA== + +"@napi-rs/tar-linux-arm64-gnu@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-arm64-gnu/-/tar-linux-arm64-gnu-0.1.5.tgz#28e4e6088a67440fb4a087e0a17dd24994f42db7" + integrity sha512-o3b2VE5c7+NFb6XRcXrdXgur1yhpx+XNItFoeJUMBE8z0AGAISf2DJSbcJawmefUvrGtr+iLr61hsr6f2hw+5Q== + +"@napi-rs/tar-linux-arm64-musl@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-arm64-musl/-/tar-linux-arm64-musl-0.1.5.tgz#1445f67479bc2cfcfd5cf4f98b4945ccb02703f6" + integrity sha512-5xTxsoPVqovnZ197CqTc+q3psRM4i+ErdiyfDgkG4nP045jh50gp22WKZuE24dc7/iS+IyUrM3+PRbmj2mzR8g== + +"@napi-rs/tar-linux-ppc64-gnu@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-ppc64-gnu/-/tar-linux-ppc64-gnu-0.1.5.tgz#e9c427a5d77aeff6f36b583ceaaefe18c3d1a803" + integrity sha512-7FF1u8EkDpCEPCgU0/kvuzsO+opB7eIbsGfKRIbOqrDT7c1DYxDetNTtukPvNoT2kvwfxxThgTfcPADPxdOE/w== + +"@napi-rs/tar-linux-s390x-gnu@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-s390x-gnu/-/tar-linux-s390x-gnu-0.1.5.tgz#ab4ab3be4179f87fc2f0d6ddd70b56e8abb17283" + integrity sha512-uyIZ7OLCLHtVBpogoJUD0GSAF1IUa3d5c5AVUemTLIwYkVgzdEB+khh3i2+/oKObf79ZKfQ8mYxOryHqfx+ulw== + +"@napi-rs/tar-linux-x64-gnu@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-x64-gnu/-/tar-linux-x64-gnu-0.1.5.tgz#b3412ab3838a712ee0e3ec0ff36e64ed6e18b3a5" + integrity sha512-y8pFyVTU6lSYiW2lse6i1Ns9yt9mBkAqPbcJnIjqC7ZqRd61T6g3XZDSrKmsM6ycTfsAqoE5WyyFxBjQN29AOA== + +"@napi-rs/tar-linux-x64-musl@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-linux-x64-musl/-/tar-linux-x64-musl-0.1.5.tgz#c9c5b9712f4c6bd8de4ba9733738a857a229cdfe" + integrity sha512-8phLYc0QX+tqvp34PQHUulZUi4sy/fdg1KgFHiyYExTRRleBB01vM7KSn7Bk9dwH7lannO5D7j4O8OY46Xcr/A== + +"@napi-rs/tar-wasm32-wasi@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-wasm32-wasi/-/tar-wasm32-wasi-0.1.5.tgz#6ae03e39cdd4f99e11b59f4d84f3fcd2ce61a496" + integrity sha512-OpVWC/bwY0zb6nbQDg6koxeZGb441gXwPkaYVjaK4O0TJjNpRKbokLAMlGFtcc/sVSPjghFL0+enfnLDt/P7og== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.9" + +"@napi-rs/tar-win32-arm64-msvc@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-win32-arm64-msvc/-/tar-win32-arm64-msvc-0.1.5.tgz#7fae2fbd029a7ea416aad1899a3bd9b3b0eada08" + integrity sha512-FXwQA2Ib55q98szshvDsitgo2iLW2lTD1Q53e8dPMGobPa2yL5e8IjJDCcMI7XJwBZPl9YjJk7nAb8y20DXF+Q== + +"@napi-rs/tar-win32-ia32-msvc@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-win32-ia32-msvc/-/tar-win32-ia32-msvc-0.1.5.tgz#c9347eb9a82dd950adc76bd1497f63776dc9959d" + integrity sha512-XEt58yFslNkwf2yJ+uX5nDNmPAk15Metkx2hVPeH29mOpuG2H8nuS8/42hZ+dQfZf3xABRjyurVMMH9JcgLZIQ== + +"@napi-rs/tar-win32-x64-msvc@0.1.5": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar-win32-x64-msvc/-/tar-win32-x64-msvc-0.1.5.tgz#f369bfb95d13ecf5024b17e59a456f8ab9564bca" + integrity sha512-9Rq0Ob4S5NGFwNL3kGQkgrYlObqQgw19QMSZdVuhzZ9sSxn9OSF5cWgZ/n1oMEPWK+u6n9GSN2XbPn4DI7pm7Q== + +"@napi-rs/tar@^0.1.1": + version "0.1.5" + resolved "https://registry.yarnpkg.com/@napi-rs/tar/-/tar-0.1.5.tgz#1ee1f37d14ba3f730488758a84372646c6daa55c" + integrity sha512-skgWKcpjtUqJUk1jwhVl8vXYCXQlFC532KiryU3hQBr6ZIJk0E0qD9FG99hUqtPko8mIMS5HDPO+uSnvHfgRVg== + optionalDependencies: + "@napi-rs/tar-android-arm-eabi" "0.1.5" + "@napi-rs/tar-android-arm64" "0.1.5" + "@napi-rs/tar-darwin-arm64" "0.1.5" + "@napi-rs/tar-darwin-x64" "0.1.5" + "@napi-rs/tar-freebsd-x64" "0.1.5" + "@napi-rs/tar-linux-arm-gnueabihf" "0.1.5" + "@napi-rs/tar-linux-arm64-gnu" "0.1.5" + "@napi-rs/tar-linux-arm64-musl" "0.1.5" + "@napi-rs/tar-linux-ppc64-gnu" "0.1.5" + "@napi-rs/tar-linux-s390x-gnu" "0.1.5" + "@napi-rs/tar-linux-x64-gnu" "0.1.5" + "@napi-rs/tar-linux-x64-musl" "0.1.5" + "@napi-rs/tar-wasm32-wasi" "0.1.5" + "@napi-rs/tar-win32-arm64-msvc" "0.1.5" + "@napi-rs/tar-win32-ia32-msvc" "0.1.5" + "@napi-rs/tar-win32-x64-msvc" "0.1.5" + +"@napi-rs/wasm-runtime@0.2.4": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.4.tgz#d27788176f250d86e498081e3c5ff48a17606918" + integrity sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ== + dependencies: + "@emnapi/core" "^1.1.0" + "@emnapi/runtime" "^1.1.0" + "@tybys/wasm-util" "^0.9.0" + +"@napi-rs/wasm-runtime@^0.2.3", "@napi-rs/wasm-runtime@^0.2.9": + version "0.2.9" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.9.tgz#7278122cf94f3b36d8170a8eee7d85356dfa6a96" + integrity sha512-OKRBiajrrxB9ATokgEQoG87Z25c67pCpYcCwmXYX8PBftC9pBfN18gnm/fh1wurSLEKIAt+QRFLFCQISrb66Jg== + dependencies: + "@emnapi/core" "^1.4.0" + "@emnapi/runtime" "^1.4.0" + "@tybys/wasm-util" "^0.9.0" + +"@napi-rs/wasm-tools-android-arm-eabi@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-android-arm-eabi/-/wasm-tools-android-arm-eabi-0.0.2.tgz#da9978903a97516aad404c12434974c3b8dfea5a" + integrity sha512-/b+UU3suXjW4P0DzHRNdrnebQtFKcQf/YMeZJH+xUlKgvwli5kbmWjx8Wqqz0VETVkUTuPqJMBDIVLyc+14FGw== + +"@napi-rs/wasm-tools-android-arm64@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-android-arm64/-/wasm-tools-android-arm64-0.0.2.tgz#5d295edece8988f42e4821d3d6fd7816be3587dc" + integrity sha512-j57GbDflwJdZtT8pZj5fOV4JAP+LdKN+wzsUYs+QRUoBqpWbbUANudolqfw63bkS9sD4z7fbCuz8iwtJqzxTVA== + +"@napi-rs/wasm-tools-darwin-arm64@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-darwin-arm64/-/wasm-tools-darwin-arm64-0.0.2.tgz#e551a9aa5401f0665d942111cd7f87b0915332e4" + integrity sha512-P2ChgWgVuv9GwmbxN89R84KzIImoTqXINteEixUvmkdnhyFiR+I8deNs89Yed+5w8QLC6MEfrtRqLP9YI+NoQA== + +"@napi-rs/wasm-tools-darwin-x64@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-darwin-x64/-/wasm-tools-darwin-x64-0.0.2.tgz#0162f36ac9f46fa49bc532337e6481b8e4cc6957" + integrity sha512-T/kQQ0gt8+wau1Z821PKVAD76QhmwVoLs2CT7Z9tTBs2pJvwSCP0C/kQiQAHcJIMi7A2E9Ab/Mez0BERy50EFA== + +"@napi-rs/wasm-tools-freebsd-x64@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-freebsd-x64/-/wasm-tools-freebsd-x64-0.0.2.tgz#71ea63deaec98a8d683fb7dcc7d8adbf41d4801b" + integrity sha512-GnnHu+r5sfzuxC/1J5UMF/h3BOZnHb3NQZ5hmbCfZYCKzpzRxrAJhzRunlbRN+v0x8M/49dztVTYR3s7K4ooAw== + +"@napi-rs/wasm-tools-linux-arm64-gnu@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-linux-arm64-gnu/-/wasm-tools-linux-arm64-gnu-0.0.2.tgz#7ff25497a4e927ce85e9e035e68c5a48893acf4a" + integrity sha512-KnZdLT0OnKb1CG2kdt3/WvM43vr9i+FEwXCvSOVC/6Tsifz7ynhMg7LAVESILd03HubzQJfg9nbRsk0bQ+IOwg== + +"@napi-rs/wasm-tools-linux-arm64-musl@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-linux-arm64-musl/-/wasm-tools-linux-arm64-musl-0.0.2.tgz#3d167346cf82e5392f85a702a4011c893702d884" + integrity sha512-HkpZOID2U8P6pWqK3mqZ8bxU5xcuT3iA2fO+jrxn78h006iYgfNmdc5JaVhHnHazMmk32xKhSV4iV0VUh8UWDg== + +"@napi-rs/wasm-tools-linux-x64-gnu@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-linux-x64-gnu/-/wasm-tools-linux-x64-gnu-0.0.2.tgz#0303a385e5898ce6fe58e07230f9b15644f738c5" + integrity sha512-YksJWBCyOalB9ogtP9+/dZKP+vR6+h7BmzMXaXMT71WW/GvIsifMVgv+DY/FRSNJQupp5Y+ugjqVAOUOc/G65g== + +"@napi-rs/wasm-tools-linux-x64-musl@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-linux-x64-musl/-/wasm-tools-linux-x64-musl-0.0.2.tgz#28dcdd7aca90ff64292ad2cb956558ccf4a1cee3" + integrity sha512-sPtRxPMdw05KdTcxgSPMmSXG2+PiK3vJ/l2+g9hvjnnKtvslJN2Hr7j8zgzuoKRAUFPaJVe6+D2xVh5cpdqhww== + +"@napi-rs/wasm-tools-wasm32-wasi@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-wasm32-wasi/-/wasm-tools-wasm32-wasi-0.0.2.tgz#f279a65ef1bb6e4046065efda23c9bbc38ff1a11" + integrity sha512-muRvZK7AIuo88G2AxYx3gA59rHMQgoN004saQkBvXnz3K/DVHKfTZ6TtUebss8zI3dURU6xExL8drxFWYxjEbQ== + dependencies: + "@napi-rs/wasm-runtime" "^0.2.3" + +"@napi-rs/wasm-tools-win32-arm64-msvc@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-win32-arm64-msvc/-/wasm-tools-win32-arm64-msvc-0.0.2.tgz#5a2c438492f44b3ec2e27dd6d303f3dc5f0464a0" + integrity sha512-Cn13WQ+tpFqdVwx0DIWKbsI9auFyzVZV4F5UNOUeDt6GgOL+NndgJul0Pc9bSU6fi03AylMPfF/nTCaDWO2Wgw== + +"@napi-rs/wasm-tools-win32-ia32-msvc@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-win32-ia32-msvc/-/wasm-tools-win32-ia32-msvc-0.0.2.tgz#4602b14ba57f3e13df94a7015fd080e17a39591f" + integrity sha512-xsg5DkIQi82a8rcx6246Y3XC8TIqHamY+/C6sIlPLaZEuHctDkMECAw0AANwRf5vN//D2oo2oljOuoYtB1GOKw== + +"@napi-rs/wasm-tools-win32-x64-msvc@0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools-win32-x64-msvc/-/wasm-tools-win32-x64-msvc-0.0.2.tgz#7d393345b12167a7c17653829921ca1821d6e0bc" + integrity sha512-yHigltEt33eq8bappvKsIliz4MxfMPn1M+NWbIFRWN+IS1Z57mhmc1osuk+IRXrSlq0Tom0R6MYN1jpkZKz81Q== + +"@napi-rs/wasm-tools@^0.0.2": + version "0.0.2" + resolved "https://registry.yarnpkg.com/@napi-rs/wasm-tools/-/wasm-tools-0.0.2.tgz#030a69d158380681af31119fd05312f1615f3527" + integrity sha512-kBvDQCP5BLw2TxTENXLp3Of7vVEx0uyIye824JHE4dduzzOHVgSoOFVhVqAT3Fx/hLV445RVWfEqQbXMg4w/Mw== + optionalDependencies: + "@napi-rs/wasm-tools-android-arm-eabi" "0.0.2" + "@napi-rs/wasm-tools-android-arm64" "0.0.2" + "@napi-rs/wasm-tools-darwin-arm64" "0.0.2" + "@napi-rs/wasm-tools-darwin-x64" "0.0.2" + "@napi-rs/wasm-tools-freebsd-x64" "0.0.2" + "@napi-rs/wasm-tools-linux-arm64-gnu" "0.0.2" + "@napi-rs/wasm-tools-linux-arm64-musl" "0.0.2" + "@napi-rs/wasm-tools-linux-x64-gnu" "0.0.2" + "@napi-rs/wasm-tools-linux-x64-musl" "0.0.2" + "@napi-rs/wasm-tools-wasm32-wasi" "0.0.2" + "@napi-rs/wasm-tools-win32-arm64-msvc" "0.0.2" + "@napi-rs/wasm-tools-win32-ia32-msvc" "0.0.2" + "@napi-rs/wasm-tools-win32-x64-msvc" "0.0.2" + +"@nodelib/fs.scandir@2.1.5": + version "2.1.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" + integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== + dependencies: + "@nodelib/fs.stat" "2.0.5" + run-parallel "^1.1.9" + +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": + version "2.0.5" + resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" + integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== + +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": + version "1.2.8" + resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" + integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== + dependencies: + "@nodelib/fs.scandir" "2.1.5" + fastq "^1.6.0" + +"@nx/devkit@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/devkit/-/devkit-20.0.1.tgz#7a59601d8771bdd488147e643c00dac238cd2f29" + integrity sha512-H7N5nSH6Zqumcn1a0kfCi6vXLNw/Msabj+0dvswIxopd7rBgke6EWcSobNEDW8NPVj6QsGIOWJkU8msGjYmFqg== + dependencies: + ejs "^3.1.7" + enquirer "~2.3.6" + ignore "^5.0.4" + minimatch "9.0.3" + semver "^7.5.3" + tmp "~0.2.1" + tslib "^2.3.0" + yargs-parser "21.1.1" + +"@nx/eslint-plugin@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/eslint-plugin/-/eslint-plugin-20.0.1.tgz#1639fa4a9fba54d0067581fac94174c27089cfd8" + integrity sha512-4NqfxfwqKeDhUku21W2HgptWeAD8oUFxCVGQpCXgendRPwlG2bNhj8I6V75mT/o0Et3M/cY3iVxngUcaHvEl4Q== + dependencies: + "@eslint/compat" "^1.1.1" + "@nx/devkit" "20.0.1" + "@nx/js" "20.0.1" + "@typescript-eslint/type-utils" "^8.0.0" + "@typescript-eslint/utils" "^8.0.0" + chalk "^4.1.0" + confusing-browser-globals "^1.0.9" + globals "^15.9.0" + jsonc-eslint-parser "^2.1.0" + semver "^7.5.3" + tslib "^2.3.0" + +"@nx/eslint@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/eslint/-/eslint-20.0.1.tgz#60dd3be009393464fa4ce9840bab8312576f6a3e" + integrity sha512-AryE+lZzJrjJR1Tf/rDF2tV69grYKJCixtPUIpzvlOb7V3Wfnf9HJGtBBOkEQd4P2yUoHP2A+a0v2e6iemabWw== + dependencies: + "@nx/devkit" "20.0.1" + "@nx/js" "20.0.1" + semver "^7.5.3" + tslib "^2.3.0" + typescript "~5.4.2" + +"@nx/jest@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/jest/-/jest-20.0.1.tgz#1acc30ed3b08c2d7f396e86bc9cc3fa13b47f2f1" + integrity sha512-WIK3JzOS7hw110m0UrfObfAtZzhKb05Y7tkxfIfAFvArVjk38fIH+Kmme+LKWW/2unsx72Kh9PiBx1gGVySIMA== + dependencies: + "@jest/reporters" "^29.4.1" + "@jest/test-result" "^29.4.1" + "@nx/devkit" "20.0.1" + "@nx/js" "20.0.1" + "@phenomnomnominal/tsquery" "~5.0.1" + chalk "^4.1.0" + identity-obj-proxy "3.0.0" + jest-config "^29.4.1" + jest-resolve "^29.4.1" + jest-util "^29.4.1" + minimatch "9.0.3" + resolve.exports "1.1.0" + semver "^7.5.3" + tslib "^2.3.0" + yargs-parser "21.1.1" + +"@nx/js@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/js/-/js-20.0.1.tgz#a8ece2c834a78e341ca8fc2db2f1e0f8b154080e" + integrity sha512-WcmuUR7IuGIj95CorQPhUkE0DG7N2FxK9FBUTNOKw7ZBtlOb8s/a/b8xfG+de3M+EanW6zcfF4H8EseG7aTNZg== + dependencies: + "@babel/core" "^7.23.2" + "@babel/plugin-proposal-decorators" "^7.22.7" + "@babel/plugin-transform-class-properties" "^7.22.5" + "@babel/plugin-transform-runtime" "^7.23.2" + "@babel/preset-env" "^7.23.2" + "@babel/preset-typescript" "^7.22.5" + "@babel/runtime" "^7.22.6" + "@nx/devkit" "20.0.1" + "@nx/workspace" "20.0.1" + "@zkochan/js-yaml" "0.0.7" + babel-plugin-const-enum "^1.0.1" + babel-plugin-macros "^2.8.0" + babel-plugin-transform-typescript-metadata "^0.3.1" + chalk "^4.1.0" + columnify "^1.6.0" + detect-port "^1.5.1" + enquirer "~2.3.6" + fast-glob "3.2.7" + ignore "^5.0.4" + js-tokens "^4.0.0" + jsonc-parser "3.2.0" + minimatch "9.0.3" + npm-package-arg "11.0.1" + npm-run-path "^4.0.1" + ora "5.3.0" + semver "^7.5.3" + source-map-support "0.5.19" + ts-node "10.9.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + +"@nx/node@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/node/-/node-20.0.1.tgz#e6111c90bf368e8d896c122e8d13de6552101a06" + integrity sha512-mazk5Gg01oR16785i+JKCwTJV2upLf9qqVnhOVXS9+zSp4QMzpSbGWk5VMnOrrvs73Z5hGRpdFN5OiyEZH/k6A== + dependencies: + "@nx/devkit" "20.0.1" + "@nx/eslint" "20.0.1" + "@nx/jest" "20.0.1" + "@nx/js" "20.0.1" + tslib "^2.3.0" + +"@nx/nx-darwin-arm64@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-arm64/-/nx-darwin-arm64-20.0.1.tgz#0a519cb08604b05e0211fc21cc0b1540eeb051ee" + integrity sha512-ZjfKk/AgOukNotCzTHkeQxGoxZldG89273Itw2irJ+CRZU5BRXBiFVWXgTN05oYbgeM0O5EWyxpwe+0x+Qx1nQ== + +"@nx/nx-darwin-x64@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/nx-darwin-x64/-/nx-darwin-x64-20.0.1.tgz#2ba4485a4aa39cdfe0e68bd76a5af4d9a802ceb8" + integrity sha512-wBKQWktP82bJdqvXczroNk79NNZReofIU7wa+A0M82LTeC7Tqq5/sQu8FJAewpEQkHmnPxByVaaBAWDbQ3g07g== + +"@nx/nx-freebsd-x64@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/nx-freebsd-x64/-/nx-freebsd-x64-20.0.1.tgz#055d133d34abbaa478a4df2f123c3f3949ed0641" + integrity sha512-tB6YxG6BUuGJs+TdjXtTwvwzKiA032A7R2ExS3zkt4S5aXorNeNBHpsLc/rlO5pz+Fm84se8FE8+b3XbQm7UzQ== + +"@nx/nx-linux-arm-gnueabihf@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm-gnueabihf/-/nx-linux-arm-gnueabihf-20.0.1.tgz#65e6d70e9048137aba2752aafe6cbcb0b95ed4b5" + integrity sha512-PbkVNonpBM0XyXF0ymruqakdt+2WzBZav0LjrJltVdhwn/KET7yX0X+nsIcRWZVLbUEb0ymigCvWZk3mxFBByQ== + +"@nx/nx-linux-arm64-gnu@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-gnu/-/nx-linux-arm64-gnu-20.0.1.tgz#8c12d7692b128c122c9c4abf2db9c451001c18d0" + integrity sha512-jL24biEd2Ikngm600ggfmmlxvYwcB+HMMgY/x8/tlX8j7iDr0sIITizIqsKIub+Dux1/UAw/Fi3tvfUNAsfm9g== + +"@nx/nx-linux-arm64-musl@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-arm64-musl/-/nx-linux-arm64-musl-20.0.1.tgz#870b8eaef4cbdd1f7165290bb7370ec84f40dbc1" + integrity sha512-239OlALQwu43Abkp2wGe7QhKlc9IKRgpq/RK4hG54zLZk29QYs/QxZ/QAtd6kfhGyRwCYUCQj1liGuljV0we6w== + +"@nx/nx-linux-x64-gnu@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-gnu/-/nx-linux-x64-gnu-20.0.1.tgz#c800d406874d97733ffcf4afcb50fa9cb6923a16" + integrity sha512-TYMrwN2x0Xt+ZliK3cRF05HphkYuwvFDqlcZ0Pc0fzYvEO+WEDzUDYB56XleYzT+Of4F5qz2k1GnY09dLu9cxg== + +"@nx/nx-linux-x64-musl@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/nx-linux-x64-musl/-/nx-linux-x64-musl-20.0.1.tgz#ba50f84b7a25128d2a154f56df0ba69751948413" + integrity sha512-3oB/bwKlaY5FtWLCu6iTGdvXIQXbvp7Ft1jTLVCYnS2HMPIRBkUrf3jo1xYhPzFY3lDJjD6FLis3JwTUrPgw+w== + +"@nx/nx-win32-arm64-msvc@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-arm64-msvc/-/nx-win32-arm64-msvc-20.0.1.tgz#12b1f869c7fa59240df7bac06b37206b1fa71dd2" + integrity sha512-cy1ZfcxL4hT3ipkakXAgFjVxazoczGzpWPqMmR2On9Aw41V16CzukDvbfi/azHzf2bPhVk/TGX+9Odiz7saRBA== + +"@nx/nx-win32-x64-msvc@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/nx-win32-x64-msvc/-/nx-win32-x64-msvc-20.0.1.tgz#99e6ed31ede9ccd08c4b3844606c52ae0eb47531" + integrity sha512-XwdzCKovf3Nw0Z5TfttAIK/kuj+zTvM76LOLp++Nv/QTNnNRH5wcry8Abhy1KU0LBJUGQj+iPJbPmBVrXy9E5Q== + +"@nx/plugin@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/plugin/-/plugin-20.0.1.tgz#f9fe2e65efeaa58167f34637bfb2c279d8c248e4" + integrity sha512-wve+IgU/+e9KxkXJ0XSHNeqrlak8knEwH5AiiCcofR+AlJo3K32wING/+hwKLMzuqzy8GkkPSeO+G2ugyXXlkw== + dependencies: + "@nx/devkit" "20.0.1" + "@nx/eslint" "20.0.1" + "@nx/jest" "20.0.1" + "@nx/js" "20.0.1" + tslib "^2.3.0" + +"@nx/workspace@20.0.1": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@nx/workspace/-/workspace-20.0.1.tgz#93fe8298573eb6caa65dca9b284e4f54e3b9ad7d" + integrity sha512-k+IkbL4LdrT83Dp52binVCZVkRmCvEMfjQmEjhGEquXRkyj34cVv+vCkn9xz0ffb3+q6XU20PLTJqg+O8a8tgw== + dependencies: + "@nx/devkit" "20.0.1" + chalk "^4.1.0" + enquirer "~2.3.6" + nx "20.0.1" + tslib "^2.3.0" + yargs-parser "21.1.1" + +"@octokit/auth-token@^5.0.0": + version "5.1.2" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-5.1.2.tgz#68a486714d7a7fd1df56cb9bc89a860a0de866de" + integrity sha512-JcQDsBdg49Yky2w2ld20IHAlwr8d/d8N6NiOXbtuoPCqzbsiJgF633mVUw3x4mo0H5ypataQIX7SFu3yy44Mpw== + +"@octokit/core@^6.1.4": + version "6.1.5" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-6.1.5.tgz#c2842aae87c2c2130b7dd33e8caa0f642dde2c67" + integrity sha512-vvmsN0r7rguA+FySiCsbaTTobSftpIDIpPW81trAmsv9TGxg3YCujAxRYp/Uy8xmDgYCzzgulG62H7KYUFmeIg== + dependencies: + "@octokit/auth-token" "^5.0.0" + "@octokit/graphql" "^8.2.2" + "@octokit/request" "^9.2.3" + "@octokit/request-error" "^6.1.8" + "@octokit/types" "^14.0.0" + before-after-hook "^3.0.2" + universal-user-agent "^7.0.0" + +"@octokit/endpoint@^10.1.4": + version "10.1.4" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-10.1.4.tgz#8783be38a32b95af8bcb6523af20ab4eed7a2adb" + integrity sha512-OlYOlZIsfEVZm5HCSR8aSg02T2lbUWOsCQoPKfTXJwDzcHQBrVBGdGXb89dv2Kw2ToZaRtudp8O3ZIYoaOjKlA== + dependencies: + "@octokit/types" "^14.0.0" + universal-user-agent "^7.0.2" + +"@octokit/graphql@^8.2.2": + version "8.2.2" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-8.2.2.tgz#3db48c4ffdf07f99600cee513baf45e73eced4d1" + integrity sha512-Yi8hcoqsrXGdt0yObxbebHXFOiUA+2v3n53epuOg1QUgOB6c4XzvisBNVXJSl8RYA5KrDuSL2yq9Qmqe5N0ryA== + dependencies: + "@octokit/request" "^9.2.3" + "@octokit/types" "^14.0.0" + universal-user-agent "^7.0.0" + +"@octokit/openapi-types@^24.2.0": + version "24.2.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-24.2.0.tgz#3d55c32eac0d38da1a7083a9c3b0cca77924f7d3" + integrity sha512-9sIH3nSUttelJSXUrmGzl7QUBFul0/mB8HRYl3fOlgHbIWG+WnYDXU3v/2zMtAvuzZ/ed00Ei6on975FhBfzrg== + +"@octokit/openapi-types@^25.0.0": + version "25.0.0" + resolved "https://registry.yarnpkg.com/@octokit/openapi-types/-/openapi-types-25.0.0.tgz#adeead36992abf966e89dcd53518d8b0dc910e0d" + integrity sha512-FZvktFu7HfOIJf2BScLKIEYjDsw6RKc7rBJCdvCTfKsVnx2GEB/Nbzjr29DUdb7vQhlzS/j8qDzdditP0OC6aw== + +"@octokit/plugin-paginate-rest@^11.4.2": + version "11.6.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-11.6.0.tgz#e5e9ff3530e867c3837fdbff94ce15a2468a1f37" + integrity sha512-n5KPteiF7pWKgBIBJSk8qzoZWcUkza2O6A0za97pMGVrGfPdltxrfmfF5GucHYvHGZD8BdaZmmHGz5cX/3gdpw== + dependencies: + "@octokit/types" "^13.10.0" + +"@octokit/plugin-request-log@^5.3.1": + version "5.3.1" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-5.3.1.tgz#ccb75d9705de769b2aa82bcd105cc96eb0c00f69" + integrity sha512-n/lNeCtq+9ofhC15xzmJCNKP2BWTv8Ih2TTy+jatNCCq/gQP/V7rK3fjIfuz0pDWDALO/o/4QY4hyOF6TQQFUw== + +"@octokit/plugin-rest-endpoint-methods@^13.3.0": + version "13.5.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-13.5.0.tgz#d8c8ca2123b305596c959a9134dfa8b0495b0ba6" + integrity sha512-9Pas60Iv9ejO3WlAX3maE1+38c5nqbJXV5GrncEfkndIpZrJ/WPMRd2xYDcPPEt5yzpxcjw9fWNoPhsSGzqKqw== + dependencies: + "@octokit/types" "^13.10.0" + +"@octokit/request-error@^6.1.8": + version "6.1.8" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-6.1.8.tgz#3c7ce1ca6721eabd43dbddc76b44860de1fdea75" + integrity sha512-WEi/R0Jmq+IJKydWlKDmryPcmdYSVjL3ekaiEL1L9eo1sUnqMJ+grqmC9cjk7CA7+b2/T397tO5d8YLOH3qYpQ== + dependencies: + "@octokit/types" "^14.0.0" + +"@octokit/request@^9.2.3": + version "9.2.3" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-9.2.3.tgz#00d023ad690903d952e4dd31e3f5804ef98fcd24" + integrity sha512-Ma+pZU8PXLOEYzsWf0cn/gY+ME57Wq8f49WTXA8FMHp2Ps9djKw//xYJ1je8Hm0pR2lU9FUGeJRWOtxq6olt4w== + dependencies: + "@octokit/endpoint" "^10.1.4" + "@octokit/request-error" "^6.1.8" + "@octokit/types" "^14.0.0" + fast-content-type-parse "^2.0.0" + universal-user-agent "^7.0.2" + +"@octokit/rest@^21.0.0": + version "21.1.1" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-21.1.1.tgz#7a70455ca451b1d253e5b706f35178ceefb74de2" + integrity sha512-sTQV7va0IUVZcntzy1q3QqPm/r8rWtDCqpRAmb8eXXnKkjoQEtFe3Nt5GTVsHft+R6jJoHeSiVLcgcvhtue/rg== + dependencies: + "@octokit/core" "^6.1.4" + "@octokit/plugin-paginate-rest" "^11.4.2" + "@octokit/plugin-request-log" "^5.3.1" + "@octokit/plugin-rest-endpoint-methods" "^13.3.0" + +"@octokit/types@^13.10.0": + version "13.10.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-13.10.0.tgz#3e7c6b19c0236c270656e4ea666148c2b51fd1a3" + integrity sha512-ifLaO34EbbPj0Xgro4G5lP5asESjwHracYJvVaPIyXMuiuXLlhic3S47cBdTb+jfODkTE5YtGCLt3Ay3+J97sA== + dependencies: + "@octokit/openapi-types" "^24.2.0" + +"@octokit/types@^14.0.0": + version "14.0.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-14.0.0.tgz#bbd1d31e2269940789ef143b1c37918aae09adc4" + integrity sha512-VVmZP0lEhbo2O1pdq63gZFiGCKkm8PPp8AUOijlwPO6hojEVjspA0MWKP7E4hbvGxzFKNqKr6p0IYtOH/Wf/zA== + dependencies: + "@octokit/openapi-types" "^25.0.0" + +"@phenomnomnominal/tsquery@~5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@phenomnomnominal/tsquery/-/tsquery-5.0.1.tgz#a2a5abc89f92c01562a32806655817516653a388" + integrity sha512-3nVv+e2FQwsW8Aw6qTU6f+1rfcJ3hrcnvH/mu9i8YhxO+9sqbOfpL8m6PbET5+xKOlz/VSbp0RoYWYCtIsnmuA== + dependencies: + esquery "^1.4.0" + +"@sinclair/typebox@^0.27.8": + version "0.27.8" + resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e" + integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== + +"@sindresorhus/is@^4.0.0": + version "4.6.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-4.6.0.tgz#3c7c9c46e678feefe7a2e5bb609d3dbd665ffb3f" + integrity sha512-t09vSN3MdfsyCHoFcTRCH/iUtG7OJ0CsjzB8cjAmKc/va/kIgeDI/TxsigdncE/4be734m0cvIYwNaV4i2XqAw== + +"@sinonjs/commons@^3.0.0": + version "3.0.1" + resolved "https://registry.yarnpkg.com/@sinonjs/commons/-/commons-3.0.1.tgz#1029357e44ca901a615585f6d27738dbc89084cd" + integrity sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ== + dependencies: + type-detect "4.0.8" + +"@sinonjs/fake-timers@^10.0.2": + version "10.3.0" + resolved "https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-10.3.0.tgz#55fdff1ecab9f354019129daf4df0dd4d923ea66" + integrity sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA== + dependencies: + "@sinonjs/commons" "^3.0.0" + +"@swc-node/core@^1.13.1": + version "1.13.3" + resolved "https://registry.yarnpkg.com/@swc-node/core/-/core-1.13.3.tgz#0821d01263f48314392d38d80ef1a03fef5f11b3" + integrity sha512-OGsvXIid2Go21kiNqeTIn79jcaX4l0G93X2rAnas4LFoDyA9wAwVK7xZdm+QsKoMn5Mus2yFLCc4OtX2dD/PWA== + +"@swc-node/register@1.9.2": + version "1.9.2" + resolved "https://registry.yarnpkg.com/@swc-node/register/-/register-1.9.2.tgz#314b86e32ed1f742d2e025d66f84c2f528082b70" + integrity sha512-BBjg0QNuEEmJSoU/++JOXhrjWdu3PTyYeJWsvchsI0Aqtj8ICkz/DqlwtXbmZVZ5vuDPpTfFlwDBZe81zgShMA== + dependencies: + "@swc-node/core" "^1.13.1" + "@swc-node/sourcemap-support" "^0.5.0" + colorette "^2.0.20" + debug "^4.3.4" + pirates "^4.0.6" + tslib "^2.6.2" + +"@swc-node/sourcemap-support@^0.5.0": + version "0.5.1" + resolved "https://registry.yarnpkg.com/@swc-node/sourcemap-support/-/sourcemap-support-0.5.1.tgz#0355540d62874891770ce1ba06838de186f098ff" + integrity sha512-JxIvIo/Hrpv0JCHSyRpetAdQ6lB27oFYhv0PKCNf1g2gUXOjpeR1exrXccRxLMuAV5WAmGFBwRnNOJqN38+qtg== + dependencies: + source-map-support "^0.5.21" + tslib "^2.6.3" + +"@swc/cli@0.3.14": + version "0.3.14" + resolved "https://registry.yarnpkg.com/@swc/cli/-/cli-0.3.14.tgz#c0d56e55e5eb4918937b8d0fa82e5834c21c4cce" + integrity sha512-0vGqD6FSW67PaZUZABkA+ADKsX7OUY/PwNEz1SbQdCvVk/e4Z36Gwh7mFVBQH9RIsMonTyhV1RHkwkGnEfR3zQ== + dependencies: + "@mole-inc/bin-wrapper" "^8.0.1" + "@swc/counter" "^0.1.3" + commander "^8.3.0" + fast-glob "^3.2.5" + minimatch "^9.0.3" + piscina "^4.3.0" + semver "^7.3.8" + slash "3.0.0" + source-map "^0.7.3" + +"@swc/core-darwin-arm64@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-arm64/-/core-darwin-arm64-1.5.7.tgz#2b5cdbd34e4162e50de6147dd1a5cb12d23b08e8" + integrity sha512-bZLVHPTpH3h6yhwVl395k0Mtx8v6CGhq5r4KQdAoPbADU974Mauz1b6ViHAJ74O0IVE5vyy7tD3OpkQxL/vMDQ== + +"@swc/core-darwin-x64@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-darwin-x64/-/core-darwin-x64-1.5.7.tgz#6aa7e3c01ab8e5e41597f8a24ff24c4e50936a46" + integrity sha512-RpUyu2GsviwTc2qVajPL0l8nf2vKj5wzO3WkLSHAHEJbiUZk83NJrZd1RVbEknIMO7+Uyjh54hEh8R26jSByaw== + +"@swc/core-linux-arm-gnueabihf@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm-gnueabihf/-/core-linux-arm-gnueabihf-1.5.7.tgz#160108633b9e1d1ad05f815bedc7e9eb5d59fc2a" + integrity sha512-cTZWTnCXLABOuvWiv6nQQM0hP6ZWEkzdgDvztgHI/+u/MvtzJBN5lBQ2lue/9sSFYLMqzqff5EHKlFtrJCA9dQ== + +"@swc/core-linux-arm64-gnu@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-gnu/-/core-linux-arm64-gnu-1.5.7.tgz#cbfa512683c73227ad25552f3b3e722b0e7fbd1d" + integrity sha512-hoeTJFBiE/IJP30Be7djWF8Q5KVgkbDtjySmvYLg9P94bHg9TJPSQoC72tXx/oXOgXvElDe/GMybru0UxhKx4g== + +"@swc/core-linux-arm64-musl@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-arm64-musl/-/core-linux-arm64-musl-1.5.7.tgz#80239cb58fe57f3c86b44617fe784530ec55ee2b" + integrity sha512-+NDhK+IFTiVK1/o7EXdCeF2hEzCiaRSrb9zD7X2Z7inwWlxAntcSuzZW7Y6BRqGQH89KA91qYgwbnjgTQ22PiQ== + +"@swc/core-linux-x64-gnu@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-gnu/-/core-linux-x64-gnu-1.5.7.tgz#a699c1632de60b6a63b7fdb7abcb4fef317e57ca" + integrity sha512-25GXpJmeFxKB+7pbY7YQLhWWjkYlR+kHz5I3j9WRl3Lp4v4UD67OGXwPe+DIcHqcouA1fhLhsgHJWtsaNOMBNg== + +"@swc/core-linux-x64-musl@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-linux-x64-musl/-/core-linux-x64-musl-1.5.7.tgz#8e4c203d6bc41e7f85d7d34d0fdf4ef751fa626c" + integrity sha512-0VN9Y5EAPBESmSPPsCJzplZHV26akC0sIgd3Hc/7S/1GkSMoeuVL+V9vt+F/cCuzr4VidzSkqftdP3qEIsXSpg== + +"@swc/core-win32-arm64-msvc@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-win32-arm64-msvc/-/core-win32-arm64-msvc-1.5.7.tgz#31e3d42b8c0aa79f0ea1a980c0dd1a999d378ed7" + integrity sha512-RtoNnstBwy5VloNCvmvYNApkTmuCe4sNcoYWpmY7C1+bPR+6SOo8im1G6/FpNem8AR5fcZCmXHWQ+EUmRWJyuA== + +"@swc/core-win32-ia32-msvc@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-win32-ia32-msvc/-/core-win32-ia32-msvc-1.5.7.tgz#a235285f9f62850aefcf9abb03420f2c54f63638" + integrity sha512-Xm0TfvcmmspvQg1s4+USL3x8D+YPAfX2JHygvxAnCJ0EHun8cm2zvfNBcsTlnwYb0ybFWXXY129aq1wgFC9TpQ== + +"@swc/core-win32-x64-msvc@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core-win32-x64-msvc/-/core-win32-x64-msvc-1.5.7.tgz#f84641393b5223450d00d97bfff877b8b69d7c9b" + integrity sha512-tp43WfJLCsKLQKBmjmY/0vv1slVywR5Q4qKjF5OIY8QijaEW7/8VwPyUyVoJZEnDgv9jKtUTG5PzqtIYPZGnyg== + +"@swc/core@1.5.7": + version "1.5.7" + resolved "https://registry.yarnpkg.com/@swc/core/-/core-1.5.7.tgz#e1db7b9887d5f34eb4a3256a738d0c5f1b018c33" + integrity sha512-U4qJRBefIJNJDRCCiVtkfa/hpiZ7w0R6kASea+/KLp+vkus3zcLSB8Ub8SvKgTIxjWpwsKcZlPf5nrv4ls46SQ== + dependencies: + "@swc/counter" "^0.1.2" + "@swc/types" "0.1.7" + optionalDependencies: + "@swc/core-darwin-arm64" "1.5.7" + "@swc/core-darwin-x64" "1.5.7" + "@swc/core-linux-arm-gnueabihf" "1.5.7" + "@swc/core-linux-arm64-gnu" "1.5.7" + "@swc/core-linux-arm64-musl" "1.5.7" + "@swc/core-linux-x64-gnu" "1.5.7" + "@swc/core-linux-x64-musl" "1.5.7" + "@swc/core-win32-arm64-msvc" "1.5.7" + "@swc/core-win32-ia32-msvc" "1.5.7" + "@swc/core-win32-x64-msvc" "1.5.7" + +"@swc/counter@^0.1.2", "@swc/counter@^0.1.3": + version "0.1.3" + resolved "https://registry.yarnpkg.com/@swc/counter/-/counter-0.1.3.tgz#cc7463bd02949611c6329596fccd2b0ec782b0e9" + integrity sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ== + +"@swc/helpers@0.5.13": + version "0.5.13" + resolved "https://registry.yarnpkg.com/@swc/helpers/-/helpers-0.5.13.tgz#33e63ff3cd0cade557672bd7888a39ce7d115a8c" + integrity sha512-UoKGxQ3r5kYI9dALKJapMmuK+1zWM/H17Z1+iwnNmzcJRnfFuevZs375TA5rW31pu4BS4NoSy1fRsexDXfWn5w== + dependencies: + tslib "^2.4.0" + +"@swc/types@0.1.7": + version "0.1.7" + resolved "https://registry.yarnpkg.com/@swc/types/-/types-0.1.7.tgz#ea5d658cf460abff51507ca8d26e2d391bafb15e" + integrity sha512-scHWahbHF0eyj3JsxG9CFJgFdFNaVQCNAimBlT6PzS3n/HptxqREjsm4OH6AN3lYcffZYSPxXW8ua2BEHp0lJQ== + dependencies: + "@swc/counter" "^0.1.3" + +"@szmarczak/http-timer@^4.0.5": + version "4.0.6" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-4.0.6.tgz#b4a914bb62e7c272d4e5989fe4440f812ab1d807" + integrity sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w== + dependencies: + defer-to-connect "^2.0.0" + +"@tokenizer/token@^0.3.0": + version "0.3.0" + resolved "https://registry.yarnpkg.com/@tokenizer/token/-/token-0.3.0.tgz#fe98a93fe789247e998c75e74e9c7c63217aa276" + integrity sha512-OvjF+z51L3ov0OyAU0duzsYuvO01PH7x4t6DJx+guahgTnBHkhJdG7soQeTSFLWN3efnHyibZ4Z8l2EuWwJN3A== + +"@tootallnate/once@2": + version "2.0.0" + resolved "https://registry.yarnpkg.com/@tootallnate/once/-/once-2.0.0.tgz#f544a148d3ab35801c1f633a7441fd87c2e484bf" + integrity sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A== + +"@tsconfig/node10@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.11.tgz#6ee46400685f130e278128c7b38b7e031ff5b2f2" + integrity sha512-DcRjDCujK/kCk/cUe8Xz8ZSpm8mS3mNNpta+jGCA6USEDfktlNvm1+IuZ9eTcDbNk41BHwpHHeW+N1lKCz4zOw== + +"@tsconfig/node12@^1.0.7": + version "1.0.11" + resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" + integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== + +"@tsconfig/node14@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" + integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== + +"@tsconfig/node16@^1.0.2": + version "1.0.4" + resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" + integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== + +"@tybys/wasm-util@^0.9.0": + version "0.9.0" + resolved "https://registry.yarnpkg.com/@tybys/wasm-util/-/wasm-util-0.9.0.tgz#3e75eb00604c8d6db470bf18c37b7d984a0e3355" + integrity sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw== + dependencies: + tslib "^2.4.0" + +"@types/babel__core@^7.1.14": + version "7.20.5" + resolved "https://registry.yarnpkg.com/@types/babel__core/-/babel__core-7.20.5.tgz#3df15f27ba85319caa07ba08d0721889bb39c017" + integrity sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA== + dependencies: + "@babel/parser" "^7.20.7" + "@babel/types" "^7.20.7" + "@types/babel__generator" "*" + "@types/babel__template" "*" + "@types/babel__traverse" "*" + +"@types/babel__generator@*": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== + dependencies: + "@babel/types" "^7.0.0" + +"@types/babel__template@*": + version "7.4.4" + resolved "https://registry.yarnpkg.com/@types/babel__template/-/babel__template-7.4.4.tgz#5672513701c1b2199bc6dad636a9d7491586766f" + integrity sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A== + dependencies: + "@babel/parser" "^7.1.0" + "@babel/types" "^7.0.0" + +"@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": + version "7.20.7" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.7.tgz#968cdc2366ec3da159f61166428ee40f370e56c2" + integrity sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng== + dependencies: + "@babel/types" "^7.20.7" + +"@types/cacheable-request@^6.0.1": + version "6.0.3" + resolved "https://registry.yarnpkg.com/@types/cacheable-request/-/cacheable-request-6.0.3.tgz#a430b3260466ca7b5ca5bfd735693b36e7a9d183" + integrity sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw== + dependencies: + "@types/http-cache-semantics" "*" + "@types/keyv" "^3.1.4" + "@types/node" "*" + "@types/responselike" "^1.0.0" + +"@types/graceful-fs@^4.1.3": + version "4.1.9" + resolved "https://registry.yarnpkg.com/@types/graceful-fs/-/graceful-fs-4.1.9.tgz#2a06bc0f68a20ab37b3e36aa238be6abdf49e8b4" + integrity sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ== + dependencies: + "@types/node" "*" + +"@types/http-cache-semantics@*": + version "4.0.4" + resolved "https://registry.yarnpkg.com/@types/http-cache-semantics/-/http-cache-semantics-4.0.4.tgz#b979ebad3919799c979b17c72621c0bc0a31c6c4" + integrity sha512-1m0bIFVc7eJWyve9S0RnuRgcQqF/Xd5QsUZAZeQFr1Q3/p9JWoQQEqmVy+DPTNpGXwhgIetAoYF8JSc33q29QA== + +"@types/istanbul-lib-coverage@*", "@types/istanbul-lib-coverage@^2.0.0", "@types/istanbul-lib-coverage@^2.0.1": + version "2.0.6" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz#7739c232a1fee9b4d3ce8985f314c0c6d33549d7" + integrity sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== + +"@types/istanbul-lib-report@*": + version "3.0.3" + resolved "https://registry.yarnpkg.com/@types/istanbul-lib-report/-/istanbul-lib-report-3.0.3.tgz#53047614ae72e19fc0401d872de3ae2b4ce350bf" + integrity sha512-NQn7AHQnk/RSLOxrBbGyJM/aVQ+pjj5HCgasFxc0K/KhoATfQ/47AyUl15I2yBUpihjmas+a+VJBOqecrFH+uA== + dependencies: + "@types/istanbul-lib-coverage" "*" + +"@types/istanbul-reports@^3.0.0": + version "3.0.4" + resolved "https://registry.yarnpkg.com/@types/istanbul-reports/-/istanbul-reports-3.0.4.tgz#0f03e3d2f670fbdac586e34b433783070cc16f54" + integrity sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ== + dependencies: + "@types/istanbul-lib-report" "*" + +"@types/jest@29.5.13": + version "29.5.13" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.13.tgz#8bc571659f401e6a719a7bf0dbcb8b78c71a8adc" + integrity sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg== + dependencies: + expect "^29.0.0" + pretty-format "^29.0.0" + +"@types/jsdom@^20.0.0": + version "20.0.1" + resolved "https://registry.yarnpkg.com/@types/jsdom/-/jsdom-20.0.1.tgz#07c14bc19bd2f918c1929541cdaacae894744808" + integrity sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ== + dependencies: + "@types/node" "*" + "@types/tough-cookie" "*" + parse5 "^7.0.0" + +"@types/keyv@^3.1.4": + version "3.1.4" + resolved "https://registry.yarnpkg.com/@types/keyv/-/keyv-3.1.4.tgz#3ccdb1c6751b0c7e52300bcdacd5bcbf8faa75b6" + integrity sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg== + dependencies: + "@types/node" "*" + +"@types/minimist@^1.2.0": + version "1.2.5" + resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.5.tgz#ec10755e871497bcd83efe927e43ec46e8c0747e" + integrity sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag== + +"@types/mute-stream@^0.0.4": + version "0.0.4" + resolved "https://registry.yarnpkg.com/@types/mute-stream/-/mute-stream-0.0.4.tgz#77208e56a08767af6c5e1237be8888e2f255c478" + integrity sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow== + dependencies: + "@types/node" "*" + +"@types/node@*", "@types/node@^22.5.5": + version "22.15.12" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.15.12.tgz#9ce54e51e09536faa94e4ec300c4728ee83bfa85" + integrity sha512-K0fpC/ZVeb8G9rm7bH7vI0KAec4XHEhBam616nVJCV51bKzJ6oA3luG4WdKoaztxe70QaNjS/xBmcDLmr4PiGw== + dependencies: + undici-types "~6.21.0" + +"@types/node@18.19.11": + version "18.19.11" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.11.tgz#355cf2a28a8c2edf154b275a5715401b18fe0b63" + integrity sha512-hzdHPKpDdp5bEcRq1XTlZ2ntVjLcHCTV73dEcGg02eSY/+9AZ+jlfz6i00+zOrunMWenjHuI49J8J7Y9uz50JQ== + dependencies: + undici-types "~5.26.4" + +"@types/node@20.5.1": + version "20.5.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-20.5.1.tgz#178d58ee7e4834152b0e8b4d30cbfab578b9bb30" + integrity sha512-4tT2UrL5LBqDwoed9wZ6N3umC4Yhz3W3FloMmiiG4JwmUJWpie0c7lcnUNd4gtMKuDEO4wRVS8B6Xa0uMRsMKg== + +"@types/normalize-package-data@^2.4.0": + version "2.4.4" + resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz#56e2cc26c397c038fab0e3a917a12d5c5909e901" + integrity sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA== + +"@types/parse-json@^4.0.0": + version "4.0.2" + resolved "https://registry.yarnpkg.com/@types/parse-json/-/parse-json-4.0.2.tgz#5950e50960793055845e956c427fc2b0d70c5239" + integrity sha512-dISoDXWWQwUquiKsyZ4Ng+HX2KsPL7LyHKHQwgGFEA3IaKac4Obd+h2a/a6waisAoepJlBcx9paWqjA8/HVjCw== + +"@types/responselike@^1.0.0": + version "1.0.3" + resolved "https://registry.yarnpkg.com/@types/responselike/-/responselike-1.0.3.tgz#cc29706f0a397cfe6df89debfe4bf5cea159db50" + integrity sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw== + dependencies: + "@types/node" "*" + +"@types/semver@^7.5.8": + version "7.7.0" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.7.0.tgz#64c441bdae033b378b6eef7d0c3d77c329b9378e" + integrity sha512-k107IF4+Xr7UHjwDc7Cfd6PRQfbdkiRabXGRjo07b4WyPahFBZCZ1sE+BNxYIJPPg73UkfOsVOLwqVc/6ETrIA== + +"@types/stack-utils@^2.0.0": + version "2.0.3" + resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.3.tgz#6209321eb2c1712a7e7466422b8cb1fc0d9dd5d8" + integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== + +"@types/tough-cookie@*": + version "4.0.5" + resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.5.tgz#cb6e2a691b70cb177c6e3ae9c1d2e8b2ea8cd304" + integrity sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA== + +"@types/wrap-ansi@^3.0.0": + version "3.0.0" + resolved "https://registry.yarnpkg.com/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz#18b97a972f94f60a679fd5c796d96421b9abb9fd" + integrity sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g== + +"@types/yargs-parser@*": + version "21.0.3" + resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-21.0.3.tgz#815e30b786d2e8f0dcd85fd5bcf5e1a04d008f15" + integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== + +"@types/yargs@^17.0.8": + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== + dependencies: + "@types/yargs-parser" "*" + +"@typescript-eslint/eslint-plugin@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" + integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== + dependencies: + "@eslint-community/regexpp" "^4.10.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + graphemer "^1.4.0" + ignore "^5.3.1" + natural-compare "^1.4.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/parser@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" + integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== + dependencies: + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + +"@typescript-eslint/scope-manager@8.32.0": + version "8.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-8.32.0.tgz#6be89f652780f0d3d19d58dc0ee107b1a9e3282c" + integrity sha512-jc/4IxGNedXkmG4mx4nJTILb6TMjL66D41vyeaPWvDUmeYQzF3lKtN15WsAeTr65ce4mPxwopPSo1yUUAWw0hQ== + dependencies: + "@typescript-eslint/types" "8.32.0" + "@typescript-eslint/visitor-keys" "8.32.0" + +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" + integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== + dependencies: + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + debug "^4.3.4" + ts-api-utils "^1.3.0" + +"@typescript-eslint/type-utils@^8.0.0": + version "8.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-8.32.0.tgz#5e0882393e801963f749bea38888e716045fe895" + integrity sha512-t2vouuYQKEKSLtJaa5bB4jHeha2HJczQ6E5IXPDPgIty9EqcJxpr1QHQ86YyIPwDwxvUmLfP2YADQ5ZY4qddZg== + dependencies: + "@typescript-eslint/typescript-estree" "8.32.0" + "@typescript-eslint/utils" "8.32.0" + debug "^4.3.4" + ts-api-utils "^2.1.0" + +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== + +"@typescript-eslint/types@8.32.0": + version "8.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-8.32.0.tgz#a4a66b8876b8391970cf069b49572e43f1fc957a" + integrity sha512-O5Id6tGadAZEMThM6L9HmVf5hQUXNSxLVKeGJYWNhhVseps/0LddMkp7//VDkzwJ69lPL0UmZdcZwggj9akJaA== + +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== + dependencies: + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^1.3.0" + +"@typescript-eslint/typescript-estree@8.32.0": + version "8.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-8.32.0.tgz#11d45f47bfabb141206a3da6c7b91a9d869ff32d" + integrity sha512-pU9VD7anSCOIoBFnhTGfOzlVFQIA1XXiQpH/CezqOBaDppRwTglJzCC6fUQGpfwey4T183NKhF1/mfatYmjRqQ== + dependencies: + "@typescript-eslint/types" "8.32.0" + "@typescript-eslint/visitor-keys" "8.32.0" + debug "^4.3.4" + fast-glob "^3.3.2" + is-glob "^4.0.3" + minimatch "^9.0.4" + semver "^7.6.0" + ts-api-utils "^2.1.0" + +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== + dependencies: + "@eslint-community/eslint-utils" "^4.4.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + +"@typescript-eslint/utils@8.32.0", "@typescript-eslint/utils@^8.0.0": + version "8.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-8.32.0.tgz#24570f68cf845d198b73a7f94ca88d8c2505ba47" + integrity sha512-8S9hXau6nQ/sYVtC3D6ISIDoJzS1NsCK+gluVhLN2YkBPX+/1wkwyUiDKnxRh15579WoOIyVWnoyIf3yGI9REw== + dependencies: + "@eslint-community/eslint-utils" "^4.7.0" + "@typescript-eslint/scope-manager" "8.32.0" + "@typescript-eslint/types" "8.32.0" + "@typescript-eslint/typescript-estree" "8.32.0" + +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== + dependencies: + "@typescript-eslint/types" "7.18.0" + eslint-visitor-keys "^3.4.3" + +"@typescript-eslint/visitor-keys@8.32.0": + version "8.32.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-8.32.0.tgz#0cca2cac046bc71cc40ce8214bac2850d6ecf4a6" + integrity sha512-1rYQTCLFFzOI5Nl0c8LUpJT8HxpwVRn9E4CkMsYfuN6ctmQqExjSTzzSk0Tz2apmXy7WU6/6fyaZVVA/thPN+w== + dependencies: + "@typescript-eslint/types" "8.32.0" + eslint-visitor-keys "^4.2.0" + +"@ungap/structured-clone@^1.2.0": + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== + +"@verdaccio/auth@8.0.0-next-8.1": + version "8.0.0-next-8.1" + resolved "https://registry.yarnpkg.com/@verdaccio/auth/-/auth-8.0.0-next-8.1.tgz#0d0f1f1cc1271989de4ea36fb5439053e791e26f" + integrity sha512-sPmHdnYuRSMgABCsTJEfz8tb/smONsWVg0g4KK2QycyYZ/A+RwZLV1JLiQb4wzu9zvS0HSloqWqkWlyNHW3mtw== + dependencies: + "@verdaccio/config" "8.0.0-next-8.1" + "@verdaccio/core" "8.0.0-next-8.1" + "@verdaccio/loaders" "8.0.0-next-8.1" + "@verdaccio/logger" "8.0.0-next-8.1" + "@verdaccio/signature" "8.0.0-next-8.0" + "@verdaccio/utils" "7.0.1-next-8.1" + debug "4.3.7" + lodash "4.17.21" + verdaccio-htpasswd "13.0.0-next-8.1" + +"@verdaccio/commons-api@10.2.0": + version "10.2.0" + resolved "https://registry.yarnpkg.com/@verdaccio/commons-api/-/commons-api-10.2.0.tgz#3b684c31749837b0574375bb2e10644ecea9fcca" + integrity sha512-F/YZANu4DmpcEV0jronzI7v2fGVWkQ5Mwi+bVmV+ACJ+EzR0c9Jbhtbe5QyLUuzR97t8R5E/Xe53O0cc2LukdQ== + dependencies: + http-errors "2.0.0" + http-status-codes "2.2.0" + +"@verdaccio/config@8.0.0-next-8.1": + version "8.0.0-next-8.1" + resolved "https://registry.yarnpkg.com/@verdaccio/config/-/config-8.0.0-next-8.1.tgz#2ad84eb1d81516c3c9206b01e6f412be7c51611e" + integrity sha512-goDVOH4e8xMUxjHybJpi5HwIecVFqzJ9jeNFrRUgtUUn0PtFuNMHgxOeqDKRVboZhc5HK90yed8URK/1O6VsUw== + dependencies: + "@verdaccio/core" "8.0.0-next-8.1" + "@verdaccio/utils" "7.0.1-next-8.1" + debug "4.3.7" + js-yaml "4.1.0" + lodash "4.17.21" + minimatch "7.4.6" + +"@verdaccio/core@8.0.0-next-8.1": + version "8.0.0-next-8.1" + resolved "https://registry.yarnpkg.com/@verdaccio/core/-/core-8.0.0-next-8.1.tgz#ec6f4efe15c3ddfe9730b8bd5d8d159f30979ff5" + integrity sha512-kQRCB2wgXEh8H88G51eQgAFK9IxmnBtkQ8sY5FbmB6PbBkyHrbGcCp+2mtRqqo36j0W1VAlfM3XzoknMy6qQnw== + dependencies: + ajv "8.17.1" + core-js "3.37.1" + http-errors "2.0.0" + http-status-codes "2.3.0" + process-warning "1.0.0" + semver "7.6.3" + +"@verdaccio/file-locking@10.3.1": + version "10.3.1" + resolved "https://registry.yarnpkg.com/@verdaccio/file-locking/-/file-locking-10.3.1.tgz#cfc2436e0715954e0965f97dfcd87381d116f749" + integrity sha512-oqYLfv3Yg3mAgw9qhASBpjD50osj2AX4IwbkUtyuhhKGyoFU9eZdrbeW6tpnqUnj6yBMtAPm2eGD4BwQuX400g== + dependencies: + lockfile "1.0.4" + +"@verdaccio/file-locking@13.0.0-next-8.0": + version "13.0.0-next-8.0" + resolved "https://registry.yarnpkg.com/@verdaccio/file-locking/-/file-locking-13.0.0-next-8.0.tgz#87c393c211915ca9fef4fefb9dc48643c89fbe4b" + integrity sha512-28XRwpKiE3Z6KsnwE7o8dEM+zGWOT+Vef7RVJyUlG176JVDbGGip3HfCmFioE1a9BklLyGEFTu6D69BzfbRkzA== + dependencies: + lockfile "1.0.4" + +"@verdaccio/loaders@8.0.0-next-8.1": + version "8.0.0-next-8.1" + resolved "https://registry.yarnpkg.com/@verdaccio/loaders/-/loaders-8.0.0-next-8.1.tgz#bc9ff23ecaf3fbbae99ae405ee1521a4a53d0dc9" + integrity sha512-mqGCUBs862g8mICZwX8CG92p1EZ1Un0DJ2DB7+iVu2TYaEeKoHoIdafabVdiYrbOjLcAOOBrMKE1Wnn14eLxpA== + dependencies: + "@verdaccio/logger" "8.0.0-next-8.1" + debug "4.3.7" + lodash "4.17.21" + +"@verdaccio/local-storage-legacy@11.0.2": + version "11.0.2" + resolved "https://registry.yarnpkg.com/@verdaccio/local-storage-legacy/-/local-storage-legacy-11.0.2.tgz#facfec7f355892c8248fd69a16d735c0ec26a44e" + integrity sha512-7AXG7qlcVFmF+Nue2oKaraprGRtaBvrQIOvc/E89+7hAe399V01KnZI6E/ET56u7U9fq0MSlp92HBcdotlpUXg== + dependencies: + "@verdaccio/commons-api" "10.2.0" + "@verdaccio/file-locking" "10.3.1" + "@verdaccio/streams" "10.2.1" + async "3.2.4" + debug "4.3.4" + lodash "4.17.21" + lowdb "1.0.0" + mkdirp "1.0.4" + +"@verdaccio/logger-7@8.0.0-next-8.1": + version "8.0.0-next-8.1" + resolved "https://registry.yarnpkg.com/@verdaccio/logger-7/-/logger-7-8.0.0-next-8.1.tgz#1f6d5a88657e12cd5b3dcb8980eb940c7ef38ef5" + integrity sha512-V+/B1Wnct3IZ90q6HkI1a3dqbS0ds7s/5WPrS5cmBeLEw78/OGgF76XkhI2+lett7Un1CjVow7mcebOWcZ/Sqw== + dependencies: + "@verdaccio/logger-commons" "8.0.0-next-8.1" + pino "7.11.0" + +"@verdaccio/logger-commons@8.0.0-next-8.1": + version "8.0.0-next-8.1" + resolved "https://registry.yarnpkg.com/@verdaccio/logger-commons/-/logger-commons-8.0.0-next-8.1.tgz#d134170e5951e6b26a742dc546c81db449dc6117" + integrity sha512-jCge//RT4uaK7MarhpzcJeJ5Uvtu/DbJ1wvJQyGiFe+9AvxDGm3EUFXvawLFZ0lzYhmLt1nvm7kevcc3vOm2ZQ== + dependencies: + "@verdaccio/core" "8.0.0-next-8.1" + "@verdaccio/logger-prettify" "8.0.0-next-8.0" + colorette "2.0.20" + debug "4.3.7" + +"@verdaccio/logger-prettify@8.0.0-next-8.0": + version "8.0.0-next-8.0" + resolved "https://registry.yarnpkg.com/@verdaccio/logger-prettify/-/logger-prettify-8.0.0-next-8.0.tgz#d728ffac1a94d4a2c9be61eb8acabb722ee75dbf" + integrity sha512-7mAFHZF2NPTubrOXYp2+fbMjRW5MMWXMeS3LcpupMAn5uPp6jkKEM8NC4IVJEevC5Ph4vPVZqpoPDpgXHEaV3Q== + dependencies: + colorette "2.0.20" + dayjs "1.11.13" + lodash "4.17.21" + pino-abstract-transport "1.1.0" + sonic-boom "3.8.0" + +"@verdaccio/logger@8.0.0-next-8.1": + version "8.0.0-next-8.1" + resolved "https://registry.yarnpkg.com/@verdaccio/logger/-/logger-8.0.0-next-8.1.tgz#ee7ce72070f096e0d6862828334def06d2bfa7f6" + integrity sha512-w5kR0/umQkfH2F4PK5Fz9T6z3xz+twewawKLPTUfAgrVAOiWxcikGhhcHWhSGiJ0lPqIa+T0VYuLWMeVeDirGw== + dependencies: + "@verdaccio/logger-commons" "8.0.0-next-8.1" + pino "8.17.2" + +"@verdaccio/middleware@8.0.0-next-8.1": + version "8.0.0-next-8.1" + resolved "https://registry.yarnpkg.com/@verdaccio/middleware/-/middleware-8.0.0-next-8.1.tgz#ec2fbb39de3b053ce37c9da2d07ef1873b7ed6f4" + integrity sha512-GpAdJYky1WmOERpxPoCkVSwTTJIsVAjqf2a2uQNvi7R3UZhs059JKhWcZjJMVCGV0uz9xgQvtb3DEuYGHqyaOg== + dependencies: + "@verdaccio/config" "8.0.0-next-8.1" + "@verdaccio/core" "8.0.0-next-8.1" + "@verdaccio/url" "13.0.0-next-8.1" + "@verdaccio/utils" "7.0.1-next-8.1" + debug "4.3.7" + express "4.21.0" + express-rate-limit "5.5.1" + lodash "4.17.21" + lru-cache "7.18.3" + mime "2.6.0" + +"@verdaccio/search-indexer@8.0.0-next-8.0": + version "8.0.0-next-8.0" + resolved "https://registry.yarnpkg.com/@verdaccio/search-indexer/-/search-indexer-8.0.0-next-8.0.tgz#a0250fe776ebfe86d32e7f78c68f1c8e94010a08" + integrity sha512-VS9axVt8XAueiPceVCgaj9nlvYj5s/T4MkAILSf2rVZeFFOMUyxU3mddUCajSHzL+YpqCuzLLL9865sRRzOJ9w== + +"@verdaccio/signature@8.0.0-next-8.0": + version "8.0.0-next-8.0" + resolved "https://registry.yarnpkg.com/@verdaccio/signature/-/signature-8.0.0-next-8.0.tgz#66983d04c45ad98865671aeb5b3b5f0cb60d570d" + integrity sha512-klcc2UlCvQxXDV65Qewo2rZOfv7S1y8NekS/8uurSaCTjU35T+fz+Pbqz1S9XK9oQlMp4vCQ7w3iMPWQbvphEQ== + dependencies: + debug "4.3.7" + jsonwebtoken "9.0.2" + +"@verdaccio/streams@10.2.1": + version "10.2.1" + resolved "https://registry.yarnpkg.com/@verdaccio/streams/-/streams-10.2.1.tgz#9443d24d4f17672b8f8c8e147690557918ed2bcb" + integrity sha512-OojIG/f7UYKxC4dYX8x5ax8QhRx1b8OYUAMz82rUottCuzrssX/4nn5QE7Ank0DUSX3C9l/HPthc4d9uKRJqJQ== + +"@verdaccio/tarball@13.0.0-next-8.1": + version "13.0.0-next-8.1" + resolved "https://registry.yarnpkg.com/@verdaccio/tarball/-/tarball-13.0.0-next-8.1.tgz#c693787a5fd4387ea380ebc2c3d915acdb17e454" + integrity sha512-58uimU2Bqt9+s+9ixy7wK/nPCqbOXhhhr/MQjl+otIlsUhSeATndhFzEctz/W+4MhUDg0tUnE9HC2yeNHHAo1Q== + dependencies: + "@verdaccio/core" "8.0.0-next-8.1" + "@verdaccio/url" "13.0.0-next-8.1" + "@verdaccio/utils" "7.0.1-next-8.1" + debug "4.3.7" + gunzip-maybe "^1.4.2" + lodash "4.17.21" + tar-stream "^3.1.7" + +"@verdaccio/ui-theme@8.0.0-next-8.1": + version "8.0.0-next-8.1" + resolved "https://registry.yarnpkg.com/@verdaccio/ui-theme/-/ui-theme-8.0.0-next-8.1.tgz#045f01e59a804faf254157ad666e77e933d92bb0" + integrity sha512-9PxV8+jE2Tr+iy9DQW/bzny4YqOlW0mCZ9ct6jhcUW4GdfzU//gY2fBN/DDtQVmfbTy8smuj4Enyv5f0wCsnYg== + +"@verdaccio/url@13.0.0-next-8.1": + version "13.0.0-next-8.1" + resolved "https://registry.yarnpkg.com/@verdaccio/url/-/url-13.0.0-next-8.1.tgz#97894f18e2f162dfef7246d99adc2cddd6220d54" + integrity sha512-h6pkJf+YtogImKgOrmPP9UVG3p3gtb67gqkQU0bZnK+SEKQt6Rkek/QvtJ8MbmciagYS18bDhpI8DxqLHjDfZQ== + dependencies: + "@verdaccio/core" "8.0.0-next-8.1" + debug "4.3.7" + lodash "4.17.21" + validator "13.12.0" + +"@verdaccio/utils@7.0.1-next-8.1": + version "7.0.1-next-8.1" + resolved "https://registry.yarnpkg.com/@verdaccio/utils/-/utils-7.0.1-next-8.1.tgz#21916f932652e445750be66ebec0ba89aff015c1" + integrity sha512-cyJdRrVa+8CS7UuIQb3K3IJFjMe64v38tYiBnohSmhRbX7dX9IT3jWbjrwkqWh4KeS1CS6BYENrGG1evJ2ggrQ== + dependencies: + "@verdaccio/core" "8.0.0-next-8.1" + lodash "4.17.21" + minimatch "7.4.6" + semver "7.6.3" + +"@yarnpkg/lockfile@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@yarnpkg/lockfile/-/lockfile-1.1.0.tgz#e77a97fbd345b76d83245edcd17d393b1b41fb31" + integrity sha512-GpSwvyXOcOOlV70vbnzjj4fW5xW/FdUF6nQEt1ENy7m4ZCczi1+/buVUPAqmGfqznsORNFzUMjctTIp8a9tuCQ== + +"@yarnpkg/parsers@3.0.0-rc.46": + version "3.0.0-rc.46" + resolved "https://registry.yarnpkg.com/@yarnpkg/parsers/-/parsers-3.0.0-rc.46.tgz#03f8363111efc0ea670e53b0282cd3ef62de4e01" + integrity sha512-aiATs7pSutzda/rq8fnuPwTglyVwjM22bNnK2ZgjrpAjQHSSl3lztd2f9evst1W/qnC58DRz7T7QndUDumAR4Q== + dependencies: + js-yaml "^3.10.0" + tslib "^2.4.0" + +"@zkochan/js-yaml@0.0.7": + version "0.0.7" + resolved "https://registry.yarnpkg.com/@zkochan/js-yaml/-/js-yaml-0.0.7.tgz#4b0cb785220d7c28ce0ec4d0804deb5d821eae89" + integrity sha512-nrUSn7hzt7J6JWgWGz78ZYI8wj+gdIJdk0Ynjpp8l+trkn58Uqsf6RYrYkEK+3X18EX+TNdtJI0WxAtc+L84SQ== + dependencies: + argparse "^2.0.1" + +JSONStream@1.3.5, JSONStream@^1.3.5: + version "1.3.5" + resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" + integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ== + dependencies: + jsonparse "^1.2.0" + through ">=2.2.7 <3" + +abab@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/abab/-/abab-2.0.6.tgz#41b80f2c871d19686216b82309231cfd3cb3d291" + integrity sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA== + +abort-controller@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" + integrity sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg== + dependencies: + event-target-shim "^5.0.0" + +accepts@~1.3.8: + version "1.3.8" + resolved "https://registry.yarnpkg.com/accepts/-/accepts-1.3.8.tgz#0bf0be125b67014adcb0b0921e62db7bffe16b2e" + integrity sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw== + dependencies: + mime-types "~2.1.34" + negotiator "0.6.3" + +acorn-globals@^7.0.0: + version "7.0.1" + resolved "https://registry.yarnpkg.com/acorn-globals/-/acorn-globals-7.0.1.tgz#0dbf05c44fa7c94332914c02066d5beff62c40c3" + integrity sha512-umOSDSDrfHbTNPuNpC2NSnnA3LUrqpevPb4T9jRx4MagXNS0rs+gwiTcAvqCRmsD6utzsrzNt+ebm00SNWiC3Q== + dependencies: + acorn "^8.1.0" + acorn-walk "^8.0.2" + +acorn-jsx@^5.3.2: + version "5.3.2" + resolved "https://registry.yarnpkg.com/acorn-jsx/-/acorn-jsx-5.3.2.tgz#7ed5bb55908b3b2f1bc55c6af1653bada7f07937" + integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== + +acorn-walk@^8.0.2, acorn-walk@^8.1.1: + version "8.3.4" + resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7" + integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g== + dependencies: + acorn "^8.11.0" + +acorn@^8.1.0, acorn@^8.11.0, acorn@^8.4.1, acorn@^8.5.0, acorn@^8.8.1, acorn@^8.9.0: + version "8.14.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== + +address@^1.0.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/address/-/address-1.2.2.tgz#2b5248dac5485a6390532c6a517fda2e3faac89e" + integrity sha512-4B/qKCfeE/ODUaAUpSwfzazo5x29WD4r3vXiWsB7I2mSDAihwEqKO+g8GELZUQSSAo5e1XTYh3ZVfLyxBc12nA== + +agent-base@6: + version "6.0.2" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-6.0.2.tgz#49fff58577cfee3f37176feab4c22e00f86d7f77" + integrity sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ== + dependencies: + debug "4" + +ajv@8.17.1, ajv@^8.11.0: + version "8.17.1" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.17.1.tgz#37d9a5c776af6bc92d7f4f9510eba4c0a60d11a6" + integrity sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g== + dependencies: + fast-deep-equal "^3.1.3" + fast-uri "^3.0.1" + json-schema-traverse "^1.0.0" + require-from-string "^2.0.2" + +ajv@^6.12.4: + version "6.12.6" + resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4" + integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g== + dependencies: + fast-deep-equal "^3.1.1" + fast-json-stable-stringify "^2.0.0" + json-schema-traverse "^0.4.1" + uri-js "^4.2.2" + +ansi-colors@^4.1.1: + version "4.1.3" + resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" + integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== + +ansi-escapes@^4.2.1, ansi-escapes@^4.3.2: + version "4.3.2" + resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" + integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== + dependencies: + type-fest "^0.21.3" + +ansi-regex@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" + integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== + +ansi-styles@^4.0.0, ansi-styles@^4.1.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" + integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== + dependencies: + color-convert "^2.0.1" + +ansi-styles@^5.0.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b" + integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== + +anymatch@^3.0.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/anymatch/-/anymatch-3.1.3.tgz#790c58b19ba1720a84205b57c618d5ad8524973e" + integrity sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw== + dependencies: + normalize-path "^3.0.0" + picomatch "^2.0.4" + +apache-md5@1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/apache-md5/-/apache-md5-1.1.8.tgz#ea79c6feb03abfed42b2830dde06f75df5e3bbd9" + integrity sha512-FCAJojipPn0bXjuEpjOOOMN8FZDkxfWWp4JGN9mifU2IhxvKyXZYqpzPHdnTSUpmPDy+tsslB6Z1g+Vg6nVbYA== + +arch@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" + integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== + +arg@^4.1.0: + version "4.1.3" + resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" + integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== + +argparse@^1.0.7: + version "1.0.10" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" + integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg== + dependencies: + sprintf-js "~1.0.2" + +argparse@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" + integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== + +array-flatten@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" + integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== + +array-ify@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece" + integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng== + +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + +arrify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d" + integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA== + +asn1@~0.2.3: + version "0.2.6" + resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" + integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== + dependencies: + safer-buffer "~2.1.0" + +assert-plus@1.0.0, assert-plus@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" + integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== + +async@3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" + integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== + +async@3.2.6, async@^3.2.3: + version "3.2.6" + resolved "https://registry.yarnpkg.com/async/-/async-3.2.6.tgz#1b0728e14929d51b85b449b7f06e27c1145e38ce" + integrity sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA== + +asynckit@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" + integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== + +atomic-sleep@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/atomic-sleep/-/atomic-sleep-1.0.0.tgz#eb85b77a601fc932cfe432c5acd364a9e2c9075b" + integrity sha512-kNOjDqAh7px0XWNI+4QbzoiR/nTkHAWNud2uvnJquD1/x5a7EQZMJT0AczqK0Qn67oY/TTQ1LbUKajZpp3I9tQ== + +aws-sign2@~0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" + integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== + +aws4@^1.8.0: + version "1.13.2" + resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.13.2.tgz#0aa167216965ac9474ccfa83892cfb6b3e1e52ef" + integrity sha512-lHe62zvbTB5eEABUVi/AwVh0ZKY9rMMDhmm+eeyuuUQbQ3+J+fONVQOZyj+DdrvD4BY33uYniyRJ4UJIaSKAfw== + +axios@^1.7.4: + version "1.9.0" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.9.0.tgz#25534e3b72b54540077d33046f77e3b8d7081901" + integrity sha512-re4CqKTJaURpzbLHtIi6XpDv20/CnpXOtjRY5/CU32L8gU8ek9UIivcfvSWvmKEngmVbrUtPpdDwWDWL7DNHvg== + dependencies: + follow-redirects "^1.15.6" + form-data "^4.0.0" + proxy-from-env "^1.1.0" + +b4a@^1.6.4: + version "1.6.7" + resolved "https://registry.yarnpkg.com/b4a/-/b4a-1.6.7.tgz#a99587d4ebbfbd5a6e3b21bdb5d5fa385767abe4" + integrity sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg== + +babel-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-29.7.0.tgz#f4369919225b684c56085998ac63dbd05be020d5" + integrity sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg== + dependencies: + "@jest/transform" "^29.7.0" + "@types/babel__core" "^7.1.14" + babel-plugin-istanbul "^6.1.1" + babel-preset-jest "^29.6.3" + chalk "^4.0.0" + graceful-fs "^4.2.9" + slash "^3.0.0" + +babel-plugin-const-enum@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/babel-plugin-const-enum/-/babel-plugin-const-enum-1.2.0.tgz#3d25524106f68f081e187829ba736b251c289861" + integrity sha512-o1m/6iyyFnp9MRsK1dHF3bneqyf3AlM2q3A/YbgQr2pCat6B6XJVDv2TXqzfY2RYUi4mak6WAksSBPlyYGx9dg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@babel/plugin-syntax-typescript" "^7.3.3" + "@babel/traverse" "^7.16.0" + +babel-plugin-istanbul@^6.1.1: + version "6.1.1" + resolved "https://registry.yarnpkg.com/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz#fa88ec59232fd9b4e36dbbc540a8ec9a9b47da73" + integrity sha512-Y1IQok9821cC9onCx5otgFfRm7Lm+I+wwxOx738M/WLPZ9Q42m4IG5W0FNX8WLL2gYMZo3JkuXIH2DOpWM+qwA== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + "@istanbuljs/load-nyc-config" "^1.0.0" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-instrument "^5.0.4" + test-exclude "^6.0.0" + +babel-plugin-jest-hoist@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-plugin-jest-hoist/-/babel-plugin-jest-hoist-29.6.3.tgz#aadbe943464182a8922c3c927c3067ff40d24626" + integrity sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg== + dependencies: + "@babel/template" "^7.3.3" + "@babel/types" "^7.3.3" + "@types/babel__core" "^7.1.14" + "@types/babel__traverse" "^7.0.6" + +babel-plugin-macros@^2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" + integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== + dependencies: + "@babel/runtime" "^7.7.2" + cosmiconfig "^6.0.0" + resolve "^1.12.0" + +babel-plugin-polyfill-corejs2@^0.4.10: + version "0.4.13" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz#7d445f0e0607ebc8fb6b01d7e8fb02069b91dd8b" + integrity sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g== + dependencies: + "@babel/compat-data" "^7.22.6" + "@babel/helper-define-polyfill-provider" "^0.6.4" + semver "^6.3.1" + +babel-plugin-polyfill-corejs3@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz#4e4e182f1bb37c7ba62e2af81d8dd09df31344f6" + integrity sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.3" + core-js-compat "^3.40.0" + +babel-plugin-polyfill-regenerator@^0.6.1: + version "0.6.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz#428c615d3c177292a22b4f93ed99e358d7906a9b" + integrity sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw== + dependencies: + "@babel/helper-define-polyfill-provider" "^0.6.4" + +babel-plugin-transform-typescript-metadata@^0.3.1: + version "0.3.2" + resolved "https://registry.yarnpkg.com/babel-plugin-transform-typescript-metadata/-/babel-plugin-transform-typescript-metadata-0.3.2.tgz#7a327842d8c36ffe07ee1b5276434e56c297c9b7" + integrity sha512-mWEvCQTgXQf48yDqgN7CH50waTyYBeP2Lpqx4nNWab9sxEpdXVeKgfj1qYI2/TgUPQtNFZ85i3PemRtnXVYYJg== + dependencies: + "@babel/helper-plugin-utils" "^7.0.0" + +babel-preset-current-node-syntax@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" + integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== + dependencies: + "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/plugin-syntax-bigint" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.3" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" + +babel-preset-jest@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/babel-preset-jest/-/babel-preset-jest-29.6.3.tgz#fa05fa510e7d493896d7b0dd2033601c840f171c" + integrity sha512-0B3bhxR6snWXJZtR/RliHTDPRgn1sNHOR0yVtq/IiQFyuOVjFS+wuio/R4gSNkyYmKmJB4wGZv2NZanmKmTnNA== + dependencies: + babel-plugin-jest-hoist "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + +balanced-match@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" + integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== + +bare-events@^2.2.0: + version "2.5.4" + resolved "https://registry.yarnpkg.com/bare-events/-/bare-events-2.5.4.tgz#16143d435e1ed9eafd1ab85f12b89b3357a41745" + integrity sha512-+gFfDkR8pj4/TrWCGUGWmJIkBwuxPS5F+a5yWjOHQt2hHvNZd5YLzadjmDUtFmMM4y429bnKLa8bYBMHcYdnQA== + +base64-js@^1.3.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" + integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== + +bcrypt-pbkdf@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" + integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== + dependencies: + tweetnacl "^0.14.3" + +bcryptjs@2.4.3: + version "2.4.3" + resolved "https://registry.yarnpkg.com/bcryptjs/-/bcryptjs-2.4.3.tgz#9ab5627b93e60621ff7cdac5da9733027df1d0cb" + integrity sha512-V/Hy/X9Vt7f3BbPJEi8BdVFMByHi+jNXrYkW3huaybV/kQ0KJg0Y6PkEMbn+zeT+i+SiKZ/HMqJGIIt4LZDqNQ== + +before-after-hook@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-3.0.2.tgz#d5665a5fa8b62294a5aa0a499f933f4a1016195d" + integrity sha512-Nik3Sc0ncrMK4UUdXQmAnRtzmNQTAAXmXIopizwZ1W1t8QmfJj+zL4OA2I7XPTPW5z5TDqv4hRo/JzouDJnX3A== + +bin-check@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bin-check/-/bin-check-4.1.0.tgz#fc495970bdc88bb1d5a35fc17e65c4a149fc4a49" + integrity sha512-b6weQyEUKsDGFlACWSIOfveEnImkJyK/FGW6FAG42loyoquvjdtOIqO6yBFzHyqyVVhNgNkQxxx09SFLK28YnA== + dependencies: + execa "^0.7.0" + executable "^4.1.0" + +bin-version-check@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/bin-version-check/-/bin-version-check-5.1.0.tgz#788e80e036a87313f8be7908bc20e5abe43f0837" + integrity sha512-bYsvMqJ8yNGILLz1KP9zKLzQ6YpljV3ln1gqhuLkUtyfGi3qXKGuK2p+U4NAvjVFzDFiBBtOpCOSFNuYYEGZ5g== + dependencies: + bin-version "^6.0.0" + semver "^7.5.3" + semver-truncate "^3.0.0" + +bin-version@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/bin-version/-/bin-version-6.0.0.tgz#08ecbe5fc87898b441425e145f9e105064d00315" + integrity sha512-nk5wEsP4RiKjG+vF+uG8lFsEn4d7Y6FVDamzzftSunXOoOcOOkzcWdKVlGgFFwlUQCj63SgnUkLLGF8v7lufhw== + dependencies: + execa "^5.0.0" + find-versions "^5.0.0" + +bl@^4.0.3: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a" + integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w== + dependencies: + buffer "^5.5.0" + inherits "^2.0.4" + readable-stream "^3.4.0" + +body-parser@1.20.3: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== + dependencies: + bytes "3.1.2" + content-type "~1.0.5" + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + http-errors "2.0.0" + iconv-lite "0.4.24" + on-finished "2.4.1" + qs "6.13.0" + raw-body "2.5.2" + type-is "~1.6.18" + unpipe "1.0.0" + +brace-expansion@^1.1.7: + version "1.1.11" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" + integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== + dependencies: + balanced-match "^1.0.0" + concat-map "0.0.1" + +brace-expansion@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.1.tgz#1edc459e0f0c548486ecf9fc99f2221364b9a0ae" + integrity sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA== + dependencies: + balanced-match "^1.0.0" + +braces@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789" + integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA== + dependencies: + fill-range "^7.1.1" + +browserify-zlib@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/browserify-zlib/-/browserify-zlib-0.1.4.tgz#bb35f8a519f600e0fa6b8485241c979d0141fb2d" + integrity sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ== + dependencies: + pako "~0.2.0" + +browserslist@^4.24.0, browserslist@^4.24.4: + version "4.24.5" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.5.tgz#aa0f5b8560fe81fde84c6dcb38f759bafba0e11b" + integrity sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw== + dependencies: + caniuse-lite "^1.0.30001716" + electron-to-chromium "^1.5.149" + node-releases "^2.0.19" + update-browserslist-db "^1.1.3" + +bs-logger@0.x: + version "0.2.6" + resolved "https://registry.yarnpkg.com/bs-logger/-/bs-logger-0.2.6.tgz#eb7d365307a72cf974cc6cda76b68354ad336bd8" + integrity sha512-pd8DCoxmbgc7hyPKOvxtqNcjYoOsABPQdcCUjGp3d42VR2CX1ORhk2A87oqqu5R1kk+76nsxZupkmyd+MVtCog== + dependencies: + fast-json-stable-stringify "2.x" + +bser@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" + integrity sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ== + dependencies: + node-int64 "^0.4.0" + +buffer-equal-constant-time@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819" + integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA== + +buffer-from@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.2.tgz#2b146a6fd72e80b4f55d255f35ed59a3a9a41bd5" + integrity sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ== + +buffer@^5.5.0: + version "5.7.1" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" + integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.1.13" + +buffer@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" + integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== + dependencies: + base64-js "^1.3.1" + ieee754 "^1.2.1" + +bytes@3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" + integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== + +cacheable-lookup@^5.0.3: + version "5.0.4" + resolved "https://registry.yarnpkg.com/cacheable-lookup/-/cacheable-lookup-5.0.4.tgz#5a6b865b2c44357be3d5ebc2a467b032719a7005" + integrity sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA== + +cacheable-request@^7.0.2: + version "7.0.4" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-7.0.4.tgz#7a33ebf08613178b403635be7b899d3e69bbe817" + integrity sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^4.0.0" + lowercase-keys "^2.0.0" + normalize-url "^6.0.1" + responselike "^2.0.0" + +call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== + dependencies: + es-errors "^1.3.0" + function-bind "^1.1.2" + +call-bound@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" + +callsites@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73" + integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ== + +camelcase-keys@^6.2.2: + version "6.2.2" + resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0" + integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg== + dependencies: + camelcase "^5.3.1" + map-obj "^4.0.0" + quick-lru "^4.0.1" + +camelcase@^5.3.1: + version "5.3.1" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320" + integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg== + +camelcase@^6.2.0: + version "6.3.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" + integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== + +caniuse-lite@^1.0.30001716: + version "1.0.30001717" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001717.tgz#5d9fec5ce09796a1893013825510678928aca129" + integrity sha512-auPpttCq6BDEG8ZAuHJIplGw6GODhjw+/11e7IjpnYCxZcW/ONgPs0KVBJ0d1bY3e2+7PRe5RCLyP+PfwVgkYw== + +caseless@~0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" + integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== + +chalk@^4.0.0, chalk@^4.0.2, chalk@^4.1.0, chalk@^4.1.2: + version "4.1.2" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" + integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + +char-regex@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/char-regex/-/char-regex-1.0.2.tgz#d744358226217f981ed58f479b1d6bcc29545dcf" + integrity sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw== + +chardet@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" + integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== + +ci-info@^3.2.0: + version "3.9.0" + resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.9.0.tgz#4279a62028a7b1f262f3473fc9605f5e218c59b4" + integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== + +cjs-module-lexer@^1.0.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" + integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== + +cli-cursor@3.1.0, cli-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" + integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== + dependencies: + restore-cursor "^3.1.0" + +cli-spinners@2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.6.1.tgz#adc954ebe281c37a6319bfa401e6dd2488ffb70d" + integrity sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g== + +cli-spinners@^2.5.0: + version "2.9.2" + resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" + integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== + +cli-width@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/cli-width/-/cli-width-4.1.0.tgz#42daac41d3c254ef38ad8ac037672130173691c5" + integrity sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ== + +clipanion@4.0.0-rc.4: + version "4.0.0-rc.4" + resolved "https://registry.yarnpkg.com/clipanion/-/clipanion-4.0.0-rc.4.tgz#7191a940e47ef197e5f18c9cbbe419278b5f5903" + integrity sha512-CXkMQxU6s9GklO/1f714dkKBMu1lopS1WFF0B8o4AxPykR1hpozxSiUZ5ZUeBjfPgCWqbcNOtZVFhB8Lkfp1+Q== + dependencies: + typanion "^3.8.0" + +clipanion@^3.2.1: + version "3.2.1" + resolved "https://registry.yarnpkg.com/clipanion/-/clipanion-3.2.1.tgz#2887db4cb232e80ba57cf19347a4e3a1c4a74133" + integrity sha512-dYFdjLb7y1ajfxQopN05mylEpK9ZX0sO1/RfMXdfmwjlIsPkbh4p7A682x++zFPLDCo1x3p82dtljHf5cW2LKA== + dependencies: + typanion "^3.8.0" + +cliui@^8.0.1: + version "8.0.1" + resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa" + integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ== + dependencies: + string-width "^4.2.0" + strip-ansi "^6.0.1" + wrap-ansi "^7.0.0" + +clone-response@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.3.tgz#af2032aa47816399cf5f0a1d0db902f517abb8c3" + integrity sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA== + dependencies: + mimic-response "^1.0.0" + +clone@^1.0.2: + version "1.0.4" + resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" + integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== + +co@^4.6.0: + version "4.6.0" + resolved "https://registry.yarnpkg.com/co/-/co-4.6.0.tgz#6ea6bdf3d853ae54ccb8e47bfa0bf3f9031fb184" + integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== + +collect-v8-coverage@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/collect-v8-coverage/-/collect-v8-coverage-1.0.2.tgz#c0b29bcd33bcd0779a1344c2136051e6afd3d9e9" + integrity sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q== + +color-convert@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" + integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== + dependencies: + color-name "~1.1.4" + +color-name@~1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" + integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== + +colorette@2.0.20, colorette@^2.0.20: + version "2.0.20" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" + integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== + +columnify@^1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/columnify/-/columnify-1.6.0.tgz#6989531713c9008bb29735e61e37acf5bd553cf3" + integrity sha512-lomjuFZKfM6MSAnV9aCZC9sc0qGbmZdfygNv+nCpqVkSKdCxCklLtd16O0EILGkImHw9ZpHkAnHaB+8Zxq5W6Q== + dependencies: + strip-ansi "^6.0.1" + wcwidth "^1.0.0" + +combined-stream@^1.0.8, combined-stream@~1.0.6: + version "1.0.8" + resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" + integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== + dependencies: + delayed-stream "~1.0.0" + +commander@^8.3.0: + version "8.3.0" + resolved "https://registry.yarnpkg.com/commander/-/commander-8.3.0.tgz#4837ea1b2da67b9c616a67afbb0fafee567bca66" + integrity sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww== + +compare-func@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3" + integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA== + dependencies: + array-ify "^1.0.0" + dot-prop "^5.1.0" + +compressible@~2.0.18: + version "2.0.18" + resolved "https://registry.yarnpkg.com/compressible/-/compressible-2.0.18.tgz#af53cca6b070d4c3c0750fbd77286a6d7cc46fba" + integrity sha512-AF3r7P5dWxL8MxyITRMlORQNaOA2IkAFaTr4k7BUumjPtRpGDTZpl0Pb1XCO6JeDCBdp126Cgs9sMxqSjgYyRg== + dependencies: + mime-db ">= 1.43.0 < 2" + +compression@1.7.5: + version "1.7.5" + resolved "https://registry.yarnpkg.com/compression/-/compression-1.7.5.tgz#fdd256c0a642e39e314c478f6c2cd654edd74c93" + integrity sha512-bQJ0YRck5ak3LgtnpKkiabX5pNF7tMUh1BSy2ZBOTh0Dim0BUu6aPPwByIns6/A5Prh8PufSPerMDUklpzes2Q== + dependencies: + bytes "3.1.2" + compressible "~2.0.18" + debug "2.6.9" + negotiator "~0.6.4" + on-headers "~1.0.2" + safe-buffer "5.2.1" + vary "~1.1.2" + +concat-map@0.0.1: + version "0.0.1" + resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" + integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== + +confusing-browser-globals@^1.0.9: + version "1.0.11" + resolved "https://registry.yarnpkg.com/confusing-browser-globals/-/confusing-browser-globals-1.0.11.tgz#ae40e9b57cdd3915408a2805ebd3a5585608dc81" + integrity sha512-JsPKdmh8ZkmnHxDk55FZ1TqVLvEQTvoByJZRN9jzI0UjxK/QgAmsphz7PGtqgPieQZ/CQcHWXCR7ATDNhGe+YA== + +content-disposition@0.5.4, content-disposition@^0.5.4: + version "0.5.4" + resolved "https://registry.yarnpkg.com/content-disposition/-/content-disposition-0.5.4.tgz#8b82b4efac82512a02bb0b1dcec9d2c5e8eb5bfe" + integrity sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ== + dependencies: + safe-buffer "5.2.1" + +content-type@~1.0.4, content-type@~1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.5.tgz#8b773162656d1d1086784c8f23a54ce6d73d7918" + integrity sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA== + +conventional-changelog-angular@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz#a9a9494c28b7165889144fd5b91573c4aa9ca541" + integrity sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg== + dependencies: + compare-func "^2.0.0" + +conventional-changelog-conventionalcommits@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-5.0.0.tgz#41bdce54eb65a848a4a3ffdca93e92fa22b64a86" + integrity sha512-lCDbA+ZqVFQGUj7h9QBKoIpLhl8iihkO0nCTyRNzuXtcd7ubODpYB04IFy31JloiJgG0Uovu8ot8oxRzn7Nwtw== + dependencies: + compare-func "^2.0.0" + lodash "^4.17.15" + q "^1.5.1" + +conventional-commits-parser@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505" + integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg== + dependencies: + JSONStream "^1.3.5" + is-text-path "^1.0.1" + meow "^8.1.2" + split2 "^3.2.2" + +convert-source-map@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-2.0.0.tgz#4b560f649fc4e918dd0ab75cf4961e8bc882d82a" + integrity sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg== + +cookie-signature@1.0.6: + version "1.0.6" + resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" + integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== + +cookie@0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" + integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== + +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== + +core-js-compat@^3.40.0: + version "3.42.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.42.0.tgz#ce19c29706ee5806e26d3cb3c542d4cfc0ed51bb" + integrity sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ== + dependencies: + browserslist "^4.24.4" + +core-js@3.37.1: + version "3.37.1" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.37.1.tgz#d21751ddb756518ac5a00e4d66499df981a62db9" + integrity sha512-Xn6qmxrQZyB0FFY8E3bgRXei3lWDJHhvI+u0q9TKIYM49G8pAr0FgnnrFRAmsbptZL1yxRADVXn+x5AGsbBfyw== + +core-util-is@1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== + +core-util-is@~1.0.0: + version "1.0.3" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.3.tgz#a6042d3634c2b27e9328f837b965fac83808db85" + integrity sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ== + +cors@2.8.5: + version "2.8.5" + resolved "https://registry.yarnpkg.com/cors/-/cors-2.8.5.tgz#eac11da51592dd86b9f06f6e7ac293b3df875d29" + integrity sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g== + dependencies: + object-assign "^4" + vary "^1" + +cosmiconfig-typescript-loader@^4.0.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz#f3feae459ea090f131df5474ce4b1222912319f9" + integrity sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw== + +cosmiconfig@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-6.0.0.tgz#da4fee853c52f6b1e6935f41c1a2fc50bd4a9982" + integrity sha512-xb3ZL6+L8b9JLLCx3ZdoZy4+2ECphCMo2PwqgP1tlfVq6M6YReyzBJtvWWtbDSpNr9hn96pkCiZqUcFEc+54Qg== + dependencies: + "@types/parse-json" "^4.0.0" + import-fresh "^3.1.0" + parse-json "^5.0.0" + path-type "^4.0.0" + yaml "^1.7.2" + +cosmiconfig@^8.0.0: + version "8.3.6" + resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.3.6.tgz#060a2b871d66dba6c8538ea1118ba1ac16f5fae3" + integrity sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA== + dependencies: + import-fresh "^3.3.0" + js-yaml "^4.1.0" + parse-json "^5.2.0" + path-type "^4.0.0" + +create-jest@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/create-jest/-/create-jest-29.7.0.tgz#a355c5b3cb1e1af02ba177fe7afd7feee49a5320" + integrity sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + exit "^0.1.2" + graceful-fs "^4.2.9" + jest-config "^29.7.0" + jest-util "^29.7.0" + prompts "^2.0.1" + +create-require@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" + integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== + +cross-spawn@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" + integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A== + dependencies: + lru-cache "^4.0.1" + shebang-command "^1.2.0" + which "^1.2.9" + +cross-spawn@^7.0.2, cross-spawn@^7.0.3: + version "7.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" + integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cssom@^0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" + integrity sha512-iKuQcq+NdHqlAcwUY0o/HL69XQrUaQdMjmStJ8JFmUaiiQErlhrmuigkg/CU4E2J0IyUKUrMAgl36TvN67MqTw== + +cssom@~0.3.6: + version "0.3.8" + resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.3.8.tgz#9f1276f5b2b463f2114d3f2c75250af8c1a36f4a" + integrity sha512-b0tGHbfegbhPJpxpiBPU2sCkigAqtM9O121le6bbOlgyV+NyGyCmVfJ6QW9eRjz8CpNfWEOYBIMIGRYkLwsIYg== + +cssstyle@^2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/cssstyle/-/cssstyle-2.3.0.tgz#ff665a0ddbdc31864b09647f34163443d90b0852" + integrity sha512-AZL67abkUzIuvcHqk7c09cezpGNcxUxU4Ioi/05xHk4DQeTkWmGYftIE6ctU6AEt+Gn4n1lDStOtj7FKycP71A== + dependencies: + cssom "~0.3.6" + +dargs@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc" + integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg== + +dashdash@^1.12.0: + version "1.14.1" + resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" + integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== + dependencies: + assert-plus "^1.0.0" + +data-urls@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/data-urls/-/data-urls-3.0.2.tgz#9cf24a477ae22bcef5cd5f6f0bfbc1d2d3be9143" + integrity sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ== + dependencies: + abab "^2.0.6" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + +dayjs@1.11.13: + version "1.11.13" + resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.13.tgz#92430b0139055c3ebb60150aa13e860a4b5a366c" + integrity sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg== + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.7: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== + dependencies: + ms "^2.1.3" + +debug@4.3.4: + version "4.3.4" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" + integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== + dependencies: + ms "2.1.2" + +debug@4.3.7: + version "4.3.7" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" + integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== + dependencies: + ms "^2.1.3" + +decamelize-keys@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8" + integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg== + dependencies: + decamelize "^1.1.0" + map-obj "^1.0.0" + +decamelize@^1.1.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" + integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA== + +decimal.js@^10.4.2: + version "10.5.0" + resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.5.0.tgz#0f371c7cf6c4898ce0afb09836db73cd82010f22" + integrity sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw== + +decompress-response@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" + integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ== + dependencies: + mimic-response "^3.1.0" + +dedent@^1.0.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.6.0.tgz#79d52d6389b1ffa67d2bcef59ba51847a9d503b2" + integrity sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA== + +deep-is@^0.1.3: + version "0.1.4" + resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" + integrity sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ== + +deepmerge@^4.2.2: + version "4.3.1" + resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" + integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== + +defaults@^1.0.3: + version "1.0.4" + resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" + integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== + dependencies: + clone "^1.0.2" + +defer-to-connect@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-2.0.1.tgz#8016bdb4143e4632b77a3449c6236277de520587" + integrity sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg== + +define-lazy-prop@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" + integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== + +delayed-stream@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" + integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== + +depd@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/depd/-/depd-2.0.0.tgz#b696163cc757560d09cf22cc8fad1571b79e76df" + integrity sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw== + +destroy@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.2.0.tgz#4803735509ad8be552934c67df614f94e66fa015" + integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== + +detect-newline@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/detect-newline/-/detect-newline-3.1.0.tgz#576f5dfc63ae1a192ff192d8ad3af6308991b651" + integrity sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA== + +detect-port@^1.5.1: + version "1.6.1" + resolved "https://registry.yarnpkg.com/detect-port/-/detect-port-1.6.1.tgz#45e4073997c5f292b957cb678fb0bb8ed4250a67" + integrity sha512-CmnVc+Hek2egPx1PeTFVta2W78xy2K/9Rkf6cC4T59S50tVnzKj+tnx5mmx5lwvCkujZ4uRrpRSuV+IVs3f90Q== + dependencies: + address "^1.0.1" + debug "4" + +diff-sequences@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921" + integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q== + +diff@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" + integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== + +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + +doctrine@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-3.0.0.tgz#addebead72a6574db783639dc87a121773973961" + integrity sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w== + dependencies: + esutils "^2.0.2" + +domexception@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/domexception/-/domexception-4.0.0.tgz#4ad1be56ccadc86fc76d033353999a8037d03673" + integrity sha512-A2is4PLG+eeSfoTMA95/s4pvAoSo2mKtiM5jlHkAVewmiO8ISFTFKZjH7UAM1Atli/OT/7JHOrJRJiMKUZKYBw== + dependencies: + webidl-conversions "^7.0.0" + +dot-prop@^5.1.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88" + integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q== + dependencies: + is-obj "^2.0.0" + +dotenv-expand@~11.0.6: + version "11.0.7" + resolved "https://registry.yarnpkg.com/dotenv-expand/-/dotenv-expand-11.0.7.tgz#af695aea007d6fdc84c86cd8d0ad7beb40a0bd08" + integrity sha512-zIHwmZPRshsCdpMDyVsqGmgyP0yT8GAgXUnkdAoJisxvf33k7yO6OuoKmcTGuXPWSsm8Oh88nZicRLA9Y0rUeA== + dependencies: + dotenv "^16.4.5" + +dotenv@^16.4.5: + version "16.5.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.5.0.tgz#092b49f25f808f020050051d1ff258e404c78692" + integrity sha512-m/C+AwOAr9/W1UOIZUo232ejMNnJAJtYQjUbHoNTBNTJSvqzzDh7vnrei3o3r3m9blf6ZoDkvcw0VmozNRFJxg== + +dotenv@~10.0.0: + version "10.0.0" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-10.0.0.tgz#3d4227b8fb95f81096cdd2b66653fb2c7085ba81" + integrity sha512-rlBi9d8jpv9Sf1klPjNfFAuWDjKLwTIJJ/VxtoTwIR6hnZxcEOQCZg2oIL3MWBYw5GpUDKOEnND7LXTbIpQ03Q== + +dotenv@~16.4.5: + version "16.4.7" + resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-16.4.7.tgz#0e20c5b82950140aa99be360a8a5f52335f53c26" + integrity sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ== + +dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + +duplexify@^3.5.0, duplexify@^3.6.0: + version "3.7.1" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-3.7.1.tgz#2a4df5317f6ccfd91f86d6fd25d8d8a103b88309" + integrity sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g== + dependencies: + end-of-stream "^1.0.0" + inherits "^2.0.1" + readable-stream "^2.0.0" + stream-shift "^1.0.0" + +duplexify@^4.1.2: + version "4.1.3" + resolved "https://registry.yarnpkg.com/duplexify/-/duplexify-4.1.3.tgz#a07e1c0d0a2c001158563d32592ba58bddb0236f" + integrity sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA== + dependencies: + end-of-stream "^1.4.1" + inherits "^2.0.3" + readable-stream "^3.1.1" + stream-shift "^1.0.2" + +ecc-jsbn@~0.1.1: + version "0.1.2" + resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" + integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== + dependencies: + jsbn "~0.1.0" + safer-buffer "^2.1.0" + +ecdsa-sig-formatter@1.0.11: + version "1.0.11" + resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf" + integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ== + dependencies: + safe-buffer "^5.0.1" + +ee-first@1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" + integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== + +ejs@^3.1.7: + version "3.1.10" + resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.10.tgz#69ab8358b14e896f80cc39e62087b88500c3ac3b" + integrity sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA== + dependencies: + jake "^10.8.5" + +electron-to-chromium@^1.5.149: + version "1.5.150" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.150.tgz#3120bf34453a7a82cb4d9335df20680b2bb40649" + integrity sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA== + +emittery@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" + integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== + +emnapi@^1.2.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/emnapi/-/emnapi-1.4.3.tgz#4541741b963c8c43fa362aba6c9fc2847fd3f65f" + integrity sha512-qeLT07Xt4xNjlDJYtwtO664e44HXDaHnja7vWIy/g3xzZiNOcQh02gNblR6tkqnDzPPhc+dUeSYWbt6PoiYZKQ== + +emoji-regex@^8.0.0: + version "8.0.0" + resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" + integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== + +encodeurl@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== + +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +end-of-stream@^1.0.0, end-of-stream@^1.1.0, end-of-stream@^1.4.1: + version "1.4.4" + resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +enquirer@~2.3.6: + version "2.3.6" + resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" + integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== + dependencies: + ansi-colors "^4.1.1" + +entities@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/entities/-/entities-6.0.0.tgz#09c9e29cb79b0a6459a9b9db9efb418ac5bb8e51" + integrity sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw== + +envinfo@7.14.0: + version "7.14.0" + resolved "https://registry.yarnpkg.com/envinfo/-/envinfo-7.14.0.tgz#26dac5db54418f2a4c1159153a0b2ae980838aae" + integrity sha512-CO40UI41xDQzhLB1hWyqUKgFhs250pNcGbyGKe1l/e4FSaI/+YE4IMG76GDt0In67WLPACIITC+sOi08x4wIvg== + +error-ex@^1.3.1: + version "1.3.2" + resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" + integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== + dependencies: + is-arrayish "^0.2.1" + +es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== + +es-errors@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" + integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== + +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== + dependencies: + es-errors "^1.3.0" + +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== + dependencies: + es-errors "^1.3.0" + get-intrinsic "^1.2.6" + has-tostringtag "^1.0.2" + hasown "^2.0.2" + +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== + +escape-html@~1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" + integrity sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow== + +escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== + +escape-string-regexp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" + integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +escape-string-regexp@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8" + integrity sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw== + +escodegen@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" + integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== + dependencies: + esprima "^4.0.1" + estraverse "^5.2.0" + esutils "^2.0.2" + optionalDependencies: + source-map "~0.6.1" + +eslint-config-prettier@9.0.0: + version "9.0.0" + resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-9.0.0.tgz#eb25485946dd0c66cd216a46232dc05451518d1f" + integrity sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw== + +eslint-scope@^7.2.2: + version "7.2.2" + resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-7.2.2.tgz#deb4f92563390f32006894af62a22dba1c46423f" + integrity sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg== + dependencies: + esrecurse "^4.3.0" + estraverse "^5.2.0" + +eslint-visitor-keys@^3.0.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: + version "3.4.3" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" + integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== + +eslint-visitor-keys@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz#687bacb2af884fcdda8a6e7d65c606f46a14cd45" + integrity sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw== + +eslint@8.57.0: + version "8.57.0" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" + integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@eslint-community/regexpp" "^4.6.1" + "@eslint/eslintrc" "^2.1.4" + "@eslint/js" "8.57.0" + "@humanwhocodes/config-array" "^0.11.14" + "@humanwhocodes/module-importer" "^1.0.1" + "@nodelib/fs.walk" "^1.2.8" + "@ungap/structured-clone" "^1.2.0" + ajv "^6.12.4" + chalk "^4.0.0" + cross-spawn "^7.0.2" + debug "^4.3.2" + doctrine "^3.0.0" + escape-string-regexp "^4.0.0" + eslint-scope "^7.2.2" + eslint-visitor-keys "^3.4.3" + espree "^9.6.1" + esquery "^1.4.2" + esutils "^2.0.2" + fast-deep-equal "^3.1.3" + file-entry-cache "^6.0.1" + find-up "^5.0.0" + glob-parent "^6.0.2" + globals "^13.19.0" + graphemer "^1.4.0" + ignore "^5.2.0" + imurmurhash "^0.1.4" + is-glob "^4.0.0" + is-path-inside "^3.0.3" + js-yaml "^4.1.0" + json-stable-stringify-without-jsonify "^1.0.1" + levn "^0.4.1" + lodash.merge "^4.6.2" + minimatch "^3.1.2" + natural-compare "^1.4.0" + optionator "^0.9.3" + strip-ansi "^6.0.1" + text-table "^0.2.0" + +espree@^9.0.0, espree@^9.6.0, espree@^9.6.1: + version "9.6.1" + resolved "https://registry.yarnpkg.com/espree/-/espree-9.6.1.tgz#a2a17b8e434690a5432f2f8018ce71d331a48c6f" + integrity sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ== + dependencies: + acorn "^8.9.0" + acorn-jsx "^5.3.2" + eslint-visitor-keys "^3.4.1" + +esprima@^4.0.0, esprima@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" + integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== + +esquery@^1.4.0, esquery@^1.4.2: + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== + dependencies: + estraverse "^5.1.0" + +esrecurse@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/esrecurse/-/esrecurse-4.3.0.tgz#7ad7964d679abb28bee72cec63758b1c5d2c9921" + integrity sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag== + dependencies: + estraverse "^5.2.0" + +estraverse@^5.1.0, estraverse@^5.2.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" + integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== + +esutils@^2.0.2: + version "2.0.3" + resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" + integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== + +etag@~1.8.1: + version "1.8.1" + resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" + integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== + +event-target-shim@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/event-target-shim/-/event-target-shim-5.0.1.tgz#5d4d3ebdf9583d63a5333ce2deb7480ab2b05789" + integrity sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ== + +events@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" + integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== + +execa@^0.7.0: + version "0.7.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-0.7.0.tgz#944becd34cc41ee32a63a9faf27ad5a65fc59777" + integrity sha512-RztN09XglpYI7aBBrJCPW95jEH7YF1UEPOoX9yDhUTPdp7mK+CQvnLTuD10BNXZ3byLTu2uehZ8EcKT/4CGiFw== + dependencies: + cross-spawn "^5.0.1" + get-stream "^3.0.0" + is-stream "^1.1.0" + npm-run-path "^2.0.0" + p-finally "^1.0.0" + signal-exit "^3.0.0" + strip-eof "^1.0.0" + +execa@^5.0.0: + version "5.1.1" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" + integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + +executable@^4.1.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" + integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== + dependencies: + pify "^2.2.0" + +exit@^0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/exit/-/exit-0.1.2.tgz#0632638f8d877cc82107d30a0fff1a17cba1cd0c" + integrity sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ== + +expect@^29.0.0, expect@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/expect/-/expect-29.7.0.tgz#578874590dcb3214514084c08115d8aee61e11bc" + integrity sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw== + dependencies: + "@jest/expect-utils" "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + +express-rate-limit@5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/express-rate-limit/-/express-rate-limit-5.5.1.tgz#110c23f6a65dfa96ab468eda95e71697bc6987a2" + integrity sha512-MTjE2eIbHv5DyfuFz4zLYWxpqVhEhkTiwFGuB74Q9CSou2WHO52nlE5y3Zlg6SIsiYUIPj6ifFxnkPz6O3sIUg== + +express@4.21.0: + version "4.21.0" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.0.tgz#d57cb706d49623d4ac27833f1cbc466b668eb915" + integrity sha512-VqcNGcj/Id5ZT1LZ/cfihi3ttTn+NJmkli2eZADigjq29qTlWi/hAQ43t/VLPq8+UX06FCEx3ByOYet6ZFblng== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.3" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.6.0" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.3.1" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.3" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.10" + proxy-addr "~2.0.7" + qs "6.13.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.19.0" + serve-static "1.16.2" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +express@4.21.1: + version "4.21.1" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.1.tgz#9dae5dda832f16b4eec941a4e44aa89ec481b281" + integrity sha512-YSFlK1Ee0/GC8QaO91tHcDxJiE/X4FbpAyQWkxAvG6AXCuR65YzK8ua6D9hvi/TzUfZMpc+BwuM1IPw8fmQBiQ== + dependencies: + accepts "~1.3.8" + array-flatten "1.1.1" + body-parser "1.20.3" + content-disposition "0.5.4" + content-type "~1.0.4" + cookie "0.7.1" + cookie-signature "1.0.6" + debug "2.6.9" + depd "2.0.0" + encodeurl "~2.0.0" + escape-html "~1.0.3" + etag "~1.8.1" + finalhandler "1.3.1" + fresh "0.5.2" + http-errors "2.0.0" + merge-descriptors "1.0.3" + methods "~1.1.2" + on-finished "2.4.1" + parseurl "~1.3.3" + path-to-regexp "0.1.10" + proxy-addr "~2.0.7" + qs "6.13.0" + range-parser "~1.2.1" + safe-buffer "5.2.1" + send "0.19.0" + serve-static "1.16.2" + setprototypeof "1.2.0" + statuses "2.0.1" + type-is "~1.6.18" + utils-merge "1.0.1" + vary "~1.1.2" + +ext-list@^2.0.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/ext-list/-/ext-list-2.2.2.tgz#0b98e64ed82f5acf0f2931babf69212ef52ddd37" + integrity sha512-u+SQgsubraE6zItfVA0tBuCBhfU9ogSRnsvygI7wht9TS510oLkBRXBsqopeUG/GBOIQyKZO9wjTqIu/sf5zFA== + dependencies: + mime-db "^1.28.0" + +ext-name@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/ext-name/-/ext-name-5.0.0.tgz#70781981d183ee15d13993c8822045c506c8f0a6" + integrity sha512-yblEwXAbGv1VQDmow7s38W77hzAgJAO50ztBLMcUyUBfxv1HC+LGwtiEN+Co6LtlqT/5uwVOxsD4TNIilWhwdQ== + dependencies: + ext-list "^2.0.0" + sort-keys-length "^1.0.0" + +extend@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" + integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== + +external-editor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495" + integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew== + dependencies: + chardet "^0.7.0" + iconv-lite "^0.4.24" + tmp "^0.0.33" + +extsprintf@1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" + integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== + +extsprintf@^1.2.0: + version "1.4.1" + resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" + integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== + +fast-content-type-parse@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/fast-content-type-parse/-/fast-content-type-parse-2.0.1.tgz#c236124534ee2cb427c8d8e5ba35a4856947847b" + integrity sha512-nGqtvLrj5w0naR6tDPfB4cUmYCqouzyQiz6C5y/LtcDllJdrcc6WaWW6iXyIIOErTa/XRybj28aasdn4LkVk6Q== + +fast-deep-equal@^3.1.1, fast-deep-equal@^3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525" + integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q== + +fast-fifo@^1.2.0, fast-fifo@^1.3.2: + version "1.3.2" + resolved "https://registry.yarnpkg.com/fast-fifo/-/fast-fifo-1.3.2.tgz#286e31de96eb96d38a97899815740ba2a4f3640c" + integrity sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ== + +fast-glob@3.2.7: + version "3.2.7" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.7.tgz#fd6cb7a2d7e9aa7a7846111e85a196d6b2f766a1" + integrity sha512-rYGMRwip6lUMvYD3BTScMwT1HtAs2d71SMv66Vrxs0IekGZEjhM0pcMfjQPnknBt2zeCwQMEupiN02ZP4DiT1Q== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.4" + +fast-glob@^3.2.5, fast-glob@^3.2.9, fast-glob@^3.3.2: + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== + dependencies: + "@nodelib/fs.stat" "^2.0.2" + "@nodelib/fs.walk" "^1.2.3" + glob-parent "^5.1.2" + merge2 "^1.3.0" + micromatch "^4.0.8" + +fast-json-stable-stringify@2.x, fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" + integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== + +fast-levenshtein@^2.0.6: + version "2.0.6" + resolved "https://registry.yarnpkg.com/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#3d8a5c66883a16a30ca8643e851f19baa7797917" + integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== + +fast-redact@^3.0.0, fast-redact@^3.1.1: + version "3.5.0" + resolved "https://registry.yarnpkg.com/fast-redact/-/fast-redact-3.5.0.tgz#e9ea02f7e57d0cd8438180083e93077e496285e4" + integrity sha512-dwsoQlS7h9hMeYUq1W++23NDcBLV4KqONnITDV9DjfS3q1SgDGVrBdvvTLUotWtPSD7asWDV9/CmsZPy8Hf70A== + +fast-safe-stringify@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/fast-safe-stringify/-/fast-safe-stringify-2.1.1.tgz#c406a83b6e70d9e35ce3b30a81141df30aeba884" + integrity sha512-W+KJc2dmILlPplD/H4K9l9LcAHAfPtP6BY84uVLXQ6Evcz9Lcg33Y2z1IVblT6xdY54PXYVHEv+0Wpq8Io6zkA== + +fast-uri@^3.0.1: + version "3.0.6" + resolved "https://registry.yarnpkg.com/fast-uri/-/fast-uri-3.0.6.tgz#88f130b77cfaea2378d56bf970dea21257a68748" + integrity sha512-Atfo14OibSv5wAp4VWNsFYE1AchQRTv9cBGWET4pZWHzYshFSS9NQI6I57rdKn9croWVMbYFbLhJ+yJvmZIIHw== + +fastq@^1.6.0: + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== + dependencies: + reusify "^1.0.4" + +fb-watchman@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/fb-watchman/-/fb-watchman-2.0.2.tgz#e9524ee6b5c77e9e5001af0f85f3adbb8623255c" + integrity sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA== + dependencies: + bser "2.1.1" + +figures@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" + integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== + dependencies: + escape-string-regexp "^1.0.5" + +file-entry-cache@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/file-entry-cache/-/file-entry-cache-6.0.1.tgz#211b2dd9659cb0394b073e7323ac3c933d522027" + integrity sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg== + dependencies: + flat-cache "^3.0.4" + +file-type@^17.1.6: + version "17.1.6" + resolved "https://registry.yarnpkg.com/file-type/-/file-type-17.1.6.tgz#18669e0577a4849ef6e73a41f8bdf1ab5ae21023" + integrity sha512-hlDw5Ev+9e883s0pwUsuuYNu4tD7GgpUnOvykjv1Gya0ZIjuKumthDRua90VUn6/nlRKAjcxLUnHNTIUWwWIiw== + dependencies: + readable-web-to-node-stream "^3.0.2" + strtok3 "^7.0.0-alpha.9" + token-types "^5.0.0-alpha.2" + +filelist@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/filelist/-/filelist-1.0.4.tgz#f78978a1e944775ff9e62e744424f215e58352b5" + integrity sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q== + dependencies: + minimatch "^5.0.1" + +filename-reserved-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/filename-reserved-regex/-/filename-reserved-regex-3.0.0.tgz#3d5dd6d4e2d73a3fed2ebc4cd0b3448869a081f7" + integrity sha512-hn4cQfU6GOT/7cFHXBqeBg2TbrMBgdD0kcjLhvSQYYwm3s4B6cjvBfb7nBALJLAXqmU5xajSa7X2NnUud/VCdw== + +filenamify@^5.0.2: + version "5.1.1" + resolved "https://registry.yarnpkg.com/filenamify/-/filenamify-5.1.1.tgz#a1ccc5ae678a5e34f578afcb9b72898264d166d2" + integrity sha512-M45CbrJLGACfrPOkrTp3j2EcO9OBkKUYME0eiqOCa7i2poaklU0jhlIaMlr8ijLorT0uLAzrn3qXOp5684CkfA== + dependencies: + filename-reserved-regex "^3.0.0" + strip-outer "^2.0.0" + trim-repeated "^2.0.0" + +fill-range@^7.1.1: + version "7.1.1" + resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292" + integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg== + dependencies: + to-regex-range "^5.0.1" + +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== + dependencies: + debug "2.6.9" + encodeurl "~2.0.0" + escape-html "~1.0.3" + on-finished "2.4.1" + parseurl "~1.3.3" + statuses "2.0.1" + unpipe "~1.0.0" + +find-up@^4.0.0, find-up@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" + integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw== + dependencies: + locate-path "^5.0.0" + path-exists "^4.0.0" + +find-up@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc" + integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng== + dependencies: + locate-path "^6.0.0" + path-exists "^4.0.0" + +find-versions@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-5.1.0.tgz#973f6739ce20f5e439a27eba8542a4b236c8e685" + integrity sha512-+iwzCJ7C5v5KgcBuueqVoNiHVoQpwiUK5XFLjf0affFTep+Wcw93tPvmb8tqujDNmzhBDPddnWV/qgWSXgq+Hg== + dependencies: + semver-regex "^4.0.5" + +flat-cache@^3.0.4: + version "3.2.0" + resolved "https://registry.yarnpkg.com/flat-cache/-/flat-cache-3.2.0.tgz#2c0c2d5040c99b1632771a9d105725c0115363ee" + integrity sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw== + dependencies: + flatted "^3.2.9" + keyv "^4.5.3" + rimraf "^3.0.2" + +flat@^5.0.2: + version "5.0.2" + resolved "https://registry.yarnpkg.com/flat/-/flat-5.0.2.tgz#8ca6fe332069ffa9d324c327198c598259ceb241" + integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== + +flatted@^3.2.9: + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== + +follow-redirects@^1.15.6: + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== + +forever-agent@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" + integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== + +form-data@^4.0.0, form-data@~4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== + dependencies: + asynckit "^0.4.0" + combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" + mime-types "^2.1.12" + +forwarded@0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/forwarded/-/forwarded-0.2.0.tgz#2269936428aad4c15c7ebe9779a84bf0b2a81811" + integrity sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow== + +fresh@0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/fresh/-/fresh-0.5.2.tgz#3d8cadd90d976569fa835ab1f8e4b23a105605a7" + integrity sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q== + +front-matter@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/front-matter/-/front-matter-4.0.2.tgz#b14e54dc745cfd7293484f3210d15ea4edd7f4d5" + integrity sha512-I8ZuJ/qG92NWX8i5x1Y8qyj3vizhXS31OxjKDu3LKP+7/qBgfIKValiZIEwoVoJKUHlhWtYrktkxV1XsX+pPlg== + dependencies: + js-yaml "^3.13.1" + +fs-constants@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad" + integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== + +fs-extra@^11.0.0: + version "11.3.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^6.0.1" + universalify "^2.0.0" + +fs.realpath@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" + integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== + +fsevents@^2.3.2: + version "2.3.3" + resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6" + integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw== + +function-bind@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" + integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== + +gensync@^1.0.0-beta.2: + version "1.0.0-beta.2" + resolved "https://registry.yarnpkg.com/gensync/-/gensync-1.0.0-beta.2.tgz#32a6ee76c3d7f52d46b2b1ae5d93fea8580a25e0" + integrity sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg== + +get-caller-file@^2.0.5: + version "2.0.5" + resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" + integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== + +get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== + dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.1.1" + function-bind "^1.1.2" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" + +get-package-type@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/get-package-type/-/get-package-type-0.1.0.tgz#8de2d803cff44df3bc6c456e6668b36c3926e11a" + integrity sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q== + +get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + +get-stream@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-3.0.0.tgz#8e943d1358dc37555054ecbe2edb05aa174ede14" + integrity sha512-GlhdIUuVakc8SJ6kK0zAFbiGzRFzNnY4jUuEbV9UROo4Y+0Ny4fjvcZFVTeDA4odpFyOQzaw6hXukJSq/f28sQ== + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +get-stream@^6.0.0: + version "6.0.1" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" + integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== + +getpass@^0.1.1: + version "0.1.7" + resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" + integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== + dependencies: + assert-plus "^1.0.0" + +git-raw-commits@^2.0.11: + version "2.0.11" + resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723" + integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A== + dependencies: + dargs "^7.0.0" + lodash "^4.17.15" + meow "^8.0.0" + split2 "^3.0.0" + through2 "^4.0.0" + +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + +glob-parent@^6.0.2: + version "6.0.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" + integrity sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A== + dependencies: + is-glob "^4.0.3" + +glob@^6.0.1: + version "6.0.4" + resolved "https://registry.yarnpkg.com/glob/-/glob-6.0.4.tgz#0f08860f6a155127b2fadd4f9ce24b1aab6e4d22" + integrity sha512-MKZeRNyYZAVVVG1oZeLaWie1uweH40m9AZwIwxyPbTSX4hHrVYSzLg0Ro5Z5R7XKkIX+Cc6oD1rqeDJnwsB8/A== + dependencies: + inflight "^1.0.4" + inherits "2" + minimatch "2 || 3" + once "^1.3.0" + path-is-absolute "^1.0.0" + +glob@^7.1.3, glob@^7.1.4: + version "7.2.3" + resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" + integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== + dependencies: + fs.realpath "^1.0.0" + inflight "^1.0.4" + inherits "2" + minimatch "^3.1.1" + once "^1.3.0" + path-is-absolute "^1.0.0" + +global-dirs@^0.1.1: + version "0.1.1" + resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445" + integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg== + dependencies: + ini "^1.3.4" + +globals@^11.1.0: + version "11.12.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" + integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== + +globals@^13.19.0: + version "13.24.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-13.24.0.tgz#8432a19d78ce0c1e833949c36adb345400bb1171" + integrity sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ== + dependencies: + type-fest "^0.20.2" + +globals@^15.9.0: + version "15.15.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-15.15.0.tgz#7c4761299d41c32b075715a4ce1ede7897ff72a8" + integrity sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg== + +globby@^11.1.0: + version "11.1.0" + resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" + integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== + dependencies: + array-union "^2.1.0" + dir-glob "^3.0.1" + fast-glob "^3.2.9" + ignore "^5.2.0" + merge2 "^1.4.1" + slash "^3.0.0" + +gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== + +got@^11.8.5: + version "11.8.6" + resolved "https://registry.yarnpkg.com/got/-/got-11.8.6.tgz#276e827ead8772eddbcfc97170590b841823233a" + integrity sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g== + dependencies: + "@sindresorhus/is" "^4.0.0" + "@szmarczak/http-timer" "^4.0.5" + "@types/cacheable-request" "^6.0.1" + "@types/responselike" "^1.0.0" + cacheable-lookup "^5.0.3" + cacheable-request "^7.0.2" + decompress-response "^6.0.0" + http2-wrapper "^1.0.0-beta.5.2" + lowercase-keys "^2.0.0" + p-cancelable "^2.0.0" + responselike "^2.0.0" + +graceful-fs@^4.1.3, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: + version "4.2.11" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" + integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== + +graphemer@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" + integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== + +gunzip-maybe@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/gunzip-maybe/-/gunzip-maybe-1.4.2.tgz#b913564ae3be0eda6f3de36464837a9cd94b98ac" + integrity sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw== + dependencies: + browserify-zlib "^0.1.4" + is-deflate "^1.0.0" + is-gzip "^1.0.0" + peek-stream "^1.1.0" + pumpify "^1.3.3" + through2 "^2.0.3" + +handlebars@4.7.8: + version "4.7.8" + resolved "https://registry.yarnpkg.com/handlebars/-/handlebars-4.7.8.tgz#41c42c18b1be2365439188c77c6afae71c0cd9e9" + integrity sha512-vafaFqs8MZkRrSX7sFVUdo3ap/eNiLnb4IakshzvP56X5Nr1iGKAIqdX6tMlm6HcNRIkr6AxO5jFEoJzzpT8aQ== + dependencies: + minimist "^1.2.5" + neo-async "^2.6.2" + source-map "^0.6.1" + wordwrap "^1.0.0" + optionalDependencies: + uglify-js "^3.1.4" + +hard-rejection@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883" + integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA== + +harmony-reflect@^1.4.6: + version "1.6.2" + resolved "https://registry.yarnpkg.com/harmony-reflect/-/harmony-reflect-1.6.2.tgz#31ecbd32e648a34d030d86adb67d4d47547fe710" + integrity sha512-HIp/n38R9kQjDEziXyDTuW3vvoxxyxjxFzXLrBr18uB47GnSt+G9D29fqrpM5ZkspMcPICud3XsBJQ4Y2URg8g== + +has-flag@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" + integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== + +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== + +has-tostringtag@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" + integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== + dependencies: + has-symbols "^1.0.3" + +hasown@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" + integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== + dependencies: + function-bind "^1.1.2" + +hosted-git-info@^2.1.4: + version "2.8.9" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9" + integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== + +hosted-git-info@^4.0.1: + version "4.1.0" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224" + integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA== + dependencies: + lru-cache "^6.0.0" + +hosted-git-info@^7.0.0: + version "7.0.2" + resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-7.0.2.tgz#9b751acac097757667f30114607ef7b661ff4f17" + integrity sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w== + dependencies: + lru-cache "^10.0.1" + +html-encoding-sniffer@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/html-encoding-sniffer/-/html-encoding-sniffer-3.0.0.tgz#2cb1a8cf0db52414776e5b2a7a04d5dd98158de9" + integrity sha512-oWv4T4yJ52iKrufjnyZPkrN0CH3QnrUqdB6In1g5Fe1mia8GmF36gnfNySxoZtxD5+NmYw1EElVXiBk93UeskA== + dependencies: + whatwg-encoding "^2.0.0" + +html-escaper@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" + integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== + +http-cache-semantics@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.1.tgz#abe02fcb2985460bf0323be664436ec3476a6d5a" + integrity sha512-er295DKPVsV82j5kw1Gjt+ADA/XYHsajl82cGNQG2eyoPkvgUhX+nDIyelzhIWbbsXP39EHcI6l5tYs2FYqYXQ== + +http-errors@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/http-errors/-/http-errors-2.0.0.tgz#b7774a1486ef73cf7667ac9ae0858c012c57b9d3" + integrity sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ== + dependencies: + depd "2.0.0" + inherits "2.0.4" + setprototypeof "1.2.0" + statuses "2.0.1" + toidentifier "1.0.1" + +http-proxy-agent@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz#5129800203520d434f142bc78ff3c170800f2b43" + integrity sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w== + dependencies: + "@tootallnate/once" "2" + agent-base "6" + debug "4" + +http-signature@~1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.4.0.tgz#dee5a9ba2bf49416abc544abd6d967f6a94c8c3f" + integrity sha512-G5akfn7eKbpDN+8nPS/cb57YeA1jLTVxjpCj7tmm3QKPdyDy7T+qSC40e9ptydSWvkwjSXw1VbkpyEm39ukeAg== + dependencies: + assert-plus "^1.0.0" + jsprim "^2.0.2" + sshpk "^1.18.0" + +http-status-codes@2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-2.2.0.tgz#bb2efe63d941dfc2be18e15f703da525169622be" + integrity sha512-feERVo9iWxvnejp3SEfm/+oNG517npqL2/PIA8ORjyOZjGC7TwCRQsZylciLS64i6pJ0wRYz3rkXLRwbtFa8Ng== + +http-status-codes@2.3.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/http-status-codes/-/http-status-codes-2.3.0.tgz#987fefb28c69f92a43aecc77feec2866349a8bfc" + integrity sha512-RJ8XvFvpPM/Dmc5SV+dC4y5PCeOhT3x1Hq0NU3rjGeg5a/CqlhZ7uudknPwZFz4aeAXDcbAyaeP7GAo9lvngtA== + +http2-wrapper@^1.0.0-beta.5.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/http2-wrapper/-/http2-wrapper-1.0.3.tgz#b8f55e0c1f25d4ebd08b3b0c2c079f9590800b3d" + integrity sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg== + dependencies: + quick-lru "^5.1.1" + resolve-alpn "^1.0.0" + +https-proxy-agent@5.0.1, https-proxy-agent@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz#c59ef224a04fe8b754f3db0063a25ea30d0005d6" + integrity sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA== + dependencies: + agent-base "6" + debug "4" + +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + +husky@^8.0.0: + version "8.0.3" + resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184" + integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg== + +iconv-lite@0.4.24, iconv-lite@^0.4.24: + version "0.4.24" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" + integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== + dependencies: + safer-buffer ">= 2.1.2 < 3" + +iconv-lite@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +identity-obj-proxy@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/identity-obj-proxy/-/identity-obj-proxy-3.0.0.tgz#94d2bda96084453ef36fbc5aaec37e0f79f1fc14" + integrity sha512-00n6YnVHKrinT9t0d9+5yZC6UBNJANpYEQvL2LlX6Ab9lnmxzIRcEmTPuyGScvl1+jKuCICX1Z0Ab1pPKKdikA== + dependencies: + harmony-reflect "^1.4.6" + +ieee754@^1.1.13, ieee754@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" + integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== + +ignore@^5.0.4, ignore@^5.2.0, ignore@^5.3.1: + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== + +import-fresh@^3.0.0, import-fresh@^3.1.0, import-fresh@^3.2.1, import-fresh@^3.3.0: + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== + dependencies: + parent-module "^1.0.0" + resolve-from "^4.0.0" + +import-local@^3.0.2: + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== + dependencies: + pkg-dir "^4.2.0" + resolve-cwd "^3.0.0" + +imurmurhash@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" + integrity sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA== + +indent-string@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" + integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== + +inflight@^1.0.4: + version "1.0.6" + resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" + integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== + dependencies: + once "^1.3.0" + wrappy "1" + +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@^2.0.4, inherits@~2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" + integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== + +ini@^1.3.4: + version "1.3.8" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" + integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== + +ipaddr.js@1.9.1: + version "1.9.1" + resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" + integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== + +is-arrayish@^0.2.1: + version "0.2.1" + resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" + integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== + +is-core-module@^2.16.0, is-core-module@^2.5.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== + dependencies: + hasown "^2.0.2" + +is-deflate@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-deflate/-/is-deflate-1.0.0.tgz#c862901c3c161fb09dac7cdc7e784f80e98f2f14" + integrity sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ== + +is-docker@^2.0.0, is-docker@^2.1.1: + version "2.2.1" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" + integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== + +is-extglob@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" + integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== + +is-fullwidth-code-point@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" + integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== + +is-generator-fn@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" + integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== + +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: + version "4.0.3" + resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" + integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== + dependencies: + is-extglob "^2.1.1" + +is-gzip@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-gzip/-/is-gzip-1.0.0.tgz#6ca8b07b99c77998025900e555ced8ed80879a83" + integrity sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ== + +is-interactive@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-1.0.0.tgz#cea6e6ae5c870a7b0a0004070b7b587e0252912e" + integrity sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w== + +is-number@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" + integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== + +is-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982" + integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w== + +is-path-inside@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" + integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== + +is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" + integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg== + +is-potential-custom-element-name@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz#171ed6f19e3ac554394edf78caa05784a45bebb5" + integrity sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ== + +is-promise@^2.1.0: + version "2.2.2" + resolved "https://registry.yarnpkg.com/is-promise/-/is-promise-2.2.2.tgz#39ab959ccbf9a774cf079f7b40c7a26f763135f1" + integrity sha512-+lP4/6lKUBfQjZ2pdxThZvLUAafmZb8OAxFb8XXtiQmS35INgr85hdOGoEs124ez1FCnZJt6jau/T+alh58QFQ== + +is-stream@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-1.1.0.tgz#12d4a3dd4e68e0b79ceb8dbc84173ae80d91ca44" + integrity sha512-uQPm8kcs47jx38atAcWTVxyltQYoPT68y9aWYdV6yWXSyW8mzSat0TL6CiWdZeCdF3KrAvpVtnHbTv4RN+rqdQ== + +is-stream@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" + integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== + +is-text-path@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e" + integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w== + dependencies: + text-extensions "^1.0.0" + +is-typedarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" + integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== + +is-unicode-supported@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" + integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== + +is-wsl@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" + integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== + dependencies: + is-docker "^2.0.0" + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ== + +isexe@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" + integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== + +isstream@~0.1.2: + version "0.1.2" + resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" + integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== + +istanbul-lib-coverage@^3.0.0, istanbul-lib-coverage@^3.2.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz#2d166c4b0644d43a39f04bf6c2edd1e585f31756" + integrity sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== + +istanbul-lib-instrument@^5.0.4: + version "5.2.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-5.2.1.tgz#d10c8885c2125574e1c231cacadf955675e1ce3d" + integrity sha512-pzqtp31nLv/XFOzXGuvhCb8qhjmTVo5vjVk19XE4CRlSWz0KoeJ3bw9XsA7nOp9YBf4qHjwBxkDzKcME/J29Yg== + dependencies: + "@babel/core" "^7.12.3" + "@babel/parser" "^7.14.7" + "@istanbuljs/schema" "^0.1.2" + istanbul-lib-coverage "^3.2.0" + semver "^6.3.0" + +istanbul-lib-instrument@^6.0.0: + version "6.0.3" + resolved "https://registry.yarnpkg.com/istanbul-lib-instrument/-/istanbul-lib-instrument-6.0.3.tgz#fa15401df6c15874bcb2105f773325d78c666765" + integrity sha512-Vtgk7L/R2JHyyGW07spoFlB8/lpjiOLTjMdms6AFMraYt3BaJauod/NGrfnVG/y4Ix1JEuMRPDPEj2ua+zz1/Q== + dependencies: + "@babel/core" "^7.23.9" + "@babel/parser" "^7.23.9" + "@istanbuljs/schema" "^0.1.3" + istanbul-lib-coverage "^3.2.0" + semver "^7.5.4" + +istanbul-lib-report@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz#908305bac9a5bd175ac6a74489eafd0fc2445a7d" + integrity sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== + dependencies: + istanbul-lib-coverage "^3.0.0" + make-dir "^4.0.0" + supports-color "^7.1.0" + +istanbul-lib-source-maps@^4.0.0: + version "4.0.1" + resolved "https://registry.yarnpkg.com/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz#895f3a709fcfba34c6de5a42939022f3e4358551" + integrity sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== + dependencies: + debug "^4.1.1" + istanbul-lib-coverage "^3.0.0" + source-map "^0.6.1" + +istanbul-reports@^3.1.3: + version "3.1.7" + resolved "https://registry.yarnpkg.com/istanbul-reports/-/istanbul-reports-3.1.7.tgz#daed12b9e1dca518e15c056e1e537e741280fa0b" + integrity sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g== + dependencies: + html-escaper "^2.0.0" + istanbul-lib-report "^3.0.0" + +jake@^10.8.5: + version "10.9.2" + resolved "https://registry.yarnpkg.com/jake/-/jake-10.9.2.tgz#6ae487e6a69afec3a5e167628996b59f35ae2b7f" + integrity sha512-2P4SQ0HrLQ+fw6llpLnOaGAvN2Zu6778SJMrCUwns4fOoG9ayrTiZk3VV8sCPkVZF8ab0zksVpS8FDY5pRCNBA== + dependencies: + async "^3.2.3" + chalk "^4.0.2" + filelist "^1.0.4" + minimatch "^3.1.2" + +jest-changed-files@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-changed-files/-/jest-changed-files-29.7.0.tgz#1c06d07e77c78e1585d020424dedc10d6e17ac3a" + integrity sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w== + dependencies: + execa "^5.0.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + +jest-circus@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-circus/-/jest-circus-29.7.0.tgz#b6817a45fcc835d8b16d5962d0c026473ee3668a" + integrity sha512-3E1nCMgipcTkCocFwM90XXQab9bS+GMsjdpmPrlelaxwD93Ad8iVEjX/vvHPdLPnFf+L40u+5+iutRdA1N9myw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/expect" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + co "^4.6.0" + dedent "^1.0.0" + is-generator-fn "^2.0.0" + jest-each "^29.7.0" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-runtime "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + p-limit "^3.1.0" + pretty-format "^29.7.0" + pure-rand "^6.0.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-cli@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-cli/-/jest-cli-29.7.0.tgz#5592c940798e0cae677eec169264f2d839a37995" + integrity sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg== + dependencies: + "@jest/core" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + chalk "^4.0.0" + create-jest "^29.7.0" + exit "^0.1.2" + import-local "^3.0.2" + jest-config "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + yargs "^17.3.1" + +jest-config@^29.4.1, jest-config@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-config/-/jest-config-29.7.0.tgz#bcbda8806dbcc01b1e316a46bb74085a84b0245f" + integrity sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ== + dependencies: + "@babel/core" "^7.11.6" + "@jest/test-sequencer" "^29.7.0" + "@jest/types" "^29.6.3" + babel-jest "^29.7.0" + chalk "^4.0.0" + ci-info "^3.2.0" + deepmerge "^4.2.2" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-circus "^29.7.0" + jest-environment-node "^29.7.0" + jest-get-type "^29.6.3" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-runner "^29.7.0" + jest-util "^29.7.0" + jest-validate "^29.7.0" + micromatch "^4.0.4" + parse-json "^5.2.0" + pretty-format "^29.7.0" + slash "^3.0.0" + strip-json-comments "^3.1.1" + +jest-diff@^29.4.1, jest-diff@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-diff/-/jest-diff-29.7.0.tgz#017934a66ebb7ecf6f205e84699be10afd70458a" + integrity sha512-LMIgiIrhigmPrs03JHpxUh2yISK3vLFPkAodPeo0+BuF7wA2FoQbkEg1u8gBYBThncu7e1oEDUfIXVuTqLRUjw== + dependencies: + chalk "^4.0.0" + diff-sequences "^29.6.3" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-docblock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-docblock/-/jest-docblock-29.7.0.tgz#8fddb6adc3cdc955c93e2a87f61cfd350d5d119a" + integrity sha512-q617Auw3A612guyaFgsbFeYpNP5t2aoUNLwBUbc/0kD1R4t9ixDbyFTHd1nok4epoVFpr7PmeWHrhvuV3XaJ4g== + dependencies: + detect-newline "^3.0.0" + +jest-each@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-each/-/jest-each-29.7.0.tgz#162a9b3f2328bdd991beaabffbb74745e56577d1" + integrity sha512-gns+Er14+ZrEoC5fhOfYCY1LOHHr0TI+rQUHZS8Ttw2l7gl+80eHc/gFf2Ktkw0+SIACDTeWvpFcv3B04VembQ== + dependencies: + "@jest/types" "^29.6.3" + chalk "^4.0.0" + jest-get-type "^29.6.3" + jest-util "^29.7.0" + pretty-format "^29.7.0" + +jest-environment-jsdom@29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-29.7.0.tgz#d206fa3551933c3fd519e5dfdb58a0f5139a837f" + integrity sha512-k9iQbsf9OyOfdzWH8HDmrRT0gSIcX+FLNW7IQq94tFX0gynPwqDTW0Ho6iMVNjGz/nb+l/vW3dWM2bbLLpkbXA== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/jsdom" "^20.0.0" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + jsdom "^20.0.0" + +jest-environment-node@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-environment-node/-/jest-environment-node-29.7.0.tgz#0b93e111dda8ec120bc8300e6d1fb9576e164376" + integrity sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-mock "^29.7.0" + jest-util "^29.7.0" + +jest-get-type@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-get-type/-/jest-get-type-29.6.3.tgz#36f499fdcea197c1045a127319c0481723908fd1" + integrity sha512-zrteXnqYxfQh7l5FHyL38jL39di8H8rHoecLH3JNxH3BwOrBsNeabdap5e0I23lD4HHI8W5VFBZqG4Eaq5LNcw== + +jest-haste-map@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-haste-map/-/jest-haste-map-29.7.0.tgz#3c2396524482f5a0506376e6c858c3bbcc17b104" + integrity sha512-fP8u2pyfqx0K1rGn1R9pyE0/KTn+G7PxktWidOBTqFPLYX0b9ksaMFkhK5vrS3DVun09pckLdlx90QthlW7AmA== + dependencies: + "@jest/types" "^29.6.3" + "@types/graceful-fs" "^4.1.3" + "@types/node" "*" + anymatch "^3.0.3" + fb-watchman "^2.0.0" + graceful-fs "^4.2.9" + jest-regex-util "^29.6.3" + jest-util "^29.7.0" + jest-worker "^29.7.0" + micromatch "^4.0.4" + walker "^1.0.8" + optionalDependencies: + fsevents "^2.3.2" + +jest-leak-detector@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-leak-detector/-/jest-leak-detector-29.7.0.tgz#5b7ec0dadfdfec0ca383dc9aa016d36b5ea4c728" + integrity sha512-kYA8IJcSYtST2BY9I+SMC32nDpBT3J2NvWJx8+JCuCdl/CR1I4EKUJROiP8XtCcxqgTTBGJNdbB1A8XRKbTetw== + dependencies: + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-matcher-utils@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-29.7.0.tgz#ae8fec79ff249fd592ce80e3ee474e83a6c44f12" + integrity sha512-sBkD+Xi9DtcChsI3L3u0+N0opgPYnCRPtGcQYrgXmR+hmt/fYfWAL0xRXYU8eWOdfuLgBe0YCW3AFtnRLagq/g== + dependencies: + chalk "^4.0.0" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + pretty-format "^29.7.0" + +jest-message-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-29.7.0.tgz#8bc392e204e95dfe7564abbe72a404e28e51f7f3" + integrity sha512-GBEV4GRADeP+qtB2+6u61stea8mGcOT4mCtrYISZwfu9/ISHFJ/5zOMXYbpBE9RsS5+Gb63DW4FgmnKJ79Kf6w== + dependencies: + "@babel/code-frame" "^7.12.13" + "@jest/types" "^29.6.3" + "@types/stack-utils" "^2.0.0" + chalk "^4.0.0" + graceful-fs "^4.2.9" + micromatch "^4.0.4" + pretty-format "^29.7.0" + slash "^3.0.0" + stack-utils "^2.0.3" + +jest-mock@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-mock/-/jest-mock-29.7.0.tgz#4e836cf60e99c6fcfabe9f99d017f3fdd50a6347" + integrity sha512-ITOMZn+UkYS4ZFh83xYAOzWStloNzJFO2s8DWrE4lhtGD+AorgnbkiKERe4wQVBydIGPx059g6riW5Btp6Llnw== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + jest-util "^29.7.0" + +jest-pnp-resolver@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/jest-pnp-resolver/-/jest-pnp-resolver-1.2.3.tgz#930b1546164d4ad5937d5540e711d4d38d4cad2e" + integrity sha512-+3NpwQEnRoIBtx4fyhblQDPgJI0H1IEIkX7ShLUjPGA7TtUTvI1oiKi3SR4oBR0hQhQR80l4WAe5RrXBwWMA8w== + +jest-regex-util@^29.6.3: + version "29.6.3" + resolved "https://registry.yarnpkg.com/jest-regex-util/-/jest-regex-util-29.6.3.tgz#4a556d9c776af68e1c5f48194f4d0327d24e8a52" + integrity sha512-KJJBsRCyyLNWCNBOvZyRDnAIfUiRJ8v+hOBQYGn8gDyF3UegwiP4gwRR3/SDa42g1YbVycTidUF3rKjyLFDWbg== + +jest-resolve-dependencies@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve-dependencies/-/jest-resolve-dependencies-29.7.0.tgz#1b04f2c095f37fc776ff40803dc92921b1e88428" + integrity sha512-un0zD/6qxJ+S0et7WxeI3H5XSe9lTBBR7bOHCHXkKR6luG5mwDDlIzVQ0V5cZCuoTgEdcdwzTghYkTWfubi+nA== + dependencies: + jest-regex-util "^29.6.3" + jest-snapshot "^29.7.0" + +jest-resolve@^29.4.1, jest-resolve@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-resolve/-/jest-resolve-29.7.0.tgz#64d6a8992dd26f635ab0c01e5eef4399c6bcbc30" + integrity sha512-IOVhZSrg+UvVAshDSDtHyFCCBUl/Q3AAJv8iZ6ZjnZ74xzvwuzLXid9IIIPgTnY62SJjfuupMKZsZQRsCvxEgA== + dependencies: + chalk "^4.0.0" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-pnp-resolver "^1.2.2" + jest-util "^29.7.0" + jest-validate "^29.7.0" + resolve "^1.20.0" + resolve.exports "^2.0.0" + slash "^3.0.0" + +jest-runner@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runner/-/jest-runner-29.7.0.tgz#809af072d408a53dcfd2e849a4c976d3132f718e" + integrity sha512-fsc4N6cPCAahybGBfTRcq5wFR6fpLznMg47sY5aDpsoejOcVYFb07AHuSnR0liMcPTgBsA3ZJL6kFOjPdoNipQ== + dependencies: + "@jest/console" "^29.7.0" + "@jest/environment" "^29.7.0" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + emittery "^0.13.1" + graceful-fs "^4.2.9" + jest-docblock "^29.7.0" + jest-environment-node "^29.7.0" + jest-haste-map "^29.7.0" + jest-leak-detector "^29.7.0" + jest-message-util "^29.7.0" + jest-resolve "^29.7.0" + jest-runtime "^29.7.0" + jest-util "^29.7.0" + jest-watcher "^29.7.0" + jest-worker "^29.7.0" + p-limit "^3.1.0" + source-map-support "0.5.13" + +jest-runtime@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-runtime/-/jest-runtime-29.7.0.tgz#efecb3141cf7d3767a3a0cc8f7c9990587d3d817" + integrity sha512-gUnLjgwdGqW7B4LvOIkbKs9WGbn+QLqRQQ9juC6HndeDiezIwhDP+mhMwHWCEcfQ5RUXa6OPnFF8BJh5xegwwQ== + dependencies: + "@jest/environment" "^29.7.0" + "@jest/fake-timers" "^29.7.0" + "@jest/globals" "^29.7.0" + "@jest/source-map" "^29.6.3" + "@jest/test-result" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + cjs-module-lexer "^1.0.0" + collect-v8-coverage "^1.0.0" + glob "^7.1.3" + graceful-fs "^4.2.9" + jest-haste-map "^29.7.0" + jest-message-util "^29.7.0" + jest-mock "^29.7.0" + jest-regex-util "^29.6.3" + jest-resolve "^29.7.0" + jest-snapshot "^29.7.0" + jest-util "^29.7.0" + slash "^3.0.0" + strip-bom "^4.0.0" + +jest-snapshot@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-29.7.0.tgz#c2c574c3f51865da1bb329036778a69bf88a6be5" + integrity sha512-Rm0BMWtxBcioHr1/OX5YCP8Uov4riHvKPknOGs804Zg9JGZgmIBkbtlxJC/7Z4msKYVbIJtfU+tKb8xlYNfdkw== + dependencies: + "@babel/core" "^7.11.6" + "@babel/generator" "^7.7.2" + "@babel/plugin-syntax-jsx" "^7.7.2" + "@babel/plugin-syntax-typescript" "^7.7.2" + "@babel/types" "^7.3.3" + "@jest/expect-utils" "^29.7.0" + "@jest/transform" "^29.7.0" + "@jest/types" "^29.6.3" + babel-preset-current-node-syntax "^1.0.0" + chalk "^4.0.0" + expect "^29.7.0" + graceful-fs "^4.2.9" + jest-diff "^29.7.0" + jest-get-type "^29.6.3" + jest-matcher-utils "^29.7.0" + jest-message-util "^29.7.0" + jest-util "^29.7.0" + natural-compare "^1.4.0" + pretty-format "^29.7.0" + semver "^7.5.3" + +jest-util@^29.0.0, jest-util@^29.4.1, jest-util@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-util/-/jest-util-29.7.0.tgz#23c2b62bfb22be82b44de98055802ff3710fc0bc" + integrity sha512-z6EbKajIpqGKU56y5KBUgy1dt1ihhQJgWzUlZHArA/+X2ad7Cb5iF+AK1EWVL/Bo7Rz9uurpqw6SiBCefUbCGA== + dependencies: + "@jest/types" "^29.6.3" + "@types/node" "*" + chalk "^4.0.0" + ci-info "^3.2.0" + graceful-fs "^4.2.9" + picomatch "^2.2.3" + +jest-validate@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-validate/-/jest-validate-29.7.0.tgz#7bf705511c64da591d46b15fce41400d52147d9c" + integrity sha512-ZB7wHqaRGVw/9hST/OuFUReG7M8vKeq0/J2egIGLdvjHCmYqGARhzXmtgi+gVeZ5uXFF219aOc3Ls2yLg27tkw== + dependencies: + "@jest/types" "^29.6.3" + camelcase "^6.2.0" + chalk "^4.0.0" + jest-get-type "^29.6.3" + leven "^3.1.0" + pretty-format "^29.7.0" + +jest-watcher@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-watcher/-/jest-watcher-29.7.0.tgz#7810d30d619c3a62093223ce6bb359ca1b28a2f2" + integrity sha512-49Fg7WXkU3Vl2h6LbLtMQ/HyB6rXSIX7SqvBLQmssRBGN9I0PNvPmAmCWSOY6SOvrjhI/F7/bGAv9RtnsPA03g== + dependencies: + "@jest/test-result" "^29.7.0" + "@jest/types" "^29.6.3" + "@types/node" "*" + ansi-escapes "^4.2.1" + chalk "^4.0.0" + emittery "^0.13.1" + jest-util "^29.7.0" + string-length "^4.0.1" + +jest-worker@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-29.7.0.tgz#acad073acbbaeb7262bd5389e1bcf43e10058d4a" + integrity sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw== + dependencies: + "@types/node" "*" + jest-util "^29.7.0" + merge-stream "^2.0.0" + supports-color "^8.0.0" + +jest@29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/jest/-/jest-29.7.0.tgz#994676fc24177f088f1c5e3737f5697204ff2613" + integrity sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw== + dependencies: + "@jest/core" "^29.7.0" + "@jest/types" "^29.6.3" + import-local "^3.0.2" + jest-cli "^29.7.0" + +js-tokens@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" + integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== + +js-yaml@4.1.0, js-yaml@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602" + integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA== + dependencies: + argparse "^2.0.1" + +js-yaml@^3.10.0, js-yaml@^3.13.1: + version "3.14.1" + resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537" + integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g== + dependencies: + argparse "^1.0.7" + esprima "^4.0.0" + +jsbn@~0.1.0: + version "0.1.1" + resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" + integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== + +jsdom@^20.0.0: + version "20.0.3" + resolved "https://registry.yarnpkg.com/jsdom/-/jsdom-20.0.3.tgz#886a41ba1d4726f67a8858028c99489fed6ad4db" + integrity sha512-SYhBvTh89tTfCD/CRdSOm13mOBa42iTaTyfyEWBdKcGdPxPtLFBXuHR8XHb33YNYaP+lLbmSvBTsnoesCNJEsQ== + dependencies: + abab "^2.0.6" + acorn "^8.8.1" + acorn-globals "^7.0.0" + cssom "^0.5.0" + cssstyle "^2.3.0" + data-urls "^3.0.2" + decimal.js "^10.4.2" + domexception "^4.0.0" + escodegen "^2.0.0" + form-data "^4.0.0" + html-encoding-sniffer "^3.0.0" + http-proxy-agent "^5.0.0" + https-proxy-agent "^5.0.1" + is-potential-custom-element-name "^1.0.1" + nwsapi "^2.2.2" + parse5 "^7.1.1" + saxes "^6.0.0" + symbol-tree "^3.2.4" + tough-cookie "^4.1.2" + w3c-xmlserializer "^4.0.0" + webidl-conversions "^7.0.0" + whatwg-encoding "^2.0.0" + whatwg-mimetype "^3.0.0" + whatwg-url "^11.0.0" + ws "^8.11.0" + xml-name-validator "^4.0.0" + +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== + +jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== + +json-buffer@3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.1.tgz#9338802a30d3b6605fbe0613e094008ca8c05a13" + integrity sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ== + +json-parse-even-better-errors@^2.3.0: + version "2.3.1" + resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d" + integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w== + +json-schema-traverse@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" + integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== + +json-schema-traverse@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2" + integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug== + +json-schema@0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" + integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== + +json-stable-stringify-without-jsonify@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" + integrity sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw== + +json-stringify-safe@~5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== + +json5@^2.2.2, json5@^2.2.3: + version "2.2.3" + resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" + integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== + +jsonc-eslint-parser@^2.1.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/jsonc-eslint-parser/-/jsonc-eslint-parser-2.4.0.tgz#74ded53f9d716e8d0671bd167bf5391f452d5461" + integrity sha512-WYDyuc/uFcGp6YtM2H0uKmUwieOuzeE/5YocFJLnLfclZ4inf3mRn8ZVy1s7Hxji7Jxm6Ss8gqpexD/GlKoGgg== + dependencies: + acorn "^8.5.0" + eslint-visitor-keys "^3.0.0" + espree "^9.0.0" + semver "^7.3.5" + +jsonc-parser@3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.2.0.tgz#31ff3f4c2b9793f89c67212627c51c6394f88e76" + integrity sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== + +jsonfile@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" + integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== + dependencies: + universalify "^2.0.0" + optionalDependencies: + graceful-fs "^4.1.6" + +jsonparse@^1.2.0: + version "1.3.1" + resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280" + integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg== + +jsonwebtoken@9.0.2: + version "9.0.2" + resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3" + integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ== + dependencies: + jws "^3.2.2" + lodash.includes "^4.3.0" + lodash.isboolean "^3.0.3" + lodash.isinteger "^4.0.4" + lodash.isnumber "^3.0.3" + lodash.isplainobject "^4.0.6" + lodash.isstring "^4.0.1" + lodash.once "^4.0.0" + ms "^2.1.1" + semver "^7.5.4" + +jsprim@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" + integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== + dependencies: + assert-plus "1.0.0" + extsprintf "1.3.0" + json-schema "0.4.0" + verror "1.10.0" + +jwa@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a" + integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA== + dependencies: + buffer-equal-constant-time "1.0.1" + ecdsa-sig-formatter "1.0.11" + safe-buffer "^5.0.1" + +jws@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" + integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA== + dependencies: + jwa "^1.4.1" + safe-buffer "^5.0.1" + +keyv@^4.0.0, keyv@^4.5.3: + version "4.5.4" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-4.5.4.tgz#a879a99e29452f942439f2a405e3af8b31d4de93" + integrity sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw== + dependencies: + json-buffer "3.0.1" + +kind-of@^6.0.3: + version "6.0.3" + resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd" + integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw== + +kleur@4.1.5: + version "4.1.5" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" + integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== + +kleur@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/kleur/-/kleur-3.0.3.tgz#a79c9ecc86ee1ce3fa6206d1216c501f147fc07e" + integrity sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w== + +leven@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2" + integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A== + +levn@^0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/levn/-/levn-0.4.1.tgz#ae4562c007473b932a6200d403268dd2fffc6ade" + integrity sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ== + dependencies: + prelude-ls "^1.2.1" + type-check "~0.4.0" + +lines-and-columns@2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-2.0.3.tgz#b2f0badedb556b747020ab8ea7f0373e22efac1b" + integrity sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w== + +lines-and-columns@^1.1.6: + version "1.2.4" + resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632" + integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg== + +locate-path@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0" + integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g== + dependencies: + p-locate "^4.1.0" + +locate-path@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286" + integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw== + dependencies: + p-locate "^5.0.0" + +lockfile@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/lockfile/-/lockfile-1.0.4.tgz#07f819d25ae48f87e538e6578b6964a4981a5609" + integrity sha512-cvbTwETRfsFh4nHsL1eGWapU1XFi5Ot9E85sWAwia7Y7EgB7vfqcZhTKZ+l7hCGxSPoushMv5GKhT5PdLv03WA== + dependencies: + signal-exit "^3.0.2" + +lodash-es@^4.17.21: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash-es/-/lodash-es-4.17.21.tgz#43e626c46e6591b7750beb2b50117390c609e3ee" + integrity sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw== + +lodash.camelcase@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6" + integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA== + +lodash.debounce@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/lodash.debounce/-/lodash.debounce-4.0.8.tgz#82d79bff30a67c4005ffd5e2515300ad9ca4d7af" + integrity sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow== + +lodash.includes@^4.3.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f" + integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w== + +lodash.isboolean@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6" + integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg== + +lodash.isfunction@^3.0.9: + version "3.0.9" + resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051" + integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw== + +lodash.isinteger@^4.0.4: + version "4.0.4" + resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343" + integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA== + +lodash.isnumber@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc" + integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw== + +lodash.isplainobject@^4.0.6: + version "4.0.6" + resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb" + integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA== + +lodash.isstring@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451" + integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw== + +lodash.kebabcase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36" + integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g== + +lodash.memoize@4.x: + version "4.1.2" + resolved "https://registry.yarnpkg.com/lodash.memoize/-/lodash.memoize-4.1.2.tgz#bcc6c49a42a2840ed997f323eada5ecd182e0bfe" + integrity sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag== + +lodash.merge@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a" + integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ== + +lodash.mergewith@^4.6.2: + version "4.6.2" + resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55" + integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ== + +lodash.once@^4.0.0: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" + integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== + +lodash.snakecase@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d" + integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw== + +lodash.startcase@^4.4.0: + version "4.4.0" + resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8" + integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg== + +lodash.uniq@^4.5.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773" + integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ== + +lodash.upperfirst@^4.3.1: + version "4.3.1" + resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce" + integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg== + +lodash@4, lodash@4.17.21, lodash@^4.17.15: + version "4.17.21" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" + integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== + +log-symbols@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" + integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== + dependencies: + chalk "^4.1.0" + is-unicode-supported "^0.1.0" + +lowdb@1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/lowdb/-/lowdb-1.0.0.tgz#5243be6b22786ccce30e50c9a33eac36b20c8064" + integrity sha512-2+x8esE/Wb9SQ1F9IHaYWfsC9FIecLOPrK4g17FGEayjUWH172H6nwicRovGvSE2CPZouc2MCIqCI7h9d+GftQ== + dependencies: + graceful-fs "^4.1.3" + is-promise "^2.1.0" + lodash "4" + pify "^3.0.0" + steno "^0.4.1" + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +lru-cache@7.18.3: + version "7.18.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-7.18.3.tgz#f793896e0fd0e954a59dfdd82f0773808df6aa89" + integrity sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA== + +lru-cache@^10.0.1: + version "10.4.3" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.4.3.tgz#410fc8a17b70e598013df257c2446b7f3383f119" + integrity sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ== + +lru-cache@^4.0.1: + version "4.1.5" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd" + integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g== + dependencies: + pseudomap "^1.0.2" + yallist "^2.1.2" + +lru-cache@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-5.1.1.tgz#1da27e6710271947695daf6848e847f01d84b920" + integrity sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w== + dependencies: + yallist "^3.0.2" + +lru-cache@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" + integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== + dependencies: + yallist "^4.0.0" + +make-dir@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/make-dir/-/make-dir-4.0.0.tgz#c3c2307a771277cd9638305f915c29ae741b614e" + integrity sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== + dependencies: + semver "^7.5.3" + +make-error@1.x, make-error@^1.1.1: + version "1.3.6" + resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" + integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== + +makeerror@1.0.12: + version "1.0.12" + resolved "https://registry.yarnpkg.com/makeerror/-/makeerror-1.0.12.tgz#3e5dd2079a82e812e983cc6610c4a2cb0eaa801a" + integrity sha512-JmqCvUhmt43madlpFzG4BQzG2Z3m6tvQDNKdClZnO3VbIudJYmxsT0FNJMeiB2+JTSlTQTSbU8QdesVmwJcmLg== + dependencies: + tmpl "1.0.5" + +map-obj@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" + integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== + +map-obj@^4.0.0: + version "4.3.0" + resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a" + integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ== + +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + +media-typer@0.3.0: + version "0.3.0" + resolved "https://registry.yarnpkg.com/media-typer/-/media-typer-0.3.0.tgz#8710d7af0aa626f8fffa1ce00168545263255748" + integrity sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ== + +meow@^8.0.0, meow@^8.1.2: + version "8.1.2" + resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897" + integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q== + dependencies: + "@types/minimist" "^1.2.0" + camelcase-keys "^6.2.2" + decamelize-keys "^1.1.0" + hard-rejection "^2.1.0" + minimist-options "4.1.0" + normalize-package-data "^3.0.0" + read-pkg-up "^7.0.1" + redent "^3.0.0" + trim-newlines "^3.0.0" + type-fest "^0.18.0" + yargs-parser "^20.2.3" + +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== + +merge-stream@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" + integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== + +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + +methods@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" + integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== + +micromatch@^4.0.4, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== + dependencies: + braces "^3.0.3" + picomatch "^2.3.1" + +mime-db@1.52.0: + version "1.52.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" + integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== + +"mime-db@>= 1.43.0 < 2", mime-db@^1.28.0: + version "1.54.0" + resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.54.0.tgz#cddb3ee4f9c64530dff640236661d42cb6a314f5" + integrity sha512-aU5EJuIN2WDemCcAp2vFBfp/m4EAhWJnUNSSw0ixs7/kXbd6Pg64EmwJkNdFhB8aWt1sH2CTXrLxo/iAGV3oPQ== + +mime-types@^2.1.12, mime-types@~2.1.19, mime-types@~2.1.24, mime-types@~2.1.34: + version "2.1.35" + resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" + integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== + dependencies: + mime-db "1.52.0" + +mime@1.6.0: + version "1.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1" + integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg== + +mime@2.6.0: + version "2.6.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-2.6.0.tgz#a2a682a95cd4d0cb1d6257e28f83da7e35800367" + integrity sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg== + +mime@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/mime/-/mime-3.0.0.tgz#b374550dca3a0c18443b0c950a6a58f1931cf7a7" + integrity sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A== + +mimic-fn@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" + integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== + +mimic-response@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +mimic-response@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" + integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ== + +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + +"minimatch@2 || 3", minimatch@^3.0.4, minimatch@^3.0.5, minimatch@^3.1.1, minimatch@^3.1.2: + version "3.1.2" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" + integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== + dependencies: + brace-expansion "^1.1.7" + +minimatch@7.4.6: + version "7.4.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-7.4.6.tgz#845d6f254d8f4a5e4fd6baf44d5f10c8448365fb" + integrity sha512-sBz8G/YjVniEz6lKPNpKxXwazJe4c19fEfV2GDMX6AjFz+MX9uDWIZW8XreVhkFW3fkIdTv/gxWr/Kks5FFAVw== + dependencies: + brace-expansion "^2.0.1" + +minimatch@9.0.3: + version "9.0.3" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.3.tgz#a6e00c3de44c3a542bfaae70abfc22420a6da825" + integrity sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^5.0.1: + version "5.1.6" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-5.1.6.tgz#1cfcb8cf5522ea69952cd2af95ae09477f122a96" + integrity sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g== + dependencies: + brace-expansion "^2.0.1" + +minimatch@^9.0.3, minimatch@^9.0.4: + version "9.0.5" + resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-9.0.5.tgz#d74f9dd6b57d83d8e98cfb82133b03978bc929e5" + integrity sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow== + dependencies: + brace-expansion "^2.0.1" + +minimist-options@4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619" + integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A== + dependencies: + arrify "^1.0.1" + is-plain-obj "^1.1.0" + kind-of "^6.0.3" + +minimist@^1.2.5, minimist@^1.2.6: + version "1.2.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" + integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== + +mkdirp@1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-1.0.4.tgz#3eb5ed62622756d79a5f0e2a221dfebad75c2f7e" + integrity sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw== + +mkdirp@~0.5.1: + version "0.5.6" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.6.tgz#7def03d2432dcae4ba1d611445c48396062255f6" + integrity sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw== + dependencies: + minimist "^1.2.6" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +ms@2.1.3, ms@^2.1.1, ms@^2.1.3: + version "2.1.3" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" + integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== + +mute-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-1.0.0.tgz#e31bd9fe62f0aed23520aa4324ea6671531e013e" + integrity sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA== + +mv@2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/mv/-/mv-2.1.1.tgz#ae6ce0d6f6d5e0a4f7d893798d03c1ea9559b6a2" + integrity sha512-at/ZndSy3xEGJ8i0ygALh8ru9qy7gWW1cmkaqBN29JmMlIvM//MEO9y1sk/avxuwnPcfhkejkLsuPxH81BrkSg== + dependencies: + mkdirp "~0.5.1" + ncp "~2.0.0" + rimraf "~2.4.0" + +natural-compare@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/natural-compare/-/natural-compare-1.4.0.tgz#4abebfeed7541f2c27acfb29bdbbd15c8d5ba4f7" + integrity sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw== + +ncp@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ncp/-/ncp-2.0.0.tgz#195a21d6c46e361d2fb1281ba38b91e9df7bdbb3" + integrity sha512-zIdGUrPRFTUELUvr3Gmc7KZ2Sw/h1PiVM0Af/oHB6zgnV1ikqSfRk+TOufi79aHYCW3NiOXmr1BP5nWbzojLaA== + +negotiator@0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.3.tgz#58e323a72fedc0d6f9cd4d31fe49f51479590ccd" + integrity sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg== + +negotiator@~0.6.4: + version "0.6.4" + resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.4.tgz#777948e2452651c570b712dd01c23e262713fff7" + integrity sha512-myRT3DiWPHqho5PrJaIRyaMv2kgYf0mUVgBNOYMuCH5Ki1yEiQaf/ZJuQ62nvpc44wL5WDbTX7yGJi1Neevw8w== + +neo-async@^2.6.2: + version "2.6.2" + resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" + integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== + +node-fetch@cjs: + version "2.6.7" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.7.tgz#24de9fba827e3b4ae44dc8b20256a379160052ad" + integrity sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ== + dependencies: + whatwg-url "^5.0.0" + +node-int64@^0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" + integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== + +node-machine-id@1.1.12: + version "1.1.12" + resolved "https://registry.yarnpkg.com/node-machine-id/-/node-machine-id-1.1.12.tgz#37904eee1e59b320bb9c5d6c0a59f3b469cb6267" + integrity sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ== + +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== + +normalize-package-data@^2.5.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" + integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== + dependencies: + hosted-git-info "^2.1.4" + resolve "^1.10.0" + semver "2 || 3 || 4 || 5" + validate-npm-package-license "^3.0.1" + +normalize-package-data@^3.0.0: + version "3.0.3" + resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e" + integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA== + dependencies: + hosted-git-info "^4.0.1" + is-core-module "^2.5.0" + semver "^7.3.4" + validate-npm-package-license "^3.0.1" + +normalize-path@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/normalize-path/-/normalize-path-3.0.0.tgz#0dcd69ff23a1c9b11fd0978316644a0388216a65" + integrity sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA== + +normalize-url@^6.0.1: + version "6.1.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-6.1.0.tgz#40d0885b535deffe3f3147bec877d05fe4c5668a" + integrity sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A== + +npm-package-arg@11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/npm-package-arg/-/npm-package-arg-11.0.1.tgz#f208b0022c29240a1c532a449bdde3f0a4708ebc" + integrity sha512-M7s1BD4NxdAvBKUPqqRW957Xwcl/4Zvo8Aj+ANrzvIPzGJZElrH7Z//rSaec2ORcND6FHHLnZeY8qgTpXDMFQQ== + dependencies: + hosted-git-info "^7.0.0" + proc-log "^3.0.0" + semver "^7.3.5" + validate-npm-package-name "^5.0.0" + +npm-run-path@^2.0.0: + version "2.0.2" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" + integrity sha512-lJxZYlT4DW/bRUtFh1MQIWqmLwQfAxnqWG4HhEdjMlkrJYnJn0Jrr2u3mgxqaWsdiBc76TYkTG/mhrnYTuzfHw== + dependencies: + path-key "^2.0.0" + +npm-run-path@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" + integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== + dependencies: + path-key "^3.0.0" + +nwsapi@^2.2.2: + version "2.2.20" + resolved "https://registry.yarnpkg.com/nwsapi/-/nwsapi-2.2.20.tgz#22e53253c61e7b0e7e93cef42c891154bcca11ef" + integrity sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA== + +nx@20.0.1: + version "20.0.1" + resolved "https://registry.yarnpkg.com/nx/-/nx-20.0.1.tgz#85ff1a951f28d1084be7e43b39ac344c437986e9" + integrity sha512-BWlmIxfPanl44PJmy8b2AhGyWSWhKumPyAQ2pTWgaIQFWgRqkVlNfUmcfb1/nCxQRHYUBd7xceg/k2dH26p4Xg== + dependencies: + "@napi-rs/wasm-runtime" "0.2.4" + "@yarnpkg/lockfile" "^1.1.0" + "@yarnpkg/parsers" "3.0.0-rc.46" + "@zkochan/js-yaml" "0.0.7" + axios "^1.7.4" + chalk "^4.1.0" + cli-cursor "3.1.0" + cli-spinners "2.6.1" + cliui "^8.0.1" + dotenv "~16.4.5" + dotenv-expand "~11.0.6" + enquirer "~2.3.6" + figures "3.2.0" + flat "^5.0.2" + front-matter "^4.0.2" + ignore "^5.0.4" + jest-diff "^29.4.1" + jsonc-parser "3.2.0" + lines-and-columns "2.0.3" + minimatch "9.0.3" + node-machine-id "1.1.12" + npm-run-path "^4.0.1" + open "^8.4.0" + ora "5.3.0" + semver "^7.5.3" + string-width "^4.2.3" + tar-stream "~2.2.0" + tmp "~0.2.1" + tsconfig-paths "^4.1.2" + tslib "^2.3.0" + yargs "^17.6.2" + yargs-parser "21.1.1" + optionalDependencies: + "@nx/nx-darwin-arm64" "20.0.1" + "@nx/nx-darwin-x64" "20.0.1" + "@nx/nx-freebsd-x64" "20.0.1" + "@nx/nx-linux-arm-gnueabihf" "20.0.1" + "@nx/nx-linux-arm64-gnu" "20.0.1" + "@nx/nx-linux-arm64-musl" "20.0.1" + "@nx/nx-linux-x64-gnu" "20.0.1" + "@nx/nx-linux-x64-musl" "20.0.1" + "@nx/nx-win32-arm64-msvc" "20.0.1" + "@nx/nx-win32-x64-msvc" "20.0.1" + +object-assign@^4: + version "4.1.1" + resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" + integrity sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg== + +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== + +on-exit-leak-free@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-0.2.0.tgz#b39c9e3bf7690d890f4861558b0d7b90a442d209" + integrity sha512-dqaz3u44QbRXQooZLTUKU41ZrzYrcvLISVgbrzbyCMxpmSLJvZ3ZamIJIZ29P6OhZIkNIQKosdeM6t1LYbA9hg== + +on-exit-leak-free@^2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/on-exit-leak-free/-/on-exit-leak-free-2.1.2.tgz#fed195c9ebddb7d9e4c3842f93f281ac8dadd3b8" + integrity sha512-0eJJY6hXLGf1udHwfNftBqH+g73EU4B504nZeKpz1sYRKafAghwxEJunB2O7rDZkL4PGfsMVnTXZ2EjibbqcsA== + +on-finished@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/on-finished/-/on-finished-2.4.1.tgz#58c8c44116e54845ad57f14ab10b03533184ac3f" + integrity sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg== + dependencies: + ee-first "1.1.1" + +on-headers@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/on-headers/-/on-headers-1.0.2.tgz#772b0ae6aaa525c399e489adfad90c403eb3c28f" + integrity sha512-pZAE+FJLoyITytdqK0U5s+FIpjN0JP3OzFi/u8Rx+EV5/W+JTWGXG8xFzevE7AjBfDqHv/8vL8qQsIhHnqRkrA== + +once@^1.3.0, once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== + dependencies: + wrappy "1" + +onetime@^5.1.0, onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + +open@^8.4.0: + version "8.4.2" + resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" + integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== + dependencies: + define-lazy-prop "^2.0.0" + is-docker "^2.1.1" + is-wsl "^2.2.0" + +optionator@^0.9.3: + version "0.9.4" + resolved "https://registry.yarnpkg.com/optionator/-/optionator-0.9.4.tgz#7ea1c1a5d91d764fb282139c88fe11e182a3a734" + integrity sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g== + dependencies: + deep-is "^0.1.3" + fast-levenshtein "^2.0.6" + levn "^0.4.1" + prelude-ls "^1.2.1" + type-check "^0.4.0" + word-wrap "^1.2.5" + +ora@5.3.0: + version "5.3.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-5.3.0.tgz#fb832899d3a1372fe71c8b2c534bbfe74961bb6f" + integrity sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g== + dependencies: + bl "^4.0.3" + chalk "^4.1.0" + cli-cursor "^3.1.0" + cli-spinners "^2.5.0" + is-interactive "^1.0.0" + log-symbols "^4.0.0" + strip-ansi "^6.0.0" + wcwidth "^1.0.1" + +os-filter-obj@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/os-filter-obj/-/os-filter-obj-2.0.0.tgz#1c0b62d5f3a2442749a2d139e6dddee6e81d8d16" + integrity sha512-uksVLsqG3pVdzzPvmAHpBK0wKxYItuzZr7SziusRPoz67tGV8rL1szZ6IdeUrbqLjGDwApBtN29eEE3IqGHOjg== + dependencies: + arch "^2.1.0" + +os-tmpdir@~1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" + integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g== + +p-cancelable@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-2.1.1.tgz#aab7fbd416582fa32a3db49859c122487c5ed2cf" + integrity sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg== + +p-finally@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/p-finally/-/p-finally-1.0.0.tgz#3fbcfb15b899a44123b34b6dcc18b724336a2cae" + integrity sha512-LICb2p9CB7FS+0eR1oqWnHhp0FljGLZCWBE9aix0Uye9W8LTQPwMTYVGWQWIw9RdQiDg4+epXQODwIYJtSJaow== + +p-limit@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" + integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== + dependencies: + p-try "^2.0.0" + +p-limit@^3.0.2, p-limit@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b" + integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ== + dependencies: + yocto-queue "^0.1.0" + +p-locate@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07" + integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A== + dependencies: + p-limit "^2.2.0" + +p-locate@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834" + integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw== + dependencies: + p-limit "^3.0.2" + +p-try@^2.0.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6" + integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ== + +pako@~0.2.0: + version "0.2.9" + resolved "https://registry.yarnpkg.com/pako/-/pako-0.2.9.tgz#f3f7522f4ef782348da8161bad9ecfd51bf83a75" + integrity sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA== + +parent-module@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2" + integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g== + dependencies: + callsites "^3.0.0" + +parse-json@^5.0.0, parse-json@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd" + integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg== + dependencies: + "@babel/code-frame" "^7.0.0" + error-ex "^1.3.1" + json-parse-even-better-errors "^2.3.0" + lines-and-columns "^1.1.6" + +parse5@^7.0.0, parse5@^7.1.1: + version "7.3.0" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.3.0.tgz#d7e224fa72399c7a175099f45fc2ad024b05ec05" + integrity sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw== + dependencies: + entities "^6.0.0" + +parseurl@~1.3.3: + version "1.3.3" + resolved "https://registry.yarnpkg.com/parseurl/-/parseurl-1.3.3.tgz#9da19e7bee8d12dff0513ed5b76957793bc2e8d4" + integrity sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ== + +path-exists@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" + integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== + +path-is-absolute@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" + integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== + +path-key@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-2.0.1.tgz#411cadb574c5a140d3a4b1910d40d80cc9f40b40" + integrity sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw== + +path-key@^3.0.0, path-key@^3.1.0: + version "3.1.1" + resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" + integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== + +path-parse@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" + integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== + +path-to-regexp@0.1.10: + version "0.1.10" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.10.tgz#67e9108c5c0551b9e5326064387de4763c4d5f8b" + integrity sha512-7lf7qcQidTku0Gu3YDPc8DJ1q7OOucfa/BSsIwjuh56VU7katFvuM8hULfkwB3Fns/rsVF7PwPKVw1sl5KQS9w== + +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + +peek-readable@^5.1.3: + version "5.4.2" + resolved "https://registry.yarnpkg.com/peek-readable/-/peek-readable-5.4.2.tgz#aff1e1ba27a7d6911ddb103f35252ffc1787af49" + integrity sha512-peBp3qZyuS6cNIJ2akRNG1uo1WJ1d0wTxg/fxMdZ0BqCVhx242bSFHM9eNqflfJVS9SsgkzgT/1UgnsurBOTMg== + +peek-stream@^1.1.0: + version "1.1.3" + resolved "https://registry.yarnpkg.com/peek-stream/-/peek-stream-1.1.3.tgz#3b35d84b7ccbbd262fff31dc10da56856ead6d67" + integrity sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA== + dependencies: + buffer-from "^1.0.0" + duplexify "^3.5.0" + through2 "^2.0.3" + +performance-now@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" + integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== + +picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== + +picomatch@^2.0.4, picomatch@^2.2.3, picomatch@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" + integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== + +pify@^2.2.0: + version "2.3.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" + integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== + +pino-abstract-transport@1.1.0, pino-abstract-transport@v1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-1.1.0.tgz#083d98f966262164504afb989bccd05f665937a8" + integrity sha512-lsleG3/2a/JIWUtf9Q5gUNErBqwIu1tUKTT3dUzaf5DySw9ra1wcqKjJjLX1VTY64Wk1eEOYsVGSaGfCK85ekA== + dependencies: + readable-stream "^4.0.0" + split2 "^4.0.0" + +pino-abstract-transport@v0.5.0: + version "0.5.0" + resolved "https://registry.yarnpkg.com/pino-abstract-transport/-/pino-abstract-transport-0.5.0.tgz#4b54348d8f73713bfd14e3dc44228739aa13d9c0" + integrity sha512-+KAgmVeqXYbTtU2FScx1XS3kNyfZ5TrXY07V96QnUSFqo2gAqlvmaxH67Lj7SWazqsMabf+58ctdTcBgnOLUOQ== + dependencies: + duplexify "^4.1.2" + split2 "^4.0.0" + +pino-std-serializers@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-4.0.0.tgz#1791ccd2539c091ae49ce9993205e2cd5dbba1e2" + integrity sha512-cK0pekc1Kjy5w9V2/n+8MkZwusa6EyyxfeQCB799CQRhRt/CqYKiWs5adeu8Shve2ZNffvfC/7J64A2PJo1W/Q== + +pino-std-serializers@^6.0.0: + version "6.2.2" + resolved "https://registry.yarnpkg.com/pino-std-serializers/-/pino-std-serializers-6.2.2.tgz#d9a9b5f2b9a402486a5fc4db0a737570a860aab3" + integrity sha512-cHjPPsE+vhj/tnhCy/wiMh3M3z3h/j15zHQX+S9GkTBgqJuTuJzYJ4gUyACLhDaJ7kk9ba9iRDmbH2tJU03OiA== + +pino@7.11.0: + version "7.11.0" + resolved "https://registry.yarnpkg.com/pino/-/pino-7.11.0.tgz#0f0ea5c4683dc91388081d44bff10c83125066f6" + integrity sha512-dMACeu63HtRLmCG8VKdy4cShCPKaYDR4youZqoSWLxl5Gu99HUw8bw75thbPv9Nip+H+QYX8o3ZJbTdVZZ2TVg== + dependencies: + atomic-sleep "^1.0.0" + fast-redact "^3.0.0" + on-exit-leak-free "^0.2.0" + pino-abstract-transport v0.5.0 + pino-std-serializers "^4.0.0" + process-warning "^1.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.1.0" + safe-stable-stringify "^2.1.0" + sonic-boom "^2.2.1" + thread-stream "^0.15.1" + +pino@8.17.2: + version "8.17.2" + resolved "https://registry.yarnpkg.com/pino/-/pino-8.17.2.tgz#0ed20175623a69d31664a1e8a5f85476272224be" + integrity sha512-LA6qKgeDMLr2ux2y/YiUt47EfgQ+S9LznBWOJdN3q1dx2sv0ziDLUBeVpyVv17TEcGCBuWf0zNtg3M5m1NhhWQ== + dependencies: + atomic-sleep "^1.0.0" + fast-redact "^3.1.1" + on-exit-leak-free "^2.1.0" + pino-abstract-transport v1.1.0 + pino-std-serializers "^6.0.0" + process-warning "^3.0.0" + quick-format-unescaped "^4.0.3" + real-require "^0.2.0" + safe-stable-stringify "^2.3.1" + sonic-boom "^3.7.0" + thread-stream "^2.0.0" + +pirates@^4.0.4, pirates@^4.0.6: + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== + +piscina@^4.3.0: + version "4.9.2" + resolved "https://registry.yarnpkg.com/piscina/-/piscina-4.9.2.tgz#80f2c2375231720337c703e443941adfac8caf75" + integrity sha512-Fq0FERJWFEUpB4eSY59wSNwXD4RYqR+nR/WiEVcZW8IWfVBxJJafcgTEZDQo8k3w0sUarJ8RyVbbUF4GQ2LGbQ== + optionalDependencies: + "@napi-rs/nice" "^1.0.1" + +pkg-dir@^4.2.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3" + integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ== + dependencies: + find-up "^4.0.0" + +pkginfo@0.4.1: + version "0.4.1" + resolved "https://registry.yarnpkg.com/pkginfo/-/pkginfo-0.4.1.tgz#b5418ef0439de5425fc4995042dced14fb2a84ff" + integrity sha512-8xCNE/aT/EXKenuMDZ+xTVwkT8gsoHN2z/Q29l80u0ppGEXVvsKRzNMbtKhg8LS8k1tJLAHHylf6p4VFmP6XUQ== + +prelude-ls@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" + integrity sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g== + +prettier@2.8.0: + version "2.8.0" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.0.tgz#c7df58393c9ba77d6fba3921ae01faf994fb9dc9" + integrity sha512-9Lmg8hTFZKG0Asr/kW9Bp8tJjRVluO8EJQVfY2T7FMw9T5jy4I/Uvx0Rca/XWf50QQ1/SS48+6IJWnrb+2yemA== + +pretty-format@^29.0.0, pretty-format@^29.7.0: + version "29.7.0" + resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812" + integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ== + dependencies: + "@jest/schemas" "^29.6.3" + ansi-styles "^5.0.0" + react-is "^18.0.0" + +proc-log@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/proc-log/-/proc-log-3.0.0.tgz#fb05ef83ccd64fd7b20bbe9c8c1070fc08338dd8" + integrity sha512-++Vn7NS4Xf9NacaU9Xq3URUuqZETPsf8L4j5/ckhaRYsfPeRyzGw+iDjFhV/Jr3uNmTvvddEJFWh5R1gRgUH8A== + +process-nextick-args@~2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" + integrity sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag== + +process-warning@1.0.0, process-warning@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-1.0.0.tgz#980a0b25dc38cd6034181be4b7726d89066b4616" + integrity sha512-du4wfLyj4yCZq1VupnVSZmRsPJsNuxoDQFdCFHLaYiEbFBD7QE0a+I4D7hOxrVnh78QE/YipFAj9lXHiXocV+Q== + +process-warning@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/process-warning/-/process-warning-3.0.0.tgz#96e5b88884187a1dce6f5c3166d611132058710b" + integrity sha512-mqn0kFRl0EoqhnL0GQ0veqFHyIN1yig9RHh/InzORTUiZHFRAur+aMtRkELNwGs9aNwKS6tg/An4NYBPGwvtzQ== + +process@^0.11.10: + version "0.11.10" + resolved "https://registry.yarnpkg.com/process/-/process-0.11.10.tgz#7332300e840161bda3e69a1d1d91a7d4bc16f182" + integrity sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A== + +prompts@^2.0.1: + version "2.4.2" + resolved "https://registry.yarnpkg.com/prompts/-/prompts-2.4.2.tgz#7b57e73b3a48029ad10ebd44f74b01722a4cb069" + integrity sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q== + dependencies: + kleur "^3.0.3" + sisteransi "^1.0.5" + +proxy-addr@~2.0.7: + version "2.0.7" + resolved "https://registry.yarnpkg.com/proxy-addr/-/proxy-addr-2.0.7.tgz#f19fe69ceab311eeb94b42e70e8c2070f9ba1025" + integrity sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg== + dependencies: + forwarded "0.2.0" + ipaddr.js "1.9.1" + +proxy-from-env@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.1.0.tgz#e102f16ca355424865755d2c9e8ea4f24d58c3e2" + integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== + +pseudomap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3" + integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ== + +psl@^1.1.33: + version "1.15.0" + resolved "https://registry.yarnpkg.com/psl/-/psl-1.15.0.tgz#bdace31896f1d97cec6a79e8224898ce93d974c6" + integrity sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w== + dependencies: + punycode "^2.3.1" + +pump@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/pump/-/pump-2.0.1.tgz#12399add6e4cf7526d973cbc8b5ce2e2908b3909" + integrity sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pump@^3.0.0: + version "3.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +pumpify@^1.3.3: + version "1.5.1" + resolved "https://registry.yarnpkg.com/pumpify/-/pumpify-1.5.1.tgz#36513be246ab27570b1a374a5ce278bfd74370ce" + integrity sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ== + dependencies: + duplexify "^3.6.0" + inherits "^2.0.3" + pump "^2.0.0" + +punycode@^2.1.0, punycode@^2.1.1, punycode@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.1.tgz#027422e2faec0b25e1549c3e1bd8309b9133b6e5" + integrity sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg== + +pure-rand@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" + integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== + +q@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/q/-/q-1.5.1.tgz#7e32f75b41381291d04611f1bf14109ac00651d7" + integrity sha512-kV/CThkXo6xyFEZUugw/+pIOywXcDbFYgSct5cT3gqlbkBE1SJdwy6UQoZvodiWF/ckQLZyDE/Bu1M6gVu5lVw== + +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== + dependencies: + side-channel "^1.0.6" + +querystringify@^2.1.1: + version "2.2.0" + resolved "https://registry.yarnpkg.com/querystringify/-/querystringify-2.2.0.tgz#3345941b4153cb9d082d8eee4cda2016a9aef7f6" + integrity sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ== + +queue-microtask@^1.2.2: + version "1.2.3" + resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" + integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== + +quick-format-unescaped@^4.0.3: + version "4.0.4" + resolved "https://registry.yarnpkg.com/quick-format-unescaped/-/quick-format-unescaped-4.0.4.tgz#93ef6dd8d3453cbc7970dd614fad4c5954d6b5a7" + integrity sha512-tYC1Q1hgyRuHgloV/YXs2w15unPVh8qfu/qCTfhTYamaw7fyhumKa2yGpdSo87vY32rIclj+4fWYQXUMs9EHvg== + +quick-lru@^4.0.1: + version "4.0.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f" + integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g== + +quick-lru@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-5.1.1.tgz#366493e6b3e42a3a6885e2e99d18f80fb7a8c932" + integrity sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA== + +range-parser@~1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" + integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== + +raw-body@2.5.2: + version "2.5.2" + resolved "https://registry.yarnpkg.com/raw-body/-/raw-body-2.5.2.tgz#99febd83b90e08975087e8f1f9419a149366b68a" + integrity sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA== + dependencies: + bytes "3.1.2" + http-errors "2.0.0" + iconv-lite "0.4.24" + unpipe "1.0.0" + +react-is@^18.0.0: + version "18.3.1" + resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e" + integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg== + +read-pkg-up@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507" + integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg== + dependencies: + find-up "^4.1.0" + read-pkg "^5.2.0" + type-fest "^0.8.1" + +read-pkg@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc" + integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg== + dependencies: + "@types/normalize-package-data" "^2.4.0" + normalize-package-data "^2.5.0" + parse-json "^5.0.0" + type-fest "^0.6.0" + +readable-stream@3, readable-stream@^3.0.0, readable-stream@^3.1.1, readable-stream@^3.4.0: + version "3.6.2" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" + integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== + dependencies: + inherits "^2.0.3" + string_decoder "^1.1.1" + util-deprecate "^1.0.1" + +readable-stream@^2.0.0, readable-stream@~2.3.6: + version "2.3.8" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.8.tgz#91125e8042bba1b9887f49345f6277027ce8be9b" + integrity sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +readable-stream@^4.0.0, readable-stream@^4.7.0: + version "4.7.0" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-4.7.0.tgz#cedbd8a1146c13dfff8dab14068028d58c15ac91" + integrity sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg== + dependencies: + abort-controller "^3.0.0" + buffer "^6.0.3" + events "^3.3.0" + process "^0.11.10" + string_decoder "^1.3.0" + +readable-web-to-node-stream@^3.0.2: + version "3.0.4" + resolved "https://registry.yarnpkg.com/readable-web-to-node-stream/-/readable-web-to-node-stream-3.0.4.tgz#392ba37707af5bf62d725c36c1b5d6ef4119eefc" + integrity sha512-9nX56alTf5bwXQ3ZDipHJhusu9NTQJ/CVPtb/XHAJCXihZeitfJvIRS4GqQ/mfIoOE3IelHMrpayVrosdHBuLw== + dependencies: + readable-stream "^4.7.0" + +real-require@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.1.0.tgz#736ac214caa20632847b7ca8c1056a0767df9381" + integrity sha512-r/H9MzAWtrv8aSVjPCMFpDMl5q66GqtmmRkRjpHTsp4zBAa+snZyiQNlMONiUmEJcsnaw0wCauJ2GWODr/aFkg== + +real-require@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/real-require/-/real-require-0.2.0.tgz#209632dea1810be2ae063a6ac084fee7e33fba78" + integrity sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg== + +redent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f" + integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg== + dependencies: + indent-string "^4.0.0" + strip-indent "^3.0.0" + +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== + dependencies: + regenerate "^1.4.2" + +regenerate@^1.4.2: + version "1.4.2" + resolved "https://registry.yarnpkg.com/regenerate/-/regenerate-1.4.2.tgz#b9346d8827e8f5a32f7ba29637d398b69014848a" + integrity sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A== + +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== + dependencies: + regenerate "^1.4.2" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" + unicode-match-property-ecmascript "^2.0.0" + unicode-match-property-value-ecmascript "^2.1.0" + +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== + dependencies: + jsesc "~3.0.2" + +require-directory@^2.1.1: + version "2.1.1" + resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" + integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q== + +require-from-string@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909" + integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw== + +requires-port@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" + integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== + +resolve-alpn@^1.0.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" + integrity sha512-0a1F4l73/ZFZOakJnQ3FvkJ2+gSTQWz/r2KE5OdDY0TxPm5h4GkqkWWfM47T7HsbnOtcJVEF4epCVy6u7Q3K+g== + +resolve-cwd@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/resolve-cwd/-/resolve-cwd-3.0.0.tgz#0f0075f1bb2544766cf73ba6a6e2adfebcb13f2d" + integrity sha512-OrZaX2Mb+rJCpH/6CpSqt9xFVpN++x01XnN2ie9g6P5/3xelLAkXWVADpdz1IHD/KFfEXyE6V0U01OQ3UO2rEg== + dependencies: + resolve-from "^5.0.0" + +resolve-from@5.0.0, resolve-from@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69" + integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== + +resolve-from@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6" + integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g== + +resolve-global@1.0.0, resolve-global@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255" + integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw== + dependencies: + global-dirs "^0.1.1" + +resolve.exports@1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-1.1.0.tgz#5ce842b94b05146c0e03076985d1d0e7e48c90c9" + integrity sha512-J1l+Zxxp4XK3LUDZ9m60LRJF/mAe4z6a4xyabPHk7pvK5t35dACV32iIjJDFeWZFfZlO29w6SZ67knR0tHzJtQ== + +resolve.exports@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" + integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== + +resolve@^1.10.0, resolve@^1.12.0, resolve@^1.14.2, resolve@^1.20.0: + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== + dependencies: + is-core-module "^2.16.0" + path-parse "^1.0.7" + supports-preserve-symlinks-flag "^1.0.0" + +responselike@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-2.0.1.tgz#9a0bc8fdc252f3fb1cca68b016591059ba1422bc" + integrity sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw== + dependencies: + lowercase-keys "^2.0.0" + +restore-cursor@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" + integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== + dependencies: + onetime "^5.1.0" + signal-exit "^3.0.2" + +reusify@^1.0.4: + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== + +rimraf@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" + integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== + dependencies: + glob "^7.1.3" + +rimraf@~2.4.0: + version "2.4.5" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.4.5.tgz#ee710ce5d93a8fdb856fb5ea8ff0e2d75934b2da" + integrity sha512-J5xnxTyqaiw06JjMftq7L9ouA448dw/E7dKghkP9WpKNuwmARNNg+Gk8/u5ryb9N/Yo2+z3MCwuqFK/+qPOPfQ== + dependencies: + glob "^6.0.1" + +run-parallel@^1.1.9: + version "1.2.0" + resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" + integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== + dependencies: + queue-microtask "^1.2.2" + +safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: + version "5.2.1" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" + integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +safe-stable-stringify@^2.1.0, safe-stable-stringify@^2.3.1: + version "2.5.0" + resolved "https://registry.yarnpkg.com/safe-stable-stringify/-/safe-stable-stringify-2.5.0.tgz#4ca2f8e385f2831c432a719b108a3bf7af42a1dd" + integrity sha512-b3rppTKm9T+PsVCBEOUR46GWI7fdOs00VKZ1+9c1EWDaDMvjQc6tUwuFyIprgGgTcWoVHSKrU8H31ZHA2e0RHA== + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0", safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: + version "2.1.2" + resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" + integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== + +saxes@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/saxes/-/saxes-6.0.0.tgz#fe5b4a4768df4f14a201b1ba6a65c1f3d9988cc5" + integrity sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA== + dependencies: + xmlchars "^2.2.0" + +semver-regex@^4.0.5: + version "4.0.5" + resolved "https://registry.yarnpkg.com/semver-regex/-/semver-regex-4.0.5.tgz#fbfa36c7ba70461311f5debcb3928821eb4f9180" + integrity sha512-hunMQrEy1T6Jr2uEVjrAIqjwWcQTgOAcIM52C8MY1EZSD3DDNft04XzvYKPqjED65bNVVko0YI38nYeEHCX3yw== + +semver-truncate@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/semver-truncate/-/semver-truncate-3.0.0.tgz#0e3b4825d4a4225d8ae6e7c72231182b42edba40" + integrity sha512-LJWA9kSvMolR51oDE6PN3kALBNaUdkxzAGcexw8gjMA8xr5zUqK0JiR3CgARSqanYF3Z1YHvsErb1KDgh+v7Rg== + dependencies: + semver "^7.3.5" + +"semver@2 || 3 || 4 || 5": + version "5.7.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8" + integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g== + +semver@7.5.4: + version "7.5.4" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" + integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== + dependencies: + lru-cache "^6.0.0" + +semver@7.6.3: + version "7.6.3" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" + integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== + +semver@7.x, semver@^7.3.4, semver@^7.3.5, semver@^7.3.8, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== + +semver@^6.3.0, semver@^6.3.1: + version "6.3.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" + integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== + +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== + dependencies: + debug "2.6.9" + depd "2.0.0" + destroy "1.2.0" + encodeurl "~1.0.2" + escape-html "~1.0.3" + etag "~1.8.1" + fresh "0.5.2" + http-errors "2.0.0" + mime "1.6.0" + ms "2.1.3" + on-finished "2.4.1" + range-parser "~1.2.1" + statuses "2.0.1" + +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== + dependencies: + encodeurl "~2.0.0" + escape-html "~1.0.3" + parseurl "~1.3.3" + send "0.19.0" + +setprototypeof@1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/setprototypeof/-/setprototypeof-1.2.0.tgz#66c9a24a73f9fc28cbe66b09fed3d33dcaf1b424" + integrity sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw== + +shebang-command@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea" + integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg== + dependencies: + shebang-regex "^1.0.0" + +shebang-command@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" + integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== + dependencies: + shebang-regex "^3.0.0" + +shebang-regex@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3" + integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ== + +shebang-regex@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" + integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== + +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.0.6: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" + +signal-exit@^3.0.0, signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: + version "3.0.7" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" + integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== + +signal-exit@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" + integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== + +sisteransi@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/sisteransi/-/sisteransi-1.0.5.tgz#134d681297756437cc05ca01370d3a7a571075ed" + integrity sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg== + +slash@3.0.0, slash@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" + integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== + +sonic-boom@3.8.0: + version "3.8.0" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.8.0.tgz#e442c5c23165df897d77c3c14ef3ca40dec66a66" + integrity sha512-ybz6OYOUjoQQCQ/i4LU8kaToD8ACtYP+Cj5qd2AO36bwbdewxWJ3ArmJ2cr6AvxlL2o0PqnCcPGUgkILbfkaCA== + dependencies: + atomic-sleep "^1.0.0" + +sonic-boom@^2.2.1: + version "2.8.0" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-2.8.0.tgz#c1def62a77425090e6ad7516aad8eb402e047611" + integrity sha512-kuonw1YOYYNOve5iHdSahXPOK49GqwA+LZhI6Wz/l0rP57iKyXXIHaRagOBHAPmGwJC6od2Z9zgvZ5loSgMlVg== + dependencies: + atomic-sleep "^1.0.0" + +sonic-boom@^3.7.0: + version "3.8.1" + resolved "https://registry.yarnpkg.com/sonic-boom/-/sonic-boom-3.8.1.tgz#d5ba8c4e26d6176c9a1d14d549d9ff579a163422" + integrity sha512-y4Z8LCDBuum+PBP3lSV7RHrXscqksve/bi0as7mhwVnBW+/wUqKT/2Kb7um8yqcFy0duYbbPxzt89Zy2nOCaxg== + dependencies: + atomic-sleep "^1.0.0" + +sort-keys-length@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/sort-keys-length/-/sort-keys-length-1.0.1.tgz#9cb6f4f4e9e48155a6aa0671edd336ff1479a188" + integrity sha512-GRbEOUqCxemTAk/b32F2xa8wDTs+Z1QHOkbhJDQTvv/6G3ZkbJ+frYWsTcc7cBB3Fu4wy4XlLCuNtJuMn7Gsvw== + dependencies: + sort-keys "^1.0.0" + +sort-keys@^1.0.0: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sort-keys/-/sort-keys-1.1.2.tgz#441b6d4d346798f1b4e49e8920adfba0e543f9ad" + integrity sha512-vzn8aSqKgytVik0iwdBEi+zevbTYZogewTUM6dtpmGwEcdzbub/TX4bCzRhebDCRC3QzXgJsLRKB2V/Oof7HXg== + dependencies: + is-plain-obj "^1.0.0" + +source-map-support@0.5.13: + version "0.5.13" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" + integrity sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@0.5.19: + version "0.5.19" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" + integrity sha512-Wonm7zOCIJzBGQdB+thsPar0kYuCIzYvxZwlBa87yi/Mdjv7Tip2cyVbLj5o0cFPN4EVkuTwb3GDDyUx2DGnGw== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map-support@^0.5.21: + version "0.5.21" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.21.tgz#04fe7c7f9e1ed2d662233c28cb2b35b9f63f6e4f" + integrity sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w== + dependencies: + buffer-from "^1.0.0" + source-map "^0.6.0" + +source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.1: + version "0.6.1" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" + integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== + +source-map@^0.7.3: + version "0.7.4" + resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.7.4.tgz#a9bbe705c9d8846f4e08ff6765acf0f1b0898656" + integrity sha512-l3BikUxvPOcn5E74dZiq5BGsTb5yEwhaTSzccU6t4sDOH8NWJCstKO5QT2CvtFoK6F0saL7p9xHAqHOlCPJygA== + +spdx-correct@^3.0.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c" + integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA== + dependencies: + spdx-expression-parse "^3.0.0" + spdx-license-ids "^3.0.0" + +spdx-exceptions@^2.1.0: + version "2.5.0" + resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz#5d607d27fc806f66d7b64a766650fa890f04ed66" + integrity sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w== + +spdx-expression-parse@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" + integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== + dependencies: + spdx-exceptions "^2.1.0" + spdx-license-ids "^3.0.0" + +spdx-license-ids@^3.0.0: + version "3.0.21" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz#6d6e980c9df2b6fc905343a3b2d702a6239536c3" + integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== + +split2@^3.0.0, split2@^3.2.2: + version "3.2.2" + resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f" + integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg== + dependencies: + readable-stream "^3.0.0" + +split2@^4.0.0: + version "4.2.0" + resolved "https://registry.yarnpkg.com/split2/-/split2-4.2.0.tgz#c9c5920904d148bab0b9f67145f245a86aadbfa4" + integrity sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg== + +sprintf-js@~1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c" + integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g== + +sshpk@^1.18.0: + version "1.18.0" + resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.18.0.tgz#1663e55cddf4d688b86a46b77f0d5fe363aba028" + integrity sha512-2p2KJZTSqQ/I3+HX42EpYOa2l3f8Erv8MWKsy2I9uf4wA7yFIkXRffYdsx86y6z4vHtV8u7g+pPlr8/4ouAxsQ== + dependencies: + asn1 "~0.2.3" + assert-plus "^1.0.0" + bcrypt-pbkdf "^1.0.0" + dashdash "^1.12.0" + ecc-jsbn "~0.1.1" + getpass "^0.1.1" + jsbn "~0.1.0" + safer-buffer "^2.0.2" + tweetnacl "~0.14.0" + +stack-utils@^2.0.3: + version "2.0.6" + resolved "https://registry.yarnpkg.com/stack-utils/-/stack-utils-2.0.6.tgz#aaf0748169c02fc33c8232abccf933f54a1cc34f" + integrity sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ== + dependencies: + escape-string-regexp "^2.0.0" + +statuses@2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" + integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== + +steno@^0.4.1: + version "0.4.4" + resolved "https://registry.yarnpkg.com/steno/-/steno-0.4.4.tgz#071105bdfc286e6615c0403c27e9d7b5dcb855cb" + integrity sha512-EEHMVYHNXFHfGtgjNITnka0aHhiAlo93F7z2/Pwd+g0teG9CnM3JIINM7hVVB5/rhw9voufD7Wukwgtw2uqh6w== + dependencies: + graceful-fs "^4.1.3" + +stream-shift@^1.0.0, stream-shift@^1.0.2: + version "1.0.3" + resolved "https://registry.yarnpkg.com/stream-shift/-/stream-shift-1.0.3.tgz#85b8fab4d71010fc3ba8772e8046cc49b8a3864b" + integrity sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ== + +streamx@^2.15.0: + version "2.22.0" + resolved "https://registry.yarnpkg.com/streamx/-/streamx-2.22.0.tgz#cd7b5e57c95aaef0ff9b2aef7905afa62ec6e4a7" + integrity sha512-sLh1evHOzBy/iWRiR6d1zRcLao4gGZr3C1kzNz4fopCOKJb6xD9ub8Mpi9Mr1R6id5o43S+d93fI48UC5uM9aw== + dependencies: + fast-fifo "^1.3.2" + text-decoder "^1.1.0" + optionalDependencies: + bare-events "^2.2.0" + +string-length@^4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/string-length/-/string-length-4.0.2.tgz#a8a8dc7bd5c1a82b9b3c8b87e125f66871b6e57a" + integrity sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ== + dependencies: + char-regex "^1.0.2" + strip-ansi "^6.0.0" + +string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3: + version "4.2.3" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" + integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== + dependencies: + emoji-regex "^8.0.0" + is-fullwidth-code-point "^3.0.0" + strip-ansi "^6.0.1" + +string_decoder@^1.1.1, string_decoder@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" + integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== + dependencies: + safe-buffer "~5.2.0" + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +strip-ansi@^6.0.0, strip-ansi@^6.0.1: + version "6.0.1" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" + integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== + dependencies: + ansi-regex "^5.0.1" + +strip-bom@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" + integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== + +strip-bom@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-4.0.0.tgz#9c3505c1db45bcedca3d9cf7a16f5c5aa3901878" + integrity sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w== + +strip-eof@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" + integrity sha512-7FCwGGmx8mD5xQd3RPUvnSpUXHM3BWuzjtpD4TXsfcZ9EL4azvVVUscFYwD9nx8Kh+uCBC00XBtAykoMHwTh8Q== + +strip-final-newline@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" + integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== + +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + +strip-json-comments@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-3.1.1.tgz#31f1281b3832630434831c310c01cccda8cbe006" + integrity sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig== + +strip-outer@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/strip-outer/-/strip-outer-2.0.0.tgz#c45c724ed9b1ff6be5f660503791404f4714084b" + integrity sha512-A21Xsm1XzUkK0qK1ZrytDUvqsQWict2Cykhvi0fBQntGG5JSprESasEyV1EZ/4CiR5WB5KjzLTrP/bO37B0wPg== + +strtok3@^7.0.0-alpha.9: + version "7.1.1" + resolved "https://registry.yarnpkg.com/strtok3/-/strtok3-7.1.1.tgz#f548fd9dc59d0a76d5567ff8c16be31221f29dfc" + integrity sha512-mKX8HA/cdBqMKUr0MMZAFssCkIGoZeSCMXgnt79yKxNFguMLVFgRe6wB+fsL0NmoHDbeyZXczy7vEPSoo3rkzg== + dependencies: + "@tokenizer/token" "^0.3.0" + peek-readable "^5.1.3" + +supports-color@^7.1.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" + integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== + dependencies: + has-flag "^4.0.0" + +supports-color@^8.0.0: + version "8.1.1" + resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" + integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== + dependencies: + has-flag "^4.0.0" + +supports-preserve-symlinks-flag@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" + integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== + +symbol-tree@^3.2.4: + version "3.2.4" + resolved "https://registry.yarnpkg.com/symbol-tree/-/symbol-tree-3.2.4.tgz#430637d248ba77e078883951fb9aa0eed7c63fa2" + integrity sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw== + +tar-stream@^3.1.7: + version "3.1.7" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-3.1.7.tgz#24b3fb5eabada19fe7338ed6d26e5f7c482e792b" + integrity sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ== + dependencies: + b4a "^1.6.4" + fast-fifo "^1.2.0" + streamx "^2.15.0" + +tar-stream@~2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287" + integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ== + dependencies: + bl "^4.0.3" + end-of-stream "^1.4.1" + fs-constants "^1.0.0" + inherits "^2.0.3" + readable-stream "^3.1.1" + +test-exclude@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/test-exclude/-/test-exclude-6.0.0.tgz#04a8698661d805ea6fa293b6cb9e63ac044ef15e" + integrity sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== + dependencies: + "@istanbuljs/schema" "^0.1.2" + glob "^7.1.4" + minimatch "^3.0.4" + +text-decoder@^1.1.0: + version "1.2.3" + resolved "https://registry.yarnpkg.com/text-decoder/-/text-decoder-1.2.3.tgz#b19da364d981b2326d5f43099c310cc80d770c65" + integrity sha512-3/o9z3X0X0fTupwsYvR03pJ/DjWuqqrfwBgTQzdWDiQSm9KitAyz/9WqsT2JQW7KV2m+bC2ol/zqpW37NHxLaA== + dependencies: + b4a "^1.6.4" + +text-extensions@^1.0.0: + version "1.9.0" + resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26" + integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ== + +text-table@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" + integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== + +thread-stream@^0.15.1: + version "0.15.2" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-0.15.2.tgz#fb95ad87d2f1e28f07116eb23d85aba3bc0425f4" + integrity sha512-UkEhKIg2pD+fjkHQKyJO3yoIvAP3N6RlNFt2dUhcS1FGvCD1cQa1M/PGknCLFIyZdtJOWQjejp7bdNqmN7zwdA== + dependencies: + real-require "^0.1.0" + +thread-stream@^2.0.0: + version "2.7.0" + resolved "https://registry.yarnpkg.com/thread-stream/-/thread-stream-2.7.0.tgz#d8a8e1b3fd538a6cca8ce69dbe5d3d097b601e11" + integrity sha512-qQiRWsU/wvNolI6tbbCKd9iKaTnCXsTwVxhhKM6nctPdujTyztjlbUkUTUymidWcMnZ5pWR0ej4a0tjsW021vw== + dependencies: + real-require "^0.2.0" + +through2@^2.0.3: + version "2.0.5" + resolved "https://registry.yarnpkg.com/through2/-/through2-2.0.5.tgz#01c1e39eb31d07cb7d03a96a70823260b23132cd" + integrity sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ== + dependencies: + readable-stream "~2.3.6" + xtend "~4.0.1" + +through2@^4.0.0: + version "4.0.2" + resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764" + integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw== + dependencies: + readable-stream "3" + +"through@>=2.2.7 <3": + version "2.3.8" + resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" + integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== + +tldts-core@^6.1.86: + version "6.1.86" + resolved "https://registry.yarnpkg.com/tldts-core/-/tldts-core-6.1.86.tgz#a93e6ed9d505cb54c542ce43feb14c73913265d8" + integrity sha512-Je6p7pkk+KMzMv2XXKmAE3McmolOQFdxkKw0R8EYNr7sELW46JqnNeTX8ybPiQgvg1ymCoF8LXs5fzFaZvJPTA== + +tldts@^6.1.32: + version "6.1.86" + resolved "https://registry.yarnpkg.com/tldts/-/tldts-6.1.86.tgz#087e0555b31b9725ee48ca7e77edc56115cd82f7" + integrity sha512-WMi/OQ2axVTf/ykqCQgXiIct+mSQDFdH2fkwhPwgEwvJ1kSzZRiinb0zF2Xb8u4+OqPChmyI6MEu4EezNJz+FQ== + dependencies: + tldts-core "^6.1.86" + +tmp@^0.0.33: + version "0.0.33" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9" + integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw== + dependencies: + os-tmpdir "~1.0.2" + +tmp@~0.2.1: + version "0.2.3" + resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.3.tgz#eb783cc22bc1e8bebd0671476d46ea4eb32a79ae" + integrity sha512-nZD7m9iCPC5g0pYmcaxogYKggSfLsdxl8of3Q/oIbqCqLLIO9IAF0GWjX1z9NZRHPiXv8Wex4yDCaZsgEw0Y8w== + +tmpl@1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" + integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== + +to-regex-range@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" + integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== + dependencies: + is-number "^7.0.0" + +toidentifier@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/toidentifier/-/toidentifier-1.0.1.tgz#3be34321a88a820ed1bd80dfaa33e479fbb8dd35" + integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== + +token-types@^5.0.0-alpha.2: + version "5.0.1" + resolved "https://registry.yarnpkg.com/token-types/-/token-types-5.0.1.tgz#aa9d9e6b23c420a675e55413b180635b86a093b4" + integrity sha512-Y2fmSnZjQdDb9W4w4r1tswlMHylzWIeOKpx0aZH9BgGtACHhrk3OkT52AzwcuqTRBZtvvnTjDBh8eynMulu8Vg== + dependencies: + "@tokenizer/token" "^0.3.0" + ieee754 "^1.2.1" + +toml@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/toml/-/toml-3.0.0.tgz#342160f1af1904ec9d204d03a5d61222d762c5ee" + integrity sha512-y/mWCZinnvxjTKYhJ+pYxwD0mRLVvOtdS2Awbgxln6iEnt4rk0yBxeSBHkGJcPucRiG0e55mwWp+g/05rsrd6w== + +tough-cookie@^4.1.2: + version "4.1.4" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-4.1.4.tgz#945f1461b45b5a8c76821c33ea49c3ac192c1b36" + integrity sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag== + dependencies: + psl "^1.1.33" + punycode "^2.1.1" + universalify "^0.2.0" + url-parse "^1.5.3" + +tough-cookie@^5.0.0: + version "5.1.2" + resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-5.1.2.tgz#66d774b4a1d9e12dc75089725af3ac75ec31bed7" + integrity sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A== + dependencies: + tldts "^6.1.32" + +tr46@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-3.0.0.tgz#555c4e297a950617e8eeddef633c87d4d9d6cbf9" + integrity sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA== + dependencies: + punycode "^2.1.1" + +tr46@~0.0.3: + version "0.0.3" + resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" + integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== + +trim-newlines@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144" + integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw== + +trim-repeated@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/trim-repeated/-/trim-repeated-2.0.0.tgz#5d60556d6d40d9461b7c7e06c3ac20b6b1d50090" + integrity sha512-QUHBFTJGdOwmp0tbOG505xAgOp/YliZP/6UgafFXYZ26WT1bvQmSMJUvkeVSASuJJHbqsFbynTvkd5W8RBTipg== + dependencies: + escape-string-regexp "^5.0.0" + +ts-api-utils@^1.3.0: + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== + +ts-api-utils@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-2.1.0.tgz#595f7094e46eed364c13fd23e75f9513d29baf91" + integrity sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ== + +ts-jest@29.1.0: + version "29.1.0" + resolved "https://registry.yarnpkg.com/ts-jest/-/ts-jest-29.1.0.tgz#4a9db4104a49b76d2b368ea775b6c9535c603891" + integrity sha512-ZhNr7Z4PcYa+JjMl62ir+zPiNJfXJN6E8hSLnaUKhOgqcn8vb3e537cpkd0FuAfRK3sR1LSqM1MOhliXNgOFPA== + dependencies: + bs-logger "0.x" + fast-json-stable-stringify "2.x" + jest-util "^29.0.0" + json5 "^2.2.3" + lodash.memoize "4.x" + make-error "1.x" + semver "7.x" + yargs-parser "^21.0.1" + +ts-node@10.9.1: + version "10.9.1" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b" + integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +ts-node@^10.8.1: + version "10.9.2" + resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" + integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== + dependencies: + "@cspotcode/source-map-support" "^0.8.0" + "@tsconfig/node10" "^1.0.7" + "@tsconfig/node12" "^1.0.7" + "@tsconfig/node14" "^1.0.0" + "@tsconfig/node16" "^1.0.2" + acorn "^8.4.1" + acorn-walk "^8.1.1" + arg "^4.1.0" + create-require "^1.1.0" + diff "^4.0.1" + make-error "^1.1.1" + v8-compile-cache-lib "^3.0.1" + yn "3.1.1" + +tsconfig-paths@^4.1.2: + version "4.2.0" + resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" + integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== + dependencies: + json5 "^2.2.2" + minimist "^1.2.6" + strip-bom "^3.0.0" + +tslib@^2.0.0, tslib@^2.3.0, tslib@^2.4.0, tslib@^2.6.2, tslib@^2.6.3: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== + +tunnel-agent@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" + integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== + dependencies: + safe-buffer "^5.0.1" + +tweetnacl@^0.14.3, tweetnacl@~0.14.0: + version "0.14.5" + resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" + integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== + +typanion@^3.14.0, typanion@^3.8.0: + version "3.14.0" + resolved "https://registry.yarnpkg.com/typanion/-/typanion-3.14.0.tgz#a766a91810ce8258033975733e836c43a2929b94" + integrity sha512-ZW/lVMRabETuYCd9O9ZvMhAh8GslSqaUjxmK/JLPCh6l73CvLBiuXswj/+7LdnWOgYsQ130FqLzFz5aGT4I3Ug== + +type-check@^0.4.0, type-check@~0.4.0: + version "0.4.0" + resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1" + integrity sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew== + dependencies: + prelude-ls "^1.2.1" + +type-detect@4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.0.8.tgz#7646fb5f18871cfbb7749e69bd39a6388eb7450c" + integrity sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== + +type-fest@^0.18.0: + version "0.18.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f" + integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw== + +type-fest@^0.20.2: + version "0.20.2" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.20.2.tgz#1bf207f4b28f91583666cb5fbd327887301cd5f4" + integrity sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ== + +type-fest@^0.21.3: + version "0.21.3" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" + integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== + +type-fest@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b" + integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg== + +type-fest@^0.8.1: + version "0.8.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d" + integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA== + +type-is@~1.6.18: + version "1.6.18" + resolved "https://registry.yarnpkg.com/type-is/-/type-is-1.6.18.tgz#4e552cd05df09467dcbc4ef739de89f2cf37c131" + integrity sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g== + dependencies: + media-typer "0.3.0" + mime-types "~2.1.24" + +typescript@5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== + +"typescript@^4.6.4 || ^5.2.2": + version "5.8.3" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.8.3.tgz#92f8a3e5e3cf497356f4178c34cd65a7f5e8440e" + integrity sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ== + +typescript@~5.4.2: + version "5.4.5" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" + integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== + +uglify-js@^3.1.4: + version "3.19.3" + resolved "https://registry.yarnpkg.com/uglify-js/-/uglify-js-3.19.3.tgz#82315e9bbc6f2b25888858acd1fff8441035b77f" + integrity sha512-v3Xu+yuwBXisp6QYTcH4UbH+xYJXqnq2m/LtQVWKWzYc1iehYnLixoQDN9FH6/j9/oybfd6W9Ghwkl8+UMKTKQ== + +undici-types@~5.26.4: + version "5.26.5" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" + integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== + +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +unicode-canonical-property-names-ecmascript@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== + +unicode-match-property-ecmascript@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-ecmascript/-/unicode-match-property-ecmascript-2.0.0.tgz#54fd16e0ecb167cf04cf1f756bdcc92eba7976c3" + integrity sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q== + dependencies: + unicode-canonical-property-names-ecmascript "^2.0.0" + unicode-property-aliases-ecmascript "^2.0.0" + +unicode-match-property-value-ecmascript@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" + integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== + +unicode-property-aliases-ecmascript@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/unicode-property-aliases-ecmascript/-/unicode-property-aliases-ecmascript-2.1.0.tgz#43d41e3be698bd493ef911077c9b131f827e8ccd" + integrity sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w== + +universal-user-agent@^7.0.0, universal-user-agent@^7.0.2: + version "7.0.2" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-7.0.2.tgz#52e7d0e9b3dc4df06cc33cb2b9fd79041a54827e" + integrity sha512-0JCqzSKnStlRRQfCdowvqy3cy0Dvtlb8xecj/H8JFZuCze4rwjPZQOgvFvn0Ws/usCHQFGpyr+pB9adaGwXn4Q== + +universalify@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.2.0.tgz#6451760566fa857534745ab1dde952d1b1761be0" + integrity sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg== + +universalify@^2.0.0: + version "2.0.1" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.1.tgz#168efc2180964e6386d061e094df61afe239b18d" + integrity sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw== + +unix-crypt-td-js@1.1.4: + version "1.1.4" + resolved "https://registry.yarnpkg.com/unix-crypt-td-js/-/unix-crypt-td-js-1.1.4.tgz#4912dfad1c8aeb7d20fa0a39e4c31918c1d5d5dd" + integrity sha512-8rMeVYWSIyccIJscb9NdCfZKSRBKYTeVnwmiRYT2ulE3qd1RaDQ0xQDP+rI3ccIWbhu/zuo5cgN8z73belNZgw== + +unpipe@1.0.0, unpipe@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" + integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== + +update-browserslist-db@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== + dependencies: + escalade "^3.2.0" + picocolors "^1.1.1" + +uri-js@^4.2.2: + version "4.4.1" + resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e" + integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg== + dependencies: + punycode "^2.1.0" + +url-parse@^1.5.3: + version "1.5.10" + resolved "https://registry.yarnpkg.com/url-parse/-/url-parse-1.5.10.tgz#9d3c2f736c1d75dd3bd2be507dcc111f1e2ea9c1" + integrity sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ== + dependencies: + querystringify "^2.1.1" + requires-port "^1.0.0" + +util-deprecate@^1.0.1, util-deprecate@~1.0.1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" + integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== + +utils-merge@1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" + integrity sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA== + +uuid@^8.3.2: + version "8.3.2" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" + integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== + +v8-compile-cache-lib@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" + integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== + +v8-to-istanbul@^9.0.1: + version "9.3.0" + resolved "https://registry.yarnpkg.com/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz#b9572abfa62bd556c16d75fdebc1a411d5ff3175" + integrity sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA== + dependencies: + "@jridgewell/trace-mapping" "^0.3.12" + "@types/istanbul-lib-coverage" "^2.0.1" + convert-source-map "^2.0.0" + +validate-npm-package-license@^3.0.1: + version "3.0.4" + resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" + integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== + dependencies: + spdx-correct "^3.0.0" + spdx-expression-parse "^3.0.0" + +validate-npm-package-name@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-5.0.1.tgz#a316573e9b49f3ccd90dbb6eb52b3f06c6d604e8" + integrity sha512-OljLrQ9SQdOUqTaQxqL5dEfZWrXExyyWsozYlAWFawPVNuD83igl7uJD2RTkNMbniIYgt8l81eCJGIdQF7avLQ== + +validator@13.12.0: + version "13.12.0" + resolved "https://registry.yarnpkg.com/validator/-/validator-13.12.0.tgz#7d78e76ba85504da3fee4fd1922b385914d4b35f" + integrity sha512-c1Q0mCiPlgdTVVVIJIrBuxNicYE+t/7oKeI9MWLj3fh/uq2Pxh/3eeWbVZ4OcGW1TUf53At0njHw5SMdA3tmMg== + +vary@^1, vary@~1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/vary/-/vary-1.1.2.tgz#2299f02c6ded30d4a5961b0b9f74524a18f634fc" + integrity sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg== + +verdaccio-audit@13.0.0-next-8.1: + version "13.0.0-next-8.1" + resolved "https://registry.yarnpkg.com/verdaccio-audit/-/verdaccio-audit-13.0.0-next-8.1.tgz#ec6cf7e70cbc0becdf64ffa793079b9034279292" + integrity sha512-EEfUeC1kHuErtwF9FC670W+EXHhcl+iuigONkcprwRfkPxmdBs+Hx36745hgAMZ9SCqedNECaycnGF3tZ3VYfw== + dependencies: + "@verdaccio/config" "8.0.0-next-8.1" + "@verdaccio/core" "8.0.0-next-8.1" + express "4.21.0" + https-proxy-agent "5.0.1" + node-fetch cjs + +verdaccio-htpasswd@13.0.0-next-8.1: + version "13.0.0-next-8.1" + resolved "https://registry.yarnpkg.com/verdaccio-htpasswd/-/verdaccio-htpasswd-13.0.0-next-8.1.tgz#50ccbbf6d3abbcb4075d36c6c0b212b2bc80c529" + integrity sha512-BfvmO+ZdbwfttOwrdTPD6Bccr1ZfZ9Tk/9wpXamxdWB/XPWlk3FtyGsvqCmxsInRLPhQ/FSk9c3zRCGvICTFYg== + dependencies: + "@verdaccio/core" "8.0.0-next-8.1" + "@verdaccio/file-locking" "13.0.0-next-8.0" + apache-md5 "1.1.8" + bcryptjs "2.4.3" + core-js "3.37.1" + debug "4.3.7" + http-errors "2.0.0" + unix-crypt-td-js "1.1.4" + +verdaccio@^5.25.0: + version "5.33.0" + resolved "https://registry.yarnpkg.com/verdaccio/-/verdaccio-5.33.0.tgz#340fbcb52a0ee63daed629d87399d390101e229a" + integrity sha512-mZWTt/k3KyprhS9IriUEHfKSV4lqB9P1aTVhw5GcNgu4533GSsJRwlBwrFijnoBbWDVarjZoIf+t8wq0iv+5jg== + dependencies: + "@cypress/request" "3.0.6" + "@verdaccio/auth" "8.0.0-next-8.1" + "@verdaccio/config" "8.0.0-next-8.1" + "@verdaccio/core" "8.0.0-next-8.1" + "@verdaccio/local-storage-legacy" "11.0.2" + "@verdaccio/logger-7" "8.0.0-next-8.1" + "@verdaccio/middleware" "8.0.0-next-8.1" + "@verdaccio/search-indexer" "8.0.0-next-8.0" + "@verdaccio/signature" "8.0.0-next-8.0" + "@verdaccio/streams" "10.2.1" + "@verdaccio/tarball" "13.0.0-next-8.1" + "@verdaccio/ui-theme" "8.0.0-next-8.1" + "@verdaccio/url" "13.0.0-next-8.1" + "@verdaccio/utils" "7.0.1-next-8.1" + JSONStream "1.3.5" + async "3.2.6" + clipanion "4.0.0-rc.4" + compression "1.7.5" + cors "2.8.5" + debug "^4.3.7" + envinfo "7.14.0" + express "4.21.1" + express-rate-limit "5.5.1" + fast-safe-stringify "2.1.1" + handlebars "4.7.8" + js-yaml "4.1.0" + jsonwebtoken "9.0.2" + kleur "4.1.5" + lodash "4.17.21" + lru-cache "7.18.3" + mime "3.0.0" + mkdirp "1.0.4" + mv "2.1.1" + pkginfo "0.4.1" + semver "7.6.3" + validator "13.12.0" + verdaccio-audit "13.0.0-next-8.1" + verdaccio-htpasswd "13.0.0-next-8.1" + +verror@1.10.0: + version "1.10.0" + resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" + integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== + dependencies: + assert-plus "^1.0.0" + core-util-is "1.0.2" + extsprintf "^1.2.0" + +w3c-xmlserializer@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz#aebdc84920d806222936e3cdce408e32488a3073" + integrity sha512-d+BFHzbiCx6zGfz0HyQ6Rg69w9k19nviJspaj4yNscGjrHu94sVP+aRm75yEbCh+r2/yR+7q6hux9LVtbuTGBw== + dependencies: + xml-name-validator "^4.0.0" + +walker@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/walker/-/walker-1.0.8.tgz#bd498db477afe573dc04185f011d3ab8a8d7653f" + integrity sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ== + dependencies: + makeerror "1.0.12" + +wasm-sjlj@^1.0.5: + version "1.0.6" + resolved "https://registry.yarnpkg.com/wasm-sjlj/-/wasm-sjlj-1.0.6.tgz#1ab6156c51ac9e25fcbf2a4d8c7adfa07d4ad4ff" + integrity sha512-pjaKtLJejlWm6+okPV2X1A6nIsRDD4qeK97eCh8DP8KXi3Nzn/HY01vpHhZHlhDri12eZqipjm8HhdTVw+ATxw== + +wcwidth@^1.0.0, wcwidth@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" + integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== + dependencies: + defaults "^1.0.3" + +webidl-conversions@^3.0.0: + version "3.0.1" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" + integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== + +webidl-conversions@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a" + integrity sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g== + +whatwg-encoding@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-2.0.0.tgz#e7635f597fd87020858626805a2729fa7698ac53" + integrity sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-3.0.0.tgz#5fa1a7623867ff1af6ca3dc72ad6b8a4208beba7" + integrity sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q== + +whatwg-url@^11.0.0: + version "11.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-11.0.0.tgz#0a849eebb5faf2119b901bb76fd795c2848d4018" + integrity sha512-RKT8HExMpoYx4igMiVMY83lN6UeITKJlBQ+vR/8ZJ8OCdSiN3RwCq+9gH0+Xzj0+5IrM6i4j/6LuvzbZIQgEcQ== + dependencies: + tr46 "^3.0.0" + webidl-conversions "^7.0.0" + +whatwg-url@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" + integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== + dependencies: + tr46 "~0.0.3" + webidl-conversions "^3.0.0" + +which@^1.2.9: + version "1.3.1" + resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" + integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== + dependencies: + isexe "^2.0.0" + +which@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" + integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== + dependencies: + isexe "^2.0.0" + +word-wrap@^1.2.5: + version "1.2.5" + resolved "https://registry.yarnpkg.com/word-wrap/-/word-wrap-1.2.5.tgz#d2c45c6dd4fbce621a66f136cbe328afd0410b34" + integrity sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA== + +wordwrap@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" + integrity sha512-gvVzJFlPycKc5dZN4yPkP8w7Dc37BtP1yczEneOb4uq34pXZcvrtRTmWV8W+Ume+XCxKgbjM+nevkyFPMybd4Q== + +wrap-ansi@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" + integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrap-ansi@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" + integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== + dependencies: + ansi-styles "^4.0.0" + string-width "^4.1.0" + strip-ansi "^6.0.0" + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== + +write-file-atomic@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/write-file-atomic/-/write-file-atomic-4.0.2.tgz#a9df01ae5b77858a027fd2e80768ee433555fcfd" + integrity sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg== + dependencies: + imurmurhash "^0.1.4" + signal-exit "^3.0.7" + +ws@^8.11.0: + version "8.18.2" + resolved "https://registry.yarnpkg.com/ws/-/ws-8.18.2.tgz#42738b2be57ced85f46154320aabb51ab003705a" + integrity sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ== + +xml-name-validator@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/xml-name-validator/-/xml-name-validator-4.0.0.tgz#79a006e2e63149a8600f15430f0a4725d1524835" + integrity sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw== + +xmlchars@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/xmlchars/-/xmlchars-2.2.0.tgz#060fe1bcb7f9c76fe2a17db86a9bc3ab894210cb" + integrity sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw== + +xtend@~4.0.1: + version "4.0.2" + resolved "https://registry.yarnpkg.com/xtend/-/xtend-4.0.2.tgz#bb72779f5fa465186b1f438f674fa347fdb5db54" + integrity sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ== + +y18n@^5.0.5: + version "5.0.8" + resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55" + integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA== + +yallist@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" + integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A== + +yallist@^3.0.2: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" + integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== + +yallist@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" + integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== + +yaml@^1.7.2: + version "1.10.2" + resolved "https://registry.yarnpkg.com/yaml/-/yaml-1.10.2.tgz#2301c5ffbf12b467de8da2333a459e29e7920e4b" + integrity sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg== + +yargs-parser@21.1.1, yargs-parser@^21.0.1, yargs-parser@^21.1.1: + version "21.1.1" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35" + integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw== + +yargs-parser@^20.2.3: + version "20.2.9" + resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee" + integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w== + +yargs@^17.0.0, yargs@^17.3.1, yargs@^17.6.2: + version "17.7.2" + resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269" + integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w== + dependencies: + cliui "^8.0.1" + escalade "^3.1.1" + get-caller-file "^2.0.5" + require-directory "^2.1.1" + string-width "^4.2.3" + y18n "^5.0.5" + yargs-parser "^21.1.1" + +yn@3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" + integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== + +yocto-queue@^0.1.0: + version "0.1.0" + resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" + integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +yoctocolors-cjs@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/yoctocolors-cjs/-/yoctocolors-cjs-2.1.2.tgz#f4b905a840a37506813a7acaa28febe97767a242" + integrity sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==