├── .changeset
├── README.md
└── config.json
├── .editorconfig
├── .github
└── workflows
│ ├── lint.yml
│ ├── release.yml
│ ├── test-Windows.yaml
│ └── test-macOS.yaml
├── .gitignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── biome.json
├── package.json
├── pnpm-lock.yaml
├── src
├── actions.ts
├── constants.ts
├── helpers.ts
├── index.ts
└── types.ts
├── tests
├── cli.test.ts
└── helpers.test.ts
├── tsconfig.json
└── vitest.config.ts
/.changeset/README.md:
--------------------------------------------------------------------------------
1 | # Changesets
2 |
3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
4 | with multi-package repos, or single-package repos to help you version and publish your code. You can
5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets)
6 |
7 | We have a quick list of common questions to get you started engaging with this project in
8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
9 |
--------------------------------------------------------------------------------
/.changeset/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://unpkg.com/@changesets/config@3.0.3/schema.json",
3 | "changelog": "@changesets/cli/changelog",
4 | "commit": false,
5 | "fixed": [],
6 | "linked": [],
7 | "access": "public",
8 | "baseBranch": "master",
9 | "updateInternalDependencies": "patch",
10 | "ignore": []
11 | }
12 |
--------------------------------------------------------------------------------
/.editorconfig:
--------------------------------------------------------------------------------
1 | root = true
2 |
3 | [*]
4 | charset = utf-8
5 | indent_size = 2
6 | end_of_line = lf
7 | indent_style = space
8 | insert_final_newline = true
9 | trim_trailing_whitespace = false
10 |
--------------------------------------------------------------------------------
/.github/workflows/lint.yml:
--------------------------------------------------------------------------------
1 | name: Lint
2 |
3 | on: [push, pull_request]
4 |
5 | jobs:
6 | lint:
7 | runs-on: ubuntu-latest
8 | steps:
9 | - name: Checkout Repo
10 | uses: actions/checkout@v4
11 |
12 | - uses: pnpm/action-setup@v4
13 | with:
14 | version: 9
15 |
16 | - name: Setup Node.js 18.x
17 | uses: actions/setup-node@v4
18 | with:
19 | node-version: 18.x
20 |
21 | - name: Install Dependencies
22 | run: pnpm i
23 |
24 | - name: Lint
25 | run: pnpm check
--------------------------------------------------------------------------------
/.github/workflows/release.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 |
3 | on:
4 | push:
5 | branches:
6 | - master
7 |
8 | concurrency: ${{ github.workflow }}-${{ github.ref }}
9 |
10 | jobs:
11 | release:
12 | name: Release
13 | runs-on: ubuntu-latest
14 | steps:
15 | - name: Checkout Repo
16 | uses: actions/checkout@v4
17 |
18 | - name: Setup Node.js 20.x
19 | uses: actions/setup-node@v4
20 | with:
21 | node-version: 20.x
22 |
23 | - uses: pnpm/action-setup@v4
24 | with:
25 | version: 9
26 |
27 | - name: Install Dependencies
28 | run: pnpm install
29 |
30 | - name: Build
31 | run: pnpm run build
32 |
33 | - name: Create Release Pull Request or Publish to npm
34 | id: changesets
35 | uses: changesets/action@v1
36 | with:
37 | publish: pnpm changeset:publish
38 | version: pnpm changeset:version
39 | env:
40 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
41 | NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
42 |
--------------------------------------------------------------------------------
/.github/workflows/test-Windows.yaml:
--------------------------------------------------------------------------------
1 | name: Unit Test(Windows)
2 | on:
3 | pull_request:
4 | branches: [master]
5 | jobs:
6 | ut-windows:
7 | # The type of runner that the job will run on
8 | runs-on: ${{ matrix.os }}
9 | strategy:
10 | matrix:
11 | node-version: [18.x]
12 | os: [windows-latest] # windows-latest
13 |
14 | steps:
15 | - name: Checkout
16 | uses: actions/checkout@v4
17 | with:
18 | fetch-depth: 25
19 |
20 | - name: Setup Node.js ${{ matrix.node-version }}
21 | uses: actions/setup-node@v4
22 | with:
23 | node-version: ${{ matrix.node-version }}
24 |
25 | - uses: pnpm/action-setup@v4
26 | with:
27 | version: 9
28 |
29 | - name: Install Dependencies
30 | run: pnpm install
31 |
32 | - name: Build
33 | run: pnpm run build
34 |
35 | - name: Test
36 | run: pnpm run test
37 |
--------------------------------------------------------------------------------
/.github/workflows/test-macOS.yaml:
--------------------------------------------------------------------------------
1 | name: Unit Test(macOS)
2 | on:
3 | pull_request:
4 | branches: [master]
5 | jobs:
6 | ut-mac:
7 | # The type of runner that the job will run on
8 | runs-on: ${{ matrix.os }}
9 | strategy:
10 | matrix:
11 | node-version: [18.x]
12 | os: [macos-latest] # macos-latest
13 |
14 | steps:
15 | - name: Checkout
16 | uses: actions/checkout@v4
17 | with:
18 | fetch-depth: 25
19 |
20 | - name: Setup Node.js ${{ matrix.node-version }}
21 | uses: actions/setup-node@v4
22 | with:
23 | node-version: ${{ matrix.node-version }}
24 |
25 | - uses: pnpm/action-setup@v4
26 | with:
27 | version: 9
28 |
29 | - name: Install Dependencies
30 | run: pnpm install
31 |
32 | - name: Build
33 | run: pnpm run build
34 |
35 | - name: Test
36 | run: pnpm run test
37 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # TODO
2 | TODO.md
3 |
4 | # package lock
5 | package-lock.json
6 | yarn.lock
7 |
8 | # Output of 'npm pack'
9 | *.tgz
10 |
11 | # Dependency directories
12 | node_modules/
13 | jspm_packages/
14 |
15 | # VisualStudioCode Or idea
16 | .vscode/*
17 | .idea/**
18 |
19 | # Local History for Visual Studio Code
20 | .history/
21 |
22 | # Directory for instrumented libs generated by jscoverage/JSCover
23 | lib-cov
24 |
25 | # Runtime data
26 | pids
27 | *.pid
28 | *.seed
29 | *.pid.lock
30 |
31 | # Logs
32 | logs
33 | *.log
34 | npm-debug.log*
35 | yarn-debug.log*
36 | yarn-error.log*
37 | lerna-debug.log*
38 | .pnpm-debug.log*
39 |
40 | # Others
41 | *.seed
42 | *.csv
43 | *.dat
44 | *.out
45 | *.gz
46 | .DS_Store
47 | results
48 | dist
49 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # nrm
2 |
3 | ## 2.0.1
4 |
5 | ### Patch Changes
6 |
7 | - 19eff3c: Added delete multiple registry. Thanks @chouchouji
8 |
9 | ## 2.0.0
10 |
11 | ### Major Changes
12 |
13 | - 8e68916: Migrate to Typescript and vitet. Thanks @chouchouji
14 |
15 | ## 1.5.0
16 |
17 | ### Minor Changes
18 |
19 | - 9f04e63: Added set registry locally. Thanks @chouchouji
20 |
21 | ### Patch Changes
22 |
23 | - 6f54e36: Optimize package files Thanks @chouchouji
24 |
25 | ## 1.4.0
26 |
27 | ### Minor Changes
28 |
29 | - 3bb88bd: Added select npm registry by keyboard
30 |
31 | ## 1.3.1
32 |
33 | ### Patch Changes
34 |
35 | - a808f9f: Updated tencent npm mirror registry
36 |
37 | ## 1.3.0
38 |
39 | ### Minor Changes
40 |
41 | - 1aa79c3: Added huawei registry. (thanks @icemanpro)
42 | - d9ebd7e: Fixed `punycode` DeprecationWarning, replace node-fetch@2.6.6 with undici.
43 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | The MIT License (MIT)
2 |
3 | Copyright (c) 2014 Wang
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy of
6 | this software and associated documentation files (the "Software"), to deal in
7 | the Software without restriction, including without limitation the rights to
8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
9 | the Software, and to permit persons to whom the Software is furnished to do so,
10 | subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | nrm -- npm registry manager
2 | ===
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 | `nrm` can help you switch different npm registries easily and quickly. It supports
11 | `npm`, `cnpm`, `taobao`, `yarn`, `tencent`, `npmMirror` and `huawei`.
12 |
13 |
14 | ## Install
15 |
16 | ```
17 | # npm
18 | npm install -g nrm
19 |
20 | # yarn
21 | yarn global add nrm
22 |
23 | # pnpm
24 | pnpm add -g nrm
25 | ```
26 |
27 | ## Example
28 | ```
29 | $ nrm ls
30 |
31 | * npm ---------- https://registry.npmjs.org/
32 | yarn --------- https://registry.yarnpkg.com/
33 | tencent ------ https://mirrors.tencent.com/npm/
34 | cnpm --------- https://r.cnpmjs.org/
35 | taobao ------- https://registry.npmmirror.com/
36 | npmMirror ---- https://skimdb.npmjs.com/registry/
37 | huawei ------- https://repo.huaweicloud.com/repository/npm/
38 |
39 | ```
40 |
41 | ```
42 | $ nrm use taobao
43 |
44 | SUCCESS The registry has been changed to 'taobao'.
45 | ```
46 |
47 | ## Usage
48 |
49 | > [!TIP]
50 | > The lowest node version is ***18*** from ***v1.4.0***.
51 |
52 | ```
53 | Usage: nrm [options] [command]
54 |
55 | Commands:
56 |
57 | ls List all the registries
58 | current Show current registry name
59 | -u --show-url Show the registry URL instead of the name
60 | use [registry] Change registry to registry
61 | -l --local Switch local registry
62 | add [home] Add one custom registry
63 | login [value] Set authorize information for a registry with a base64 encoded string or username and password
64 | -a --always-auth Set is always auth
65 | -u --username Your user name for this registry
66 | -p --password Your password for this registry
67 | -e --email Your email for this registry
68 | set-hosted-repo Set hosted npm repository for a custom registry to publish packages
69 | set-scope Associating a scope with a registry
70 | del-scope Remove a scope
71 | set Set custom registry attribute
72 | -a --attr Set custom registry attribute
73 | -v --value Set custom registry value
74 | del [registry] Delete one custom registry
75 | rename Set custom registry name
76 | home [browser] Open the homepage of registry with optional browser
77 | publish [|] Publish package to current registry if current registry is a custom registry. The field 'repository' of current custom registry is required running this command. If you're not using custom registry, this command will run npm publish directly
78 | -t --tag [tag] Add tag
79 | -a --access Set access
80 | -o --otp [otpcode] Set otpcode
81 | -dr --dry-run Set is dry run
82 | test [registry] Show the response time for one or all registries
83 | help [command] Display help for command
84 |
85 | Options:
86 |
87 | -h --help output usage information
88 | -V --version output the version number
89 | ```
90 |
91 | ## Registries
92 |
93 | * [npm](https://www.npmjs.org)
94 | * [yarn](https://yarnpkg.com)
95 | * [tencent](https://mirrors.tencent.com)
96 | * [cnpm](http://cnpmjs.org)
97 | * [npmMirror](https://skimdb.npmjs.com/)
98 | * [taobao](https://npmmirror.com)
99 | * [huawei](https://www.huaweicloud.com/special/npm-jingxiang.html)
100 |
101 | ## How to configure yarn to use private registry ?
102 |
103 | just add .yarnrc in your project’s directory and write there:
104 | `registry "http://your.registry"`
105 |
106 | Or you can configure it in your HOME directory's .yarnrc
107 |
108 | ## Related Projects
109 |
110 | * [verdaccio--A lightweight private npm proxy registry](https://verdaccio.org/)
111 |
112 | ## TODO
113 |
114 | 1. Add more registries: github, [sonatype](https://help.sonatype.com/repomanager3/formats/npm-registry)
115 |
116 | ## Notice
117 |
118 | When you are using preset registries the `publish` command will proxy to the npm official registry.
119 |
120 | When you are using a custom registry you will need to run the `set-hosted-repo` to set a url to publish packages to your hosted registry.
121 |
122 | ## Maintainer is wanted
123 |
124 | If you find nrm is useful and are an experienced node.js developer, then you can help maintain nrm.
125 |
126 | If you have the interest, you can reach me through email: pana.wang@outlook.com
127 |
128 | ## Contributors
129 |
130 |
131 |
132 |
133 |
134 | ## LICENSE
135 |
136 | [MIT](LICENSE)
137 |
--------------------------------------------------------------------------------
/biome.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json",
3 | "vcs": {
4 | "enabled": false,
5 | "clientKind": "git",
6 | "useIgnoreFile": true
7 | },
8 | "files": {
9 | "ignoreUnknown": true,
10 | "ignore": ["dist", "*.json"]
11 | },
12 | "formatter": {
13 | "enabled": true,
14 | "lineWidth": 80,
15 | "useEditorconfig": true
16 | },
17 | "organizeImports": {
18 | "enabled": true
19 | },
20 | "linter": {
21 | "enabled": true,
22 | "rules": {
23 | "recommended": true,
24 | "suspicious": {
25 | "noExplicitAny": "off"
26 | }
27 | }
28 | },
29 | "javascript": {
30 | "formatter": {
31 | "quoteStyle": "single"
32 | }
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "nrm",
3 | "version": "2.0.1",
4 | "description": "npm registry manager can help you switch different npm registries easily and quickly",
5 | "bin": {
6 | "nrm": "dist/index.js"
7 | },
8 | "type": "commonjs",
9 | "repository": {
10 | "type": "git",
11 | "url": "git+https://github.com/Pana/nrm.git"
12 | },
13 | "files": [
14 | "dist"
15 | ],
16 | "scripts": {
17 | "clean": "rimraf node_modules dist",
18 | "test": "pnpm build && vitest run",
19 | "dev": "tsc --watch",
20 | "build": "rimraf dist && tsc && rimraf dist/types.js",
21 | "test:watch": "vitest",
22 | "changeset:version": "changeset version",
23 | "changeset:publish": "changeset publish",
24 | "check": "biome check --write --verbose"
25 | },
26 | "keywords": [
27 | "npm",
28 | "registry"
29 | ],
30 | "author": "Pana",
31 | "license": "MIT",
32 | "bugs": {
33 | "url": "https://github.com/Pana/nrm/issues"
34 | },
35 | "homepage": "https://github.com/Pana/nrm",
36 | "dependencies": {
37 | "@inquirer/checkbox": "^4.0.3",
38 | "@inquirer/select": "^4.0.2",
39 | "chalk": "4.1.2",
40 | "commander": "^8.3.0",
41 | "ini": "4.1.3",
42 | "open": "8.4.2",
43 | "undici": "5.28.2"
44 | },
45 | "devDependencies": {
46 | "@biomejs/biome": "1.9.4",
47 | "@changesets/cli": "^2.27.8",
48 | "@types/ini": "^4.1.1",
49 | "@types/node": "18",
50 | "coffee": "^5.4.0",
51 | "mock-fs": "^5.4.1",
52 | "rimraf": "^6.0.1",
53 | "strip-ansi": "^7.1.0",
54 | "typescript": "^5.7.2",
55 | "vitest": "2.1.6"
56 | },
57 | "engines": {
58 | "node": ">=18"
59 | }
60 | }
61 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '9.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | importers:
8 |
9 | .:
10 | dependencies:
11 | '@inquirer/checkbox':
12 | specifier: ^4.0.3
13 | version: 4.0.3(@types/node@18.19.67)
14 | '@inquirer/select':
15 | specifier: ^4.0.2
16 | version: 4.0.2(@types/node@18.19.67)
17 | chalk:
18 | specifier: 4.1.2
19 | version: 4.1.2
20 | commander:
21 | specifier: ^8.3.0
22 | version: 8.3.0
23 | ini:
24 | specifier: 4.1.3
25 | version: 4.1.3
26 | open:
27 | specifier: 8.4.2
28 | version: 8.4.2
29 | undici:
30 | specifier: 5.28.2
31 | version: 5.28.2
32 | devDependencies:
33 | '@biomejs/biome':
34 | specifier: 1.9.4
35 | version: 1.9.4
36 | '@changesets/cli':
37 | specifier: ^2.27.8
38 | version: 2.27.10
39 | '@types/ini':
40 | specifier: ^4.1.1
41 | version: 4.1.1
42 | '@types/node':
43 | specifier: '18'
44 | version: 18.19.67
45 | coffee:
46 | specifier: ^5.4.0
47 | version: 5.5.1
48 | mock-fs:
49 | specifier: ^5.4.1
50 | version: 5.4.1
51 | rimraf:
52 | specifier: ^6.0.1
53 | version: 6.0.1
54 | strip-ansi:
55 | specifier: ^7.1.0
56 | version: 7.1.0
57 | typescript:
58 | specifier: ^5.7.2
59 | version: 5.7.2
60 | vitest:
61 | specifier: 2.1.6
62 | version: 2.1.6(@types/node@18.19.67)
63 |
64 | packages:
65 |
66 | '@babel/runtime@7.26.0':
67 | resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==}
68 | engines: {node: '>=6.9.0'}
69 |
70 | '@biomejs/biome@1.9.4':
71 | resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==}
72 | engines: {node: '>=14.21.3'}
73 | hasBin: true
74 |
75 | '@biomejs/cli-darwin-arm64@1.9.4':
76 | resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==}
77 | engines: {node: '>=14.21.3'}
78 | cpu: [arm64]
79 | os: [darwin]
80 |
81 | '@biomejs/cli-darwin-x64@1.9.4':
82 | resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==}
83 | engines: {node: '>=14.21.3'}
84 | cpu: [x64]
85 | os: [darwin]
86 |
87 | '@biomejs/cli-linux-arm64-musl@1.9.4':
88 | resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==}
89 | engines: {node: '>=14.21.3'}
90 | cpu: [arm64]
91 | os: [linux]
92 | libc: [musl]
93 |
94 | '@biomejs/cli-linux-arm64@1.9.4':
95 | resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==}
96 | engines: {node: '>=14.21.3'}
97 | cpu: [arm64]
98 | os: [linux]
99 | libc: [glibc]
100 |
101 | '@biomejs/cli-linux-x64-musl@1.9.4':
102 | resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==}
103 | engines: {node: '>=14.21.3'}
104 | cpu: [x64]
105 | os: [linux]
106 | libc: [musl]
107 |
108 | '@biomejs/cli-linux-x64@1.9.4':
109 | resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==}
110 | engines: {node: '>=14.21.3'}
111 | cpu: [x64]
112 | os: [linux]
113 | libc: [glibc]
114 |
115 | '@biomejs/cli-win32-arm64@1.9.4':
116 | resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==}
117 | engines: {node: '>=14.21.3'}
118 | cpu: [arm64]
119 | os: [win32]
120 |
121 | '@biomejs/cli-win32-x64@1.9.4':
122 | resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==}
123 | engines: {node: '>=14.21.3'}
124 | cpu: [x64]
125 | os: [win32]
126 |
127 | '@changesets/apply-release-plan@7.0.6':
128 | resolution: {integrity: sha512-TKhVLtiwtQOgMAC0fCJfmv93faiViKSDqr8oMEqrnNs99gtSC1sZh/aEMS9a+dseU1ESZRCK+ofLgGY7o0fw/Q==}
129 |
130 | '@changesets/assemble-release-plan@6.0.5':
131 | resolution: {integrity: sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==}
132 |
133 | '@changesets/changelog-git@0.2.0':
134 | resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==}
135 |
136 | '@changesets/cli@2.27.10':
137 | resolution: {integrity: sha512-PfeXjvs9OfQJV8QSFFHjwHX3QnUL9elPEQ47SgkiwzLgtKGyuikWjrdM+lO9MXzOE22FO9jEGkcs4b+B6D6X0Q==}
138 | hasBin: true
139 |
140 | '@changesets/config@3.0.4':
141 | resolution: {integrity: sha512-+DiIwtEBpvvv1z30f8bbOsUQGuccnZl9KRKMM/LxUHuDu5oEjmN+bJQ1RIBKNJjfYMQn8RZzoPiX0UgPaLQyXw==}
142 |
143 | '@changesets/errors@0.2.0':
144 | resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==}
145 |
146 | '@changesets/get-dependents-graph@2.1.2':
147 | resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==}
148 |
149 | '@changesets/get-release-plan@4.0.5':
150 | resolution: {integrity: sha512-E6wW7JoSMcctdVakut0UB76FrrN3KIeJSXvB+DHMFo99CnC3ZVnNYDCVNClMlqAhYGmLmAj77QfApaI3ca4Fkw==}
151 |
152 | '@changesets/get-version-range-type@0.4.0':
153 | resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==}
154 |
155 | '@changesets/git@3.0.2':
156 | resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==}
157 |
158 | '@changesets/logger@0.1.1':
159 | resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==}
160 |
161 | '@changesets/parse@0.4.0':
162 | resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==}
163 |
164 | '@changesets/pre@2.0.1':
165 | resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==}
166 |
167 | '@changesets/read@0.6.2':
168 | resolution: {integrity: sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==}
169 |
170 | '@changesets/should-skip-package@0.1.1':
171 | resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==}
172 |
173 | '@changesets/types@4.1.0':
174 | resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==}
175 |
176 | '@changesets/types@6.0.0':
177 | resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==}
178 |
179 | '@changesets/write@0.3.2':
180 | resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==}
181 |
182 | '@esbuild/aix-ppc64@0.24.0':
183 | resolution: {integrity: sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==}
184 | engines: {node: '>=18'}
185 | cpu: [ppc64]
186 | os: [aix]
187 |
188 | '@esbuild/android-arm64@0.24.0':
189 | resolution: {integrity: sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==}
190 | engines: {node: '>=18'}
191 | cpu: [arm64]
192 | os: [android]
193 |
194 | '@esbuild/android-arm@0.24.0':
195 | resolution: {integrity: sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==}
196 | engines: {node: '>=18'}
197 | cpu: [arm]
198 | os: [android]
199 |
200 | '@esbuild/android-x64@0.24.0':
201 | resolution: {integrity: sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==}
202 | engines: {node: '>=18'}
203 | cpu: [x64]
204 | os: [android]
205 |
206 | '@esbuild/darwin-arm64@0.24.0':
207 | resolution: {integrity: sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==}
208 | engines: {node: '>=18'}
209 | cpu: [arm64]
210 | os: [darwin]
211 |
212 | '@esbuild/darwin-x64@0.24.0':
213 | resolution: {integrity: sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==}
214 | engines: {node: '>=18'}
215 | cpu: [x64]
216 | os: [darwin]
217 |
218 | '@esbuild/freebsd-arm64@0.24.0':
219 | resolution: {integrity: sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==}
220 | engines: {node: '>=18'}
221 | cpu: [arm64]
222 | os: [freebsd]
223 |
224 | '@esbuild/freebsd-x64@0.24.0':
225 | resolution: {integrity: sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==}
226 | engines: {node: '>=18'}
227 | cpu: [x64]
228 | os: [freebsd]
229 |
230 | '@esbuild/linux-arm64@0.24.0':
231 | resolution: {integrity: sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==}
232 | engines: {node: '>=18'}
233 | cpu: [arm64]
234 | os: [linux]
235 |
236 | '@esbuild/linux-arm@0.24.0':
237 | resolution: {integrity: sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==}
238 | engines: {node: '>=18'}
239 | cpu: [arm]
240 | os: [linux]
241 |
242 | '@esbuild/linux-ia32@0.24.0':
243 | resolution: {integrity: sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==}
244 | engines: {node: '>=18'}
245 | cpu: [ia32]
246 | os: [linux]
247 |
248 | '@esbuild/linux-loong64@0.24.0':
249 | resolution: {integrity: sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==}
250 | engines: {node: '>=18'}
251 | cpu: [loong64]
252 | os: [linux]
253 |
254 | '@esbuild/linux-mips64el@0.24.0':
255 | resolution: {integrity: sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==}
256 | engines: {node: '>=18'}
257 | cpu: [mips64el]
258 | os: [linux]
259 |
260 | '@esbuild/linux-ppc64@0.24.0':
261 | resolution: {integrity: sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==}
262 | engines: {node: '>=18'}
263 | cpu: [ppc64]
264 | os: [linux]
265 |
266 | '@esbuild/linux-riscv64@0.24.0':
267 | resolution: {integrity: sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==}
268 | engines: {node: '>=18'}
269 | cpu: [riscv64]
270 | os: [linux]
271 |
272 | '@esbuild/linux-s390x@0.24.0':
273 | resolution: {integrity: sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==}
274 | engines: {node: '>=18'}
275 | cpu: [s390x]
276 | os: [linux]
277 |
278 | '@esbuild/linux-x64@0.24.0':
279 | resolution: {integrity: sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==}
280 | engines: {node: '>=18'}
281 | cpu: [x64]
282 | os: [linux]
283 |
284 | '@esbuild/netbsd-x64@0.24.0':
285 | resolution: {integrity: sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==}
286 | engines: {node: '>=18'}
287 | cpu: [x64]
288 | os: [netbsd]
289 |
290 | '@esbuild/openbsd-arm64@0.24.0':
291 | resolution: {integrity: sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==}
292 | engines: {node: '>=18'}
293 | cpu: [arm64]
294 | os: [openbsd]
295 |
296 | '@esbuild/openbsd-x64@0.24.0':
297 | resolution: {integrity: sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==}
298 | engines: {node: '>=18'}
299 | cpu: [x64]
300 | os: [openbsd]
301 |
302 | '@esbuild/sunos-x64@0.24.0':
303 | resolution: {integrity: sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==}
304 | engines: {node: '>=18'}
305 | cpu: [x64]
306 | os: [sunos]
307 |
308 | '@esbuild/win32-arm64@0.24.0':
309 | resolution: {integrity: sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==}
310 | engines: {node: '>=18'}
311 | cpu: [arm64]
312 | os: [win32]
313 |
314 | '@esbuild/win32-ia32@0.24.0':
315 | resolution: {integrity: sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==}
316 | engines: {node: '>=18'}
317 | cpu: [ia32]
318 | os: [win32]
319 |
320 | '@esbuild/win32-x64@0.24.0':
321 | resolution: {integrity: sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==}
322 | engines: {node: '>=18'}
323 | cpu: [x64]
324 | os: [win32]
325 |
326 | '@fastify/busboy@2.1.1':
327 | resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==}
328 | engines: {node: '>=14'}
329 |
330 | '@inquirer/checkbox@4.0.3':
331 | resolution: {integrity: sha512-CEt9B4e8zFOGtc/LYeQx5m8nfqQeG/4oNNv0PUvXGG0mys+wR/WbJ3B4KfSQ4Fcr3AQfpiuFOi3fVvmPfvNbxw==}
332 | engines: {node: '>=18'}
333 | peerDependencies:
334 | '@types/node': '>=18'
335 |
336 | '@inquirer/core@10.1.0':
337 | resolution: {integrity: sha512-I+ETk2AL+yAVbvuKx5AJpQmoaWhpiTFOg/UJb7ZkMAK4blmtG8ATh5ct+T/8xNld0CZG/2UhtkdMwpgvld92XQ==}
338 | engines: {node: '>=18'}
339 |
340 | '@inquirer/core@10.1.1':
341 | resolution: {integrity: sha512-rmZVXy9iZvO3ZStEe/ayuuwIJ23LSF13aPMlLMTQARX6lGUBDHGV8UB5i9MRrfy0+mZwt5/9bdy8llszSD3NQA==}
342 | engines: {node: '>=18'}
343 |
344 | '@inquirer/figures@1.0.8':
345 | resolution: {integrity: sha512-tKd+jsmhq21AP1LhexC0pPwsCxEhGgAkg28byjJAd+xhmIs8LUX8JbUc3vBf3PhLxWiB5EvyBE5X7JSPAqMAqg==}
346 | engines: {node: '>=18'}
347 |
348 | '@inquirer/select@4.0.2':
349 | resolution: {integrity: sha512-uSWUzaSYAEj0hlzxa1mUB6VqrKaYx0QxGBLZzU4xWFxaSyGaXxsSE4OSOwdU24j0xl8OajgayqFXW0l2bkl2kg==}
350 | engines: {node: '>=18'}
351 | peerDependencies:
352 | '@types/node': '>=18'
353 |
354 | '@inquirer/type@3.0.1':
355 | resolution: {integrity: sha512-+ksJMIy92sOAiAccGpcKZUc3bYO07cADnscIxHBknEm3uNts3movSmBofc1908BNy5edKscxYeAdaX1NXkHS6A==}
356 | engines: {node: '>=18'}
357 | peerDependencies:
358 | '@types/node': '>=18'
359 |
360 | '@isaacs/cliui@8.0.2':
361 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
362 | engines: {node: '>=12'}
363 |
364 | '@jridgewell/sourcemap-codec@1.5.0':
365 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
366 |
367 | '@manypkg/find-root@1.1.0':
368 | resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
369 |
370 | '@manypkg/get-packages@1.1.3':
371 | resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==}
372 |
373 | '@nodelib/fs.scandir@2.1.5':
374 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
375 | engines: {node: '>= 8'}
376 |
377 | '@nodelib/fs.stat@2.0.5':
378 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
379 | engines: {node: '>= 8'}
380 |
381 | '@nodelib/fs.walk@1.2.8':
382 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
383 | engines: {node: '>= 8'}
384 |
385 | '@rollup/rollup-android-arm-eabi@4.27.4':
386 | resolution: {integrity: sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==}
387 | cpu: [arm]
388 | os: [android]
389 |
390 | '@rollup/rollup-android-arm64@4.27.4':
391 | resolution: {integrity: sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==}
392 | cpu: [arm64]
393 | os: [android]
394 |
395 | '@rollup/rollup-darwin-arm64@4.27.4':
396 | resolution: {integrity: sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==}
397 | cpu: [arm64]
398 | os: [darwin]
399 |
400 | '@rollup/rollup-darwin-x64@4.27.4':
401 | resolution: {integrity: sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==}
402 | cpu: [x64]
403 | os: [darwin]
404 |
405 | '@rollup/rollup-freebsd-arm64@4.27.4':
406 | resolution: {integrity: sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==}
407 | cpu: [arm64]
408 | os: [freebsd]
409 |
410 | '@rollup/rollup-freebsd-x64@4.27.4':
411 | resolution: {integrity: sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==}
412 | cpu: [x64]
413 | os: [freebsd]
414 |
415 | '@rollup/rollup-linux-arm-gnueabihf@4.27.4':
416 | resolution: {integrity: sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==}
417 | cpu: [arm]
418 | os: [linux]
419 | libc: [glibc]
420 |
421 | '@rollup/rollup-linux-arm-musleabihf@4.27.4':
422 | resolution: {integrity: sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==}
423 | cpu: [arm]
424 | os: [linux]
425 | libc: [musl]
426 |
427 | '@rollup/rollup-linux-arm64-gnu@4.27.4':
428 | resolution: {integrity: sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==}
429 | cpu: [arm64]
430 | os: [linux]
431 | libc: [glibc]
432 |
433 | '@rollup/rollup-linux-arm64-musl@4.27.4':
434 | resolution: {integrity: sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==}
435 | cpu: [arm64]
436 | os: [linux]
437 | libc: [musl]
438 |
439 | '@rollup/rollup-linux-powerpc64le-gnu@4.27.4':
440 | resolution: {integrity: sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==}
441 | cpu: [ppc64]
442 | os: [linux]
443 | libc: [glibc]
444 |
445 | '@rollup/rollup-linux-riscv64-gnu@4.27.4':
446 | resolution: {integrity: sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==}
447 | cpu: [riscv64]
448 | os: [linux]
449 | libc: [glibc]
450 |
451 | '@rollup/rollup-linux-s390x-gnu@4.27.4':
452 | resolution: {integrity: sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==}
453 | cpu: [s390x]
454 | os: [linux]
455 | libc: [glibc]
456 |
457 | '@rollup/rollup-linux-x64-gnu@4.27.4':
458 | resolution: {integrity: sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==}
459 | cpu: [x64]
460 | os: [linux]
461 | libc: [glibc]
462 |
463 | '@rollup/rollup-linux-x64-musl@4.27.4':
464 | resolution: {integrity: sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==}
465 | cpu: [x64]
466 | os: [linux]
467 | libc: [musl]
468 |
469 | '@rollup/rollup-win32-arm64-msvc@4.27.4':
470 | resolution: {integrity: sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==}
471 | cpu: [arm64]
472 | os: [win32]
473 |
474 | '@rollup/rollup-win32-ia32-msvc@4.27.4':
475 | resolution: {integrity: sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==}
476 | cpu: [ia32]
477 | os: [win32]
478 |
479 | '@rollup/rollup-win32-x64-msvc@4.27.4':
480 | resolution: {integrity: sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==}
481 | cpu: [x64]
482 | os: [win32]
483 |
484 | '@types/estree@1.0.6':
485 | resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
486 |
487 | '@types/ini@4.1.1':
488 | resolution: {integrity: sha512-MIyNUZipBTbyUNnhvuXJTY7B6qNI78meck9Jbv3wk0OgNwRyOOVEKDutAkOs1snB/tx0FafyR6/SN4Ps0hZPeg==}
489 |
490 | '@types/node@12.20.55':
491 | resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
492 |
493 | '@types/node@18.19.67':
494 | resolution: {integrity: sha512-wI8uHusga+0ZugNp0Ol/3BqQfEcCCNfojtO6Oou9iVNGPTL6QNSdnUdqq85fRgIorLhLMuPIKpsN98QE9Nh+KQ==}
495 |
496 | '@vitest/expect@2.1.6':
497 | resolution: {integrity: sha512-9M1UR9CAmrhJOMoSwVnPh2rELPKhYo0m/CSgqw9PyStpxtkwhmdM6XYlXGKeYyERY1N6EIuzkQ7e3Lm1WKCoUg==}
498 |
499 | '@vitest/mocker@2.1.6':
500 | resolution: {integrity: sha512-MHZp2Z+Q/A3am5oD4WSH04f9B0T7UvwEb+v5W0kCYMhtXGYbdyl2NUk1wdSMqGthmhpiThPDp/hEoVwu16+u1A==}
501 | peerDependencies:
502 | msw: ^2.4.9
503 | vite: ^5.0.0 || ^6.0.0
504 | peerDependenciesMeta:
505 | msw:
506 | optional: true
507 | vite:
508 | optional: true
509 |
510 | '@vitest/pretty-format@2.1.6':
511 | resolution: {integrity: sha512-exZyLcEnHgDMKc54TtHca4McV4sKT+NKAe9ix/yhd/qkYb/TP8HTyXRFDijV19qKqTZM0hPL4753zU/U8L/gAA==}
512 |
513 | '@vitest/runner@2.1.6':
514 | resolution: {integrity: sha512-SjkRGSFyrA82m5nz7To4CkRSEVWn/rwQISHoia/DB8c6IHIhaE/UNAo+7UfeaeJRE979XceGl00LNkIz09RFsA==}
515 |
516 | '@vitest/snapshot@2.1.6':
517 | resolution: {integrity: sha512-5JTWHw8iS9l3v4/VSuthCndw1lN/hpPB+mlgn1BUhFbobeIUj1J1V/Bj2t2ovGEmkXLTckFjQddsxS5T6LuVWw==}
518 |
519 | '@vitest/spy@2.1.6':
520 | resolution: {integrity: sha512-oTFObV8bd4SDdRka5O+mSh5w9irgx5IetrD5i+OsUUsk/shsBoHifwCzy45SAORzAhtNiprUVaK3hSCCzZh1jQ==}
521 |
522 | '@vitest/utils@2.1.6':
523 | resolution: {integrity: sha512-ixNkFy3k4vokOUTU2blIUvOgKq/N2PW8vKIjZZYsGJCMX69MRa9J2sKqX5hY/k5O5Gty3YJChepkqZ3KM9LyIQ==}
524 |
525 | ansi-colors@4.1.3:
526 | resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
527 | engines: {node: '>=6'}
528 |
529 | ansi-escapes@4.3.2:
530 | resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==}
531 | engines: {node: '>=8'}
532 |
533 | ansi-regex@5.0.1:
534 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
535 | engines: {node: '>=8'}
536 |
537 | ansi-regex@6.1.0:
538 | resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
539 | engines: {node: '>=12'}
540 |
541 | ansi-styles@4.3.0:
542 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
543 | engines: {node: '>=8'}
544 |
545 | ansi-styles@6.2.1:
546 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
547 | engines: {node: '>=12'}
548 |
549 | argparse@1.0.10:
550 | resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
551 |
552 | array-union@2.1.0:
553 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
554 | engines: {node: '>=8'}
555 |
556 | assertion-error@2.0.1:
557 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
558 | engines: {node: '>=12'}
559 |
560 | balanced-match@1.0.2:
561 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
562 |
563 | better-path-resolve@1.0.0:
564 | resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
565 | engines: {node: '>=4'}
566 |
567 | brace-expansion@2.0.1:
568 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
569 |
570 | braces@3.0.3:
571 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
572 | engines: {node: '>=8'}
573 |
574 | cac@6.7.14:
575 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
576 | engines: {node: '>=8'}
577 |
578 | chai@5.1.2:
579 | resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==}
580 | engines: {node: '>=12'}
581 |
582 | chalk@4.1.2:
583 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
584 | engines: {node: '>=10'}
585 |
586 | chardet@0.7.0:
587 | resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
588 |
589 | check-error@2.1.1:
590 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
591 | engines: {node: '>= 16'}
592 |
593 | ci-info@3.9.0:
594 | resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
595 | engines: {node: '>=8'}
596 |
597 | cli-width@4.1.0:
598 | resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==}
599 | engines: {node: '>= 12'}
600 |
601 | coffee@5.5.1:
602 | resolution: {integrity: sha512-ZKt9b/Iq0jhe7tYpDMXJggx8l/+YIcQFi2C+LvJRQ7lUSJnzayir1BGbsoHELKKyV+zevWMCsfmGAI1fREyRbw==}
603 | engines: {node: '>= 6.0.0'}
604 |
605 | color-convert@2.0.1:
606 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
607 | engines: {node: '>=7.0.0'}
608 |
609 | color-name@1.1.4:
610 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
611 |
612 | commander@8.3.0:
613 | resolution: {integrity: sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==}
614 | engines: {node: '>= 12'}
615 |
616 | core-util-is@1.0.3:
617 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==}
618 |
619 | cross-spawn@6.0.6:
620 | resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==}
621 | engines: {node: '>=4.8'}
622 |
623 | cross-spawn@7.0.6:
624 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
625 | engines: {node: '>= 8'}
626 |
627 | debug@4.3.7:
628 | resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==}
629 | engines: {node: '>=6.0'}
630 | peerDependencies:
631 | supports-color: '*'
632 | peerDependenciesMeta:
633 | supports-color:
634 | optional: true
635 |
636 | deep-eql@5.0.2:
637 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
638 | engines: {node: '>=6'}
639 |
640 | define-lazy-prop@2.0.0:
641 | resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==}
642 | engines: {node: '>=8'}
643 |
644 | detect-indent@6.1.0:
645 | resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
646 | engines: {node: '>=8'}
647 |
648 | dir-glob@3.0.1:
649 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
650 | engines: {node: '>=8'}
651 |
652 | eastasianwidth@0.2.0:
653 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
654 |
655 | emoji-regex@8.0.0:
656 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
657 |
658 | emoji-regex@9.2.2:
659 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
660 |
661 | enquirer@2.4.1:
662 | resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
663 | engines: {node: '>=8.6'}
664 |
665 | es-module-lexer@1.5.4:
666 | resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==}
667 |
668 | esbuild@0.24.0:
669 | resolution: {integrity: sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==}
670 | engines: {node: '>=18'}
671 | hasBin: true
672 |
673 | esprima@4.0.1:
674 | resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
675 | engines: {node: '>=4'}
676 | hasBin: true
677 |
678 | estree-walker@3.0.3:
679 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
680 |
681 | expect-type@1.1.0:
682 | resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==}
683 | engines: {node: '>=12.0.0'}
684 |
685 | extendable-error@0.1.7:
686 | resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
687 |
688 | external-editor@3.1.0:
689 | resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
690 | engines: {node: '>=4'}
691 |
692 | fast-glob@3.3.2:
693 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
694 | engines: {node: '>=8.6.0'}
695 |
696 | fastq@1.17.1:
697 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==}
698 |
699 | fill-range@7.1.1:
700 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
701 | engines: {node: '>=8'}
702 |
703 | find-up@4.1.0:
704 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
705 | engines: {node: '>=8'}
706 |
707 | foreground-child@3.3.0:
708 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
709 | engines: {node: '>=14'}
710 |
711 | fs-extra@7.0.1:
712 | resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
713 | engines: {node: '>=6 <7 || >=8'}
714 |
715 | fs-extra@8.1.0:
716 | resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
717 | engines: {node: '>=6 <7 || >=8'}
718 |
719 | fsevents@2.3.3:
720 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
721 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
722 | os: [darwin]
723 |
724 | glob-parent@5.1.2:
725 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
726 | engines: {node: '>= 6'}
727 |
728 | glob@11.0.0:
729 | resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==}
730 | engines: {node: 20 || >=22}
731 | hasBin: true
732 |
733 | globby@11.1.0:
734 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
735 | engines: {node: '>=10'}
736 |
737 | graceful-fs@4.2.11:
738 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
739 |
740 | has-flag@4.0.0:
741 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
742 | engines: {node: '>=8'}
743 |
744 | human-id@1.0.2:
745 | resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==}
746 |
747 | iconv-lite@0.4.24:
748 | resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
749 | engines: {node: '>=0.10.0'}
750 |
751 | ignore@5.3.2:
752 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
753 | engines: {node: '>= 4'}
754 |
755 | ini@4.1.3:
756 | resolution: {integrity: sha512-X7rqawQBvfdjS10YU1y1YVreA3SsLrW9dX2CewP2EbBJM4ypVNLDkO5y04gejPwKIY9lR+7r9gn3rFPt/kmWFg==}
757 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0}
758 |
759 | is-class-hotfix@0.0.6:
760 | resolution: {integrity: sha512-0n+pzCC6ICtVr/WXnN2f03TK/3BfXY7me4cjCAqT8TYXEl0+JBRoqBo94JJHXcyDSLUeWbNX8Fvy5g5RJdAstQ==}
761 |
762 | is-docker@2.2.1:
763 | resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
764 | engines: {node: '>=8'}
765 | hasBin: true
766 |
767 | is-extglob@2.1.1:
768 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
769 | engines: {node: '>=0.10.0'}
770 |
771 | is-fullwidth-code-point@3.0.0:
772 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
773 | engines: {node: '>=8'}
774 |
775 | is-glob@4.0.3:
776 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
777 | engines: {node: '>=0.10.0'}
778 |
779 | is-number@7.0.0:
780 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
781 | engines: {node: '>=0.12.0'}
782 |
783 | is-subdir@1.2.0:
784 | resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==}
785 | engines: {node: '>=4'}
786 |
787 | is-type-of@1.4.0:
788 | resolution: {integrity: sha512-EddYllaovi5ysMLMEN7yzHEKh8A850cZ7pykrY1aNRQGn/CDjRDE9qEWbIdt7xGEVJmjBXzU/fNnC4ABTm8tEQ==}
789 |
790 | is-windows@1.0.2:
791 | resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
792 | engines: {node: '>=0.10.0'}
793 |
794 | is-wsl@2.2.0:
795 | resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
796 | engines: {node: '>=8'}
797 |
798 | isexe@2.0.0:
799 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
800 |
801 | isstream@0.1.2:
802 | resolution: {integrity: sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g==}
803 |
804 | jackspeak@4.0.2:
805 | resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==}
806 | engines: {node: 20 || >=22}
807 |
808 | js-yaml@3.14.1:
809 | resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
810 | hasBin: true
811 |
812 | jsonfile@4.0.0:
813 | resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
814 |
815 | locate-path@5.0.0:
816 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
817 | engines: {node: '>=8'}
818 |
819 | lodash.startcase@4.4.0:
820 | resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
821 |
822 | loupe@3.1.2:
823 | resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==}
824 |
825 | lru-cache@11.0.2:
826 | resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==}
827 | engines: {node: 20 || >=22}
828 |
829 | magic-string@0.30.14:
830 | resolution: {integrity: sha512-5c99P1WKTed11ZC0HMJOj6CDIue6F8ySu+bJL+85q1zBEIY8IklrJ1eiKC2NDRh3Ct3FcvmJPyQHb9erXMTJNw==}
831 |
832 | merge2@1.4.1:
833 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
834 | engines: {node: '>= 8'}
835 |
836 | micromatch@4.0.8:
837 | resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
838 | engines: {node: '>=8.6'}
839 |
840 | minimatch@10.0.1:
841 | resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
842 | engines: {node: 20 || >=22}
843 |
844 | minipass@7.1.2:
845 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
846 | engines: {node: '>=16 || 14 >=14.17'}
847 |
848 | mock-fs@5.4.1:
849 | resolution: {integrity: sha512-sz/Q8K1gXXXHR+qr0GZg2ysxCRr323kuN10O7CtQjraJsFDJ4SJ+0I5MzALz7aRp9lHk8Cc/YdsT95h9Ka1aFw==}
850 | engines: {node: '>=12.0.0'}
851 |
852 | mri@1.2.0:
853 | resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
854 | engines: {node: '>=4'}
855 |
856 | ms@2.1.3:
857 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
858 |
859 | mute-stream@2.0.0:
860 | resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==}
861 | engines: {node: ^18.17.0 || >=20.5.0}
862 |
863 | nanoid@3.3.8:
864 | resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
865 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
866 | hasBin: true
867 |
868 | nice-try@1.0.5:
869 | resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
870 |
871 | open@8.4.2:
872 | resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==}
873 | engines: {node: '>=12'}
874 |
875 | os-tmpdir@1.0.2:
876 | resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
877 | engines: {node: '>=0.10.0'}
878 |
879 | outdent@0.5.0:
880 | resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==}
881 |
882 | p-filter@2.1.0:
883 | resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==}
884 | engines: {node: '>=8'}
885 |
886 | p-limit@2.3.0:
887 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
888 | engines: {node: '>=6'}
889 |
890 | p-locate@4.1.0:
891 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
892 | engines: {node: '>=8'}
893 |
894 | p-map@2.1.0:
895 | resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
896 | engines: {node: '>=6'}
897 |
898 | p-try@2.2.0:
899 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
900 | engines: {node: '>=6'}
901 |
902 | package-json-from-dist@1.0.1:
903 | resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
904 |
905 | package-manager-detector@0.2.6:
906 | resolution: {integrity: sha512-9vPH3qooBlYRJdmdYP00nvjZOulm40r5dhtal8st18ctf+6S1k7pi5yIHLvI4w5D70x0Y+xdVD9qITH0QO/A8A==}
907 |
908 | path-exists@4.0.0:
909 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
910 | engines: {node: '>=8'}
911 |
912 | path-key@2.0.1:
913 | resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
914 | engines: {node: '>=4'}
915 |
916 | path-key@3.1.1:
917 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
918 | engines: {node: '>=8'}
919 |
920 | path-scurry@2.0.0:
921 | resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
922 | engines: {node: 20 || >=22}
923 |
924 | path-type@4.0.0:
925 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
926 | engines: {node: '>=8'}
927 |
928 | pathe@1.1.2:
929 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==}
930 |
931 | pathval@2.0.0:
932 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
933 | engines: {node: '>= 14.16'}
934 |
935 | picocolors@1.1.1:
936 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
937 |
938 | picomatch@2.3.1:
939 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
940 | engines: {node: '>=8.6'}
941 |
942 | pify@4.0.1:
943 | resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
944 | engines: {node: '>=6'}
945 |
946 | postcss@8.4.49:
947 | resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==}
948 | engines: {node: ^10 || ^12 || >=14}
949 |
950 | prettier@2.8.8:
951 | resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
952 | engines: {node: '>=10.13.0'}
953 | hasBin: true
954 |
955 | queue-microtask@1.2.3:
956 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
957 |
958 | read-yaml-file@1.1.0:
959 | resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==}
960 | engines: {node: '>=6'}
961 |
962 | regenerator-runtime@0.14.1:
963 | resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
964 |
965 | resolve-from@5.0.0:
966 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
967 | engines: {node: '>=8'}
968 |
969 | reusify@1.0.4:
970 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
971 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
972 |
973 | rimraf@6.0.1:
974 | resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
975 | engines: {node: 20 || >=22}
976 | hasBin: true
977 |
978 | rollup@4.27.4:
979 | resolution: {integrity: sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==}
980 | engines: {node: '>=18.0.0', npm: '>=8.0.0'}
981 | hasBin: true
982 |
983 | run-parallel@1.2.0:
984 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
985 |
986 | safer-buffer@2.1.2:
987 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
988 |
989 | semver@5.7.2:
990 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
991 | hasBin: true
992 |
993 | semver@7.6.3:
994 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==}
995 | engines: {node: '>=10'}
996 | hasBin: true
997 |
998 | shebang-command@1.2.0:
999 | resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
1000 | engines: {node: '>=0.10.0'}
1001 |
1002 | shebang-command@2.0.0:
1003 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1004 | engines: {node: '>=8'}
1005 |
1006 | shebang-regex@1.0.0:
1007 | resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
1008 | engines: {node: '>=0.10.0'}
1009 |
1010 | shebang-regex@3.0.0:
1011 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1012 | engines: {node: '>=8'}
1013 |
1014 | siginfo@2.0.0:
1015 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
1016 |
1017 | signal-exit@4.1.0:
1018 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1019 | engines: {node: '>=14'}
1020 |
1021 | slash@3.0.0:
1022 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1023 | engines: {node: '>=8'}
1024 |
1025 | source-map-js@1.2.1:
1026 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1027 | engines: {node: '>=0.10.0'}
1028 |
1029 | spawndamnit@3.0.1:
1030 | resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==}
1031 |
1032 | sprintf-js@1.0.3:
1033 | resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
1034 |
1035 | stackback@0.0.2:
1036 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
1037 |
1038 | std-env@3.8.0:
1039 | resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
1040 |
1041 | string-width@4.2.3:
1042 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1043 | engines: {node: '>=8'}
1044 |
1045 | string-width@5.1.2:
1046 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1047 | engines: {node: '>=12'}
1048 |
1049 | strip-ansi@6.0.1:
1050 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1051 | engines: {node: '>=8'}
1052 |
1053 | strip-ansi@7.1.0:
1054 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1055 | engines: {node: '>=12'}
1056 |
1057 | strip-bom@3.0.0:
1058 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
1059 | engines: {node: '>=4'}
1060 |
1061 | supports-color@7.2.0:
1062 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
1063 | engines: {node: '>=8'}
1064 |
1065 | term-size@2.2.1:
1066 | resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
1067 | engines: {node: '>=8'}
1068 |
1069 | tinybench@2.9.0:
1070 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
1071 |
1072 | tinyexec@0.3.1:
1073 | resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==}
1074 |
1075 | tinypool@1.0.2:
1076 | resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
1077 | engines: {node: ^18.0.0 || >=20.0.0}
1078 |
1079 | tinyrainbow@1.2.0:
1080 | resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==}
1081 | engines: {node: '>=14.0.0'}
1082 |
1083 | tinyspy@3.0.2:
1084 | resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
1085 | engines: {node: '>=14.0.0'}
1086 |
1087 | tmp@0.0.33:
1088 | resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
1089 | engines: {node: '>=0.6.0'}
1090 |
1091 | to-regex-range@5.0.1:
1092 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1093 | engines: {node: '>=8.0'}
1094 |
1095 | type-fest@0.21.3:
1096 | resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==}
1097 | engines: {node: '>=10'}
1098 |
1099 | typescript@5.7.2:
1100 | resolution: {integrity: sha512-i5t66RHxDvVN40HfDd1PsEThGNnlMCMT3jMUuoh9/0TaqWevNontacunWyN02LA9/fIbEWlcHZcgTKb9QoaLfg==}
1101 | engines: {node: '>=14.17'}
1102 | hasBin: true
1103 |
1104 | undici-types@5.26.5:
1105 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==}
1106 |
1107 | undici@5.28.2:
1108 | resolution: {integrity: sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w==}
1109 | engines: {node: '>=14.0'}
1110 |
1111 | universalify@0.1.2:
1112 | resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
1113 | engines: {node: '>= 4.0.0'}
1114 |
1115 | vite-node@2.1.6:
1116 | resolution: {integrity: sha512-DBfJY0n9JUwnyLxPSSUmEePT21j8JZp/sR9n+/gBwQU6DcQOioPdb8/pibWfXForbirSagZCilseYIwaL3f95A==}
1117 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1118 | hasBin: true
1119 |
1120 | vite@6.0.1:
1121 | resolution: {integrity: sha512-Ldn6gorLGr4mCdFnmeAOLweJxZ34HjKnDm4HGo6P66IEqTxQb36VEdFJQENKxWjupNfoIjvRUnswjn1hpYEpjQ==}
1122 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1123 | hasBin: true
1124 | peerDependencies:
1125 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
1126 | jiti: '>=1.21.0'
1127 | less: '*'
1128 | lightningcss: ^1.21.0
1129 | sass: '*'
1130 | sass-embedded: '*'
1131 | stylus: '*'
1132 | sugarss: '*'
1133 | terser: ^5.16.0
1134 | tsx: ^4.8.1
1135 | yaml: ^2.4.2
1136 | peerDependenciesMeta:
1137 | '@types/node':
1138 | optional: true
1139 | jiti:
1140 | optional: true
1141 | less:
1142 | optional: true
1143 | lightningcss:
1144 | optional: true
1145 | sass:
1146 | optional: true
1147 | sass-embedded:
1148 | optional: true
1149 | stylus:
1150 | optional: true
1151 | sugarss:
1152 | optional: true
1153 | terser:
1154 | optional: true
1155 | tsx:
1156 | optional: true
1157 | yaml:
1158 | optional: true
1159 |
1160 | vitest@2.1.6:
1161 | resolution: {integrity: sha512-isUCkvPL30J4c5O5hgONeFRsDmlw6kzFEdLQHLezmDdKQHy8Ke/B/dgdTMEgU0vm+iZ0TjW8GuK83DiahBoKWQ==}
1162 | engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1163 | hasBin: true
1164 | peerDependencies:
1165 | '@edge-runtime/vm': '*'
1166 | '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
1167 | '@vitest/browser': 2.1.6
1168 | '@vitest/ui': 2.1.6
1169 | happy-dom: '*'
1170 | jsdom: '*'
1171 | peerDependenciesMeta:
1172 | '@edge-runtime/vm':
1173 | optional: true
1174 | '@types/node':
1175 | optional: true
1176 | '@vitest/browser':
1177 | optional: true
1178 | '@vitest/ui':
1179 | optional: true
1180 | happy-dom:
1181 | optional: true
1182 | jsdom:
1183 | optional: true
1184 |
1185 | which@1.3.1:
1186 | resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
1187 | hasBin: true
1188 |
1189 | which@2.0.2:
1190 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
1191 | engines: {node: '>= 8'}
1192 | hasBin: true
1193 |
1194 | why-is-node-running@2.3.0:
1195 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
1196 | engines: {node: '>=8'}
1197 | hasBin: true
1198 |
1199 | wrap-ansi@6.2.0:
1200 | resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==}
1201 | engines: {node: '>=8'}
1202 |
1203 | wrap-ansi@7.0.0:
1204 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
1205 | engines: {node: '>=10'}
1206 |
1207 | wrap-ansi@8.1.0:
1208 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
1209 | engines: {node: '>=12'}
1210 |
1211 | yoctocolors-cjs@2.1.2:
1212 | resolution: {integrity: sha512-cYVsTjKl8b+FrnidjibDWskAv7UKOfcwaVZdp/it9n1s9fU3IkgDbhdIRKCW4JDsAlECJY0ytoVPT3sK6kideA==}
1213 | engines: {node: '>=18'}
1214 |
1215 | snapshots:
1216 |
1217 | '@babel/runtime@7.26.0':
1218 | dependencies:
1219 | regenerator-runtime: 0.14.1
1220 |
1221 | '@biomejs/biome@1.9.4':
1222 | optionalDependencies:
1223 | '@biomejs/cli-darwin-arm64': 1.9.4
1224 | '@biomejs/cli-darwin-x64': 1.9.4
1225 | '@biomejs/cli-linux-arm64': 1.9.4
1226 | '@biomejs/cli-linux-arm64-musl': 1.9.4
1227 | '@biomejs/cli-linux-x64': 1.9.4
1228 | '@biomejs/cli-linux-x64-musl': 1.9.4
1229 | '@biomejs/cli-win32-arm64': 1.9.4
1230 | '@biomejs/cli-win32-x64': 1.9.4
1231 |
1232 | '@biomejs/cli-darwin-arm64@1.9.4':
1233 | optional: true
1234 |
1235 | '@biomejs/cli-darwin-x64@1.9.4':
1236 | optional: true
1237 |
1238 | '@biomejs/cli-linux-arm64-musl@1.9.4':
1239 | optional: true
1240 |
1241 | '@biomejs/cli-linux-arm64@1.9.4':
1242 | optional: true
1243 |
1244 | '@biomejs/cli-linux-x64-musl@1.9.4':
1245 | optional: true
1246 |
1247 | '@biomejs/cli-linux-x64@1.9.4':
1248 | optional: true
1249 |
1250 | '@biomejs/cli-win32-arm64@1.9.4':
1251 | optional: true
1252 |
1253 | '@biomejs/cli-win32-x64@1.9.4':
1254 | optional: true
1255 |
1256 | '@changesets/apply-release-plan@7.0.6':
1257 | dependencies:
1258 | '@changesets/config': 3.0.4
1259 | '@changesets/get-version-range-type': 0.4.0
1260 | '@changesets/git': 3.0.2
1261 | '@changesets/should-skip-package': 0.1.1
1262 | '@changesets/types': 6.0.0
1263 | '@manypkg/get-packages': 1.1.3
1264 | detect-indent: 6.1.0
1265 | fs-extra: 7.0.1
1266 | lodash.startcase: 4.4.0
1267 | outdent: 0.5.0
1268 | prettier: 2.8.8
1269 | resolve-from: 5.0.0
1270 | semver: 7.6.3
1271 |
1272 | '@changesets/assemble-release-plan@6.0.5':
1273 | dependencies:
1274 | '@changesets/errors': 0.2.0
1275 | '@changesets/get-dependents-graph': 2.1.2
1276 | '@changesets/should-skip-package': 0.1.1
1277 | '@changesets/types': 6.0.0
1278 | '@manypkg/get-packages': 1.1.3
1279 | semver: 7.6.3
1280 |
1281 | '@changesets/changelog-git@0.2.0':
1282 | dependencies:
1283 | '@changesets/types': 6.0.0
1284 |
1285 | '@changesets/cli@2.27.10':
1286 | dependencies:
1287 | '@changesets/apply-release-plan': 7.0.6
1288 | '@changesets/assemble-release-plan': 6.0.5
1289 | '@changesets/changelog-git': 0.2.0
1290 | '@changesets/config': 3.0.4
1291 | '@changesets/errors': 0.2.0
1292 | '@changesets/get-dependents-graph': 2.1.2
1293 | '@changesets/get-release-plan': 4.0.5
1294 | '@changesets/git': 3.0.2
1295 | '@changesets/logger': 0.1.1
1296 | '@changesets/pre': 2.0.1
1297 | '@changesets/read': 0.6.2
1298 | '@changesets/should-skip-package': 0.1.1
1299 | '@changesets/types': 6.0.0
1300 | '@changesets/write': 0.3.2
1301 | '@manypkg/get-packages': 1.1.3
1302 | ansi-colors: 4.1.3
1303 | ci-info: 3.9.0
1304 | enquirer: 2.4.1
1305 | external-editor: 3.1.0
1306 | fs-extra: 7.0.1
1307 | mri: 1.2.0
1308 | p-limit: 2.3.0
1309 | package-manager-detector: 0.2.6
1310 | picocolors: 1.1.1
1311 | resolve-from: 5.0.0
1312 | semver: 7.6.3
1313 | spawndamnit: 3.0.1
1314 | term-size: 2.2.1
1315 |
1316 | '@changesets/config@3.0.4':
1317 | dependencies:
1318 | '@changesets/errors': 0.2.0
1319 | '@changesets/get-dependents-graph': 2.1.2
1320 | '@changesets/logger': 0.1.1
1321 | '@changesets/types': 6.0.0
1322 | '@manypkg/get-packages': 1.1.3
1323 | fs-extra: 7.0.1
1324 | micromatch: 4.0.8
1325 |
1326 | '@changesets/errors@0.2.0':
1327 | dependencies:
1328 | extendable-error: 0.1.7
1329 |
1330 | '@changesets/get-dependents-graph@2.1.2':
1331 | dependencies:
1332 | '@changesets/types': 6.0.0
1333 | '@manypkg/get-packages': 1.1.3
1334 | picocolors: 1.1.1
1335 | semver: 7.6.3
1336 |
1337 | '@changesets/get-release-plan@4.0.5':
1338 | dependencies:
1339 | '@changesets/assemble-release-plan': 6.0.5
1340 | '@changesets/config': 3.0.4
1341 | '@changesets/pre': 2.0.1
1342 | '@changesets/read': 0.6.2
1343 | '@changesets/types': 6.0.0
1344 | '@manypkg/get-packages': 1.1.3
1345 |
1346 | '@changesets/get-version-range-type@0.4.0': {}
1347 |
1348 | '@changesets/git@3.0.2':
1349 | dependencies:
1350 | '@changesets/errors': 0.2.0
1351 | '@manypkg/get-packages': 1.1.3
1352 | is-subdir: 1.2.0
1353 | micromatch: 4.0.8
1354 | spawndamnit: 3.0.1
1355 |
1356 | '@changesets/logger@0.1.1':
1357 | dependencies:
1358 | picocolors: 1.1.1
1359 |
1360 | '@changesets/parse@0.4.0':
1361 | dependencies:
1362 | '@changesets/types': 6.0.0
1363 | js-yaml: 3.14.1
1364 |
1365 | '@changesets/pre@2.0.1':
1366 | dependencies:
1367 | '@changesets/errors': 0.2.0
1368 | '@changesets/types': 6.0.0
1369 | '@manypkg/get-packages': 1.1.3
1370 | fs-extra: 7.0.1
1371 |
1372 | '@changesets/read@0.6.2':
1373 | dependencies:
1374 | '@changesets/git': 3.0.2
1375 | '@changesets/logger': 0.1.1
1376 | '@changesets/parse': 0.4.0
1377 | '@changesets/types': 6.0.0
1378 | fs-extra: 7.0.1
1379 | p-filter: 2.1.0
1380 | picocolors: 1.1.1
1381 |
1382 | '@changesets/should-skip-package@0.1.1':
1383 | dependencies:
1384 | '@changesets/types': 6.0.0
1385 | '@manypkg/get-packages': 1.1.3
1386 |
1387 | '@changesets/types@4.1.0': {}
1388 |
1389 | '@changesets/types@6.0.0': {}
1390 |
1391 | '@changesets/write@0.3.2':
1392 | dependencies:
1393 | '@changesets/types': 6.0.0
1394 | fs-extra: 7.0.1
1395 | human-id: 1.0.2
1396 | prettier: 2.8.8
1397 |
1398 | '@esbuild/aix-ppc64@0.24.0':
1399 | optional: true
1400 |
1401 | '@esbuild/android-arm64@0.24.0':
1402 | optional: true
1403 |
1404 | '@esbuild/android-arm@0.24.0':
1405 | optional: true
1406 |
1407 | '@esbuild/android-x64@0.24.0':
1408 | optional: true
1409 |
1410 | '@esbuild/darwin-arm64@0.24.0':
1411 | optional: true
1412 |
1413 | '@esbuild/darwin-x64@0.24.0':
1414 | optional: true
1415 |
1416 | '@esbuild/freebsd-arm64@0.24.0':
1417 | optional: true
1418 |
1419 | '@esbuild/freebsd-x64@0.24.0':
1420 | optional: true
1421 |
1422 | '@esbuild/linux-arm64@0.24.0':
1423 | optional: true
1424 |
1425 | '@esbuild/linux-arm@0.24.0':
1426 | optional: true
1427 |
1428 | '@esbuild/linux-ia32@0.24.0':
1429 | optional: true
1430 |
1431 | '@esbuild/linux-loong64@0.24.0':
1432 | optional: true
1433 |
1434 | '@esbuild/linux-mips64el@0.24.0':
1435 | optional: true
1436 |
1437 | '@esbuild/linux-ppc64@0.24.0':
1438 | optional: true
1439 |
1440 | '@esbuild/linux-riscv64@0.24.0':
1441 | optional: true
1442 |
1443 | '@esbuild/linux-s390x@0.24.0':
1444 | optional: true
1445 |
1446 | '@esbuild/linux-x64@0.24.0':
1447 | optional: true
1448 |
1449 | '@esbuild/netbsd-x64@0.24.0':
1450 | optional: true
1451 |
1452 | '@esbuild/openbsd-arm64@0.24.0':
1453 | optional: true
1454 |
1455 | '@esbuild/openbsd-x64@0.24.0':
1456 | optional: true
1457 |
1458 | '@esbuild/sunos-x64@0.24.0':
1459 | optional: true
1460 |
1461 | '@esbuild/win32-arm64@0.24.0':
1462 | optional: true
1463 |
1464 | '@esbuild/win32-ia32@0.24.0':
1465 | optional: true
1466 |
1467 | '@esbuild/win32-x64@0.24.0':
1468 | optional: true
1469 |
1470 | '@fastify/busboy@2.1.1': {}
1471 |
1472 | '@inquirer/checkbox@4.0.3(@types/node@18.19.67)':
1473 | dependencies:
1474 | '@inquirer/core': 10.1.1(@types/node@18.19.67)
1475 | '@inquirer/figures': 1.0.8
1476 | '@inquirer/type': 3.0.1(@types/node@18.19.67)
1477 | '@types/node': 18.19.67
1478 | ansi-escapes: 4.3.2
1479 | yoctocolors-cjs: 2.1.2
1480 |
1481 | '@inquirer/core@10.1.0(@types/node@18.19.67)':
1482 | dependencies:
1483 | '@inquirer/figures': 1.0.8
1484 | '@inquirer/type': 3.0.1(@types/node@18.19.67)
1485 | ansi-escapes: 4.3.2
1486 | cli-width: 4.1.0
1487 | mute-stream: 2.0.0
1488 | signal-exit: 4.1.0
1489 | strip-ansi: 6.0.1
1490 | wrap-ansi: 6.2.0
1491 | yoctocolors-cjs: 2.1.2
1492 | transitivePeerDependencies:
1493 | - '@types/node'
1494 |
1495 | '@inquirer/core@10.1.1(@types/node@18.19.67)':
1496 | dependencies:
1497 | '@inquirer/figures': 1.0.8
1498 | '@inquirer/type': 3.0.1(@types/node@18.19.67)
1499 | ansi-escapes: 4.3.2
1500 | cli-width: 4.1.0
1501 | mute-stream: 2.0.0
1502 | signal-exit: 4.1.0
1503 | strip-ansi: 6.0.1
1504 | wrap-ansi: 6.2.0
1505 | yoctocolors-cjs: 2.1.2
1506 | transitivePeerDependencies:
1507 | - '@types/node'
1508 |
1509 | '@inquirer/figures@1.0.8': {}
1510 |
1511 | '@inquirer/select@4.0.2(@types/node@18.19.67)':
1512 | dependencies:
1513 | '@inquirer/core': 10.1.0(@types/node@18.19.67)
1514 | '@inquirer/figures': 1.0.8
1515 | '@inquirer/type': 3.0.1(@types/node@18.19.67)
1516 | '@types/node': 18.19.67
1517 | ansi-escapes: 4.3.2
1518 | yoctocolors-cjs: 2.1.2
1519 |
1520 | '@inquirer/type@3.0.1(@types/node@18.19.67)':
1521 | dependencies:
1522 | '@types/node': 18.19.67
1523 |
1524 | '@isaacs/cliui@8.0.2':
1525 | dependencies:
1526 | string-width: 5.1.2
1527 | string-width-cjs: string-width@4.2.3
1528 | strip-ansi: 7.1.0
1529 | strip-ansi-cjs: strip-ansi@6.0.1
1530 | wrap-ansi: 8.1.0
1531 | wrap-ansi-cjs: wrap-ansi@7.0.0
1532 |
1533 | '@jridgewell/sourcemap-codec@1.5.0': {}
1534 |
1535 | '@manypkg/find-root@1.1.0':
1536 | dependencies:
1537 | '@babel/runtime': 7.26.0
1538 | '@types/node': 12.20.55
1539 | find-up: 4.1.0
1540 | fs-extra: 8.1.0
1541 |
1542 | '@manypkg/get-packages@1.1.3':
1543 | dependencies:
1544 | '@babel/runtime': 7.26.0
1545 | '@changesets/types': 4.1.0
1546 | '@manypkg/find-root': 1.1.0
1547 | fs-extra: 8.1.0
1548 | globby: 11.1.0
1549 | read-yaml-file: 1.1.0
1550 |
1551 | '@nodelib/fs.scandir@2.1.5':
1552 | dependencies:
1553 | '@nodelib/fs.stat': 2.0.5
1554 | run-parallel: 1.2.0
1555 |
1556 | '@nodelib/fs.stat@2.0.5': {}
1557 |
1558 | '@nodelib/fs.walk@1.2.8':
1559 | dependencies:
1560 | '@nodelib/fs.scandir': 2.1.5
1561 | fastq: 1.17.1
1562 |
1563 | '@rollup/rollup-android-arm-eabi@4.27.4':
1564 | optional: true
1565 |
1566 | '@rollup/rollup-android-arm64@4.27.4':
1567 | optional: true
1568 |
1569 | '@rollup/rollup-darwin-arm64@4.27.4':
1570 | optional: true
1571 |
1572 | '@rollup/rollup-darwin-x64@4.27.4':
1573 | optional: true
1574 |
1575 | '@rollup/rollup-freebsd-arm64@4.27.4':
1576 | optional: true
1577 |
1578 | '@rollup/rollup-freebsd-x64@4.27.4':
1579 | optional: true
1580 |
1581 | '@rollup/rollup-linux-arm-gnueabihf@4.27.4':
1582 | optional: true
1583 |
1584 | '@rollup/rollup-linux-arm-musleabihf@4.27.4':
1585 | optional: true
1586 |
1587 | '@rollup/rollup-linux-arm64-gnu@4.27.4':
1588 | optional: true
1589 |
1590 | '@rollup/rollup-linux-arm64-musl@4.27.4':
1591 | optional: true
1592 |
1593 | '@rollup/rollup-linux-powerpc64le-gnu@4.27.4':
1594 | optional: true
1595 |
1596 | '@rollup/rollup-linux-riscv64-gnu@4.27.4':
1597 | optional: true
1598 |
1599 | '@rollup/rollup-linux-s390x-gnu@4.27.4':
1600 | optional: true
1601 |
1602 | '@rollup/rollup-linux-x64-gnu@4.27.4':
1603 | optional: true
1604 |
1605 | '@rollup/rollup-linux-x64-musl@4.27.4':
1606 | optional: true
1607 |
1608 | '@rollup/rollup-win32-arm64-msvc@4.27.4':
1609 | optional: true
1610 |
1611 | '@rollup/rollup-win32-ia32-msvc@4.27.4':
1612 | optional: true
1613 |
1614 | '@rollup/rollup-win32-x64-msvc@4.27.4':
1615 | optional: true
1616 |
1617 | '@types/estree@1.0.6': {}
1618 |
1619 | '@types/ini@4.1.1': {}
1620 |
1621 | '@types/node@12.20.55': {}
1622 |
1623 | '@types/node@18.19.67':
1624 | dependencies:
1625 | undici-types: 5.26.5
1626 |
1627 | '@vitest/expect@2.1.6':
1628 | dependencies:
1629 | '@vitest/spy': 2.1.6
1630 | '@vitest/utils': 2.1.6
1631 | chai: 5.1.2
1632 | tinyrainbow: 1.2.0
1633 |
1634 | '@vitest/mocker@2.1.6(vite@6.0.1(@types/node@18.19.67))':
1635 | dependencies:
1636 | '@vitest/spy': 2.1.6
1637 | estree-walker: 3.0.3
1638 | magic-string: 0.30.14
1639 | optionalDependencies:
1640 | vite: 6.0.1(@types/node@18.19.67)
1641 |
1642 | '@vitest/pretty-format@2.1.6':
1643 | dependencies:
1644 | tinyrainbow: 1.2.0
1645 |
1646 | '@vitest/runner@2.1.6':
1647 | dependencies:
1648 | '@vitest/utils': 2.1.6
1649 | pathe: 1.1.2
1650 |
1651 | '@vitest/snapshot@2.1.6':
1652 | dependencies:
1653 | '@vitest/pretty-format': 2.1.6
1654 | magic-string: 0.30.14
1655 | pathe: 1.1.2
1656 |
1657 | '@vitest/spy@2.1.6':
1658 | dependencies:
1659 | tinyspy: 3.0.2
1660 |
1661 | '@vitest/utils@2.1.6':
1662 | dependencies:
1663 | '@vitest/pretty-format': 2.1.6
1664 | loupe: 3.1.2
1665 | tinyrainbow: 1.2.0
1666 |
1667 | ansi-colors@4.1.3: {}
1668 |
1669 | ansi-escapes@4.3.2:
1670 | dependencies:
1671 | type-fest: 0.21.3
1672 |
1673 | ansi-regex@5.0.1: {}
1674 |
1675 | ansi-regex@6.1.0: {}
1676 |
1677 | ansi-styles@4.3.0:
1678 | dependencies:
1679 | color-convert: 2.0.1
1680 |
1681 | ansi-styles@6.2.1: {}
1682 |
1683 | argparse@1.0.10:
1684 | dependencies:
1685 | sprintf-js: 1.0.3
1686 |
1687 | array-union@2.1.0: {}
1688 |
1689 | assertion-error@2.0.1: {}
1690 |
1691 | balanced-match@1.0.2: {}
1692 |
1693 | better-path-resolve@1.0.0:
1694 | dependencies:
1695 | is-windows: 1.0.2
1696 |
1697 | brace-expansion@2.0.1:
1698 | dependencies:
1699 | balanced-match: 1.0.2
1700 |
1701 | braces@3.0.3:
1702 | dependencies:
1703 | fill-range: 7.1.1
1704 |
1705 | cac@6.7.14: {}
1706 |
1707 | chai@5.1.2:
1708 | dependencies:
1709 | assertion-error: 2.0.1
1710 | check-error: 2.1.1
1711 | deep-eql: 5.0.2
1712 | loupe: 3.1.2
1713 | pathval: 2.0.0
1714 |
1715 | chalk@4.1.2:
1716 | dependencies:
1717 | ansi-styles: 4.3.0
1718 | supports-color: 7.2.0
1719 |
1720 | chardet@0.7.0: {}
1721 |
1722 | check-error@2.1.1: {}
1723 |
1724 | ci-info@3.9.0: {}
1725 |
1726 | cli-width@4.1.0: {}
1727 |
1728 | coffee@5.5.1:
1729 | dependencies:
1730 | cross-spawn: 6.0.6
1731 | debug: 4.3.7
1732 | is-type-of: 1.4.0
1733 | transitivePeerDependencies:
1734 | - supports-color
1735 |
1736 | color-convert@2.0.1:
1737 | dependencies:
1738 | color-name: 1.1.4
1739 |
1740 | color-name@1.1.4: {}
1741 |
1742 | commander@8.3.0: {}
1743 |
1744 | core-util-is@1.0.3: {}
1745 |
1746 | cross-spawn@6.0.6:
1747 | dependencies:
1748 | nice-try: 1.0.5
1749 | path-key: 2.0.1
1750 | semver: 5.7.2
1751 | shebang-command: 1.2.0
1752 | which: 1.3.1
1753 |
1754 | cross-spawn@7.0.6:
1755 | dependencies:
1756 | path-key: 3.1.1
1757 | shebang-command: 2.0.0
1758 | which: 2.0.2
1759 |
1760 | debug@4.3.7:
1761 | dependencies:
1762 | ms: 2.1.3
1763 |
1764 | deep-eql@5.0.2: {}
1765 |
1766 | define-lazy-prop@2.0.0: {}
1767 |
1768 | detect-indent@6.1.0: {}
1769 |
1770 | dir-glob@3.0.1:
1771 | dependencies:
1772 | path-type: 4.0.0
1773 |
1774 | eastasianwidth@0.2.0: {}
1775 |
1776 | emoji-regex@8.0.0: {}
1777 |
1778 | emoji-regex@9.2.2: {}
1779 |
1780 | enquirer@2.4.1:
1781 | dependencies:
1782 | ansi-colors: 4.1.3
1783 | strip-ansi: 6.0.1
1784 |
1785 | es-module-lexer@1.5.4: {}
1786 |
1787 | esbuild@0.24.0:
1788 | optionalDependencies:
1789 | '@esbuild/aix-ppc64': 0.24.0
1790 | '@esbuild/android-arm': 0.24.0
1791 | '@esbuild/android-arm64': 0.24.0
1792 | '@esbuild/android-x64': 0.24.0
1793 | '@esbuild/darwin-arm64': 0.24.0
1794 | '@esbuild/darwin-x64': 0.24.0
1795 | '@esbuild/freebsd-arm64': 0.24.0
1796 | '@esbuild/freebsd-x64': 0.24.0
1797 | '@esbuild/linux-arm': 0.24.0
1798 | '@esbuild/linux-arm64': 0.24.0
1799 | '@esbuild/linux-ia32': 0.24.0
1800 | '@esbuild/linux-loong64': 0.24.0
1801 | '@esbuild/linux-mips64el': 0.24.0
1802 | '@esbuild/linux-ppc64': 0.24.0
1803 | '@esbuild/linux-riscv64': 0.24.0
1804 | '@esbuild/linux-s390x': 0.24.0
1805 | '@esbuild/linux-x64': 0.24.0
1806 | '@esbuild/netbsd-x64': 0.24.0
1807 | '@esbuild/openbsd-arm64': 0.24.0
1808 | '@esbuild/openbsd-x64': 0.24.0
1809 | '@esbuild/sunos-x64': 0.24.0
1810 | '@esbuild/win32-arm64': 0.24.0
1811 | '@esbuild/win32-ia32': 0.24.0
1812 | '@esbuild/win32-x64': 0.24.0
1813 |
1814 | esprima@4.0.1: {}
1815 |
1816 | estree-walker@3.0.3:
1817 | dependencies:
1818 | '@types/estree': 1.0.6
1819 |
1820 | expect-type@1.1.0: {}
1821 |
1822 | extendable-error@0.1.7: {}
1823 |
1824 | external-editor@3.1.0:
1825 | dependencies:
1826 | chardet: 0.7.0
1827 | iconv-lite: 0.4.24
1828 | tmp: 0.0.33
1829 |
1830 | fast-glob@3.3.2:
1831 | dependencies:
1832 | '@nodelib/fs.stat': 2.0.5
1833 | '@nodelib/fs.walk': 1.2.8
1834 | glob-parent: 5.1.2
1835 | merge2: 1.4.1
1836 | micromatch: 4.0.8
1837 |
1838 | fastq@1.17.1:
1839 | dependencies:
1840 | reusify: 1.0.4
1841 |
1842 | fill-range@7.1.1:
1843 | dependencies:
1844 | to-regex-range: 5.0.1
1845 |
1846 | find-up@4.1.0:
1847 | dependencies:
1848 | locate-path: 5.0.0
1849 | path-exists: 4.0.0
1850 |
1851 | foreground-child@3.3.0:
1852 | dependencies:
1853 | cross-spawn: 7.0.6
1854 | signal-exit: 4.1.0
1855 |
1856 | fs-extra@7.0.1:
1857 | dependencies:
1858 | graceful-fs: 4.2.11
1859 | jsonfile: 4.0.0
1860 | universalify: 0.1.2
1861 |
1862 | fs-extra@8.1.0:
1863 | dependencies:
1864 | graceful-fs: 4.2.11
1865 | jsonfile: 4.0.0
1866 | universalify: 0.1.2
1867 |
1868 | fsevents@2.3.3:
1869 | optional: true
1870 |
1871 | glob-parent@5.1.2:
1872 | dependencies:
1873 | is-glob: 4.0.3
1874 |
1875 | glob@11.0.0:
1876 | dependencies:
1877 | foreground-child: 3.3.0
1878 | jackspeak: 4.0.2
1879 | minimatch: 10.0.1
1880 | minipass: 7.1.2
1881 | package-json-from-dist: 1.0.1
1882 | path-scurry: 2.0.0
1883 |
1884 | globby@11.1.0:
1885 | dependencies:
1886 | array-union: 2.1.0
1887 | dir-glob: 3.0.1
1888 | fast-glob: 3.3.2
1889 | ignore: 5.3.2
1890 | merge2: 1.4.1
1891 | slash: 3.0.0
1892 |
1893 | graceful-fs@4.2.11: {}
1894 |
1895 | has-flag@4.0.0: {}
1896 |
1897 | human-id@1.0.2: {}
1898 |
1899 | iconv-lite@0.4.24:
1900 | dependencies:
1901 | safer-buffer: 2.1.2
1902 |
1903 | ignore@5.3.2: {}
1904 |
1905 | ini@4.1.3: {}
1906 |
1907 | is-class-hotfix@0.0.6: {}
1908 |
1909 | is-docker@2.2.1: {}
1910 |
1911 | is-extglob@2.1.1: {}
1912 |
1913 | is-fullwidth-code-point@3.0.0: {}
1914 |
1915 | is-glob@4.0.3:
1916 | dependencies:
1917 | is-extglob: 2.1.1
1918 |
1919 | is-number@7.0.0: {}
1920 |
1921 | is-subdir@1.2.0:
1922 | dependencies:
1923 | better-path-resolve: 1.0.0
1924 |
1925 | is-type-of@1.4.0:
1926 | dependencies:
1927 | core-util-is: 1.0.3
1928 | is-class-hotfix: 0.0.6
1929 | isstream: 0.1.2
1930 |
1931 | is-windows@1.0.2: {}
1932 |
1933 | is-wsl@2.2.0:
1934 | dependencies:
1935 | is-docker: 2.2.1
1936 |
1937 | isexe@2.0.0: {}
1938 |
1939 | isstream@0.1.2: {}
1940 |
1941 | jackspeak@4.0.2:
1942 | dependencies:
1943 | '@isaacs/cliui': 8.0.2
1944 |
1945 | js-yaml@3.14.1:
1946 | dependencies:
1947 | argparse: 1.0.10
1948 | esprima: 4.0.1
1949 |
1950 | jsonfile@4.0.0:
1951 | optionalDependencies:
1952 | graceful-fs: 4.2.11
1953 |
1954 | locate-path@5.0.0:
1955 | dependencies:
1956 | p-locate: 4.1.0
1957 |
1958 | lodash.startcase@4.4.0: {}
1959 |
1960 | loupe@3.1.2: {}
1961 |
1962 | lru-cache@11.0.2: {}
1963 |
1964 | magic-string@0.30.14:
1965 | dependencies:
1966 | '@jridgewell/sourcemap-codec': 1.5.0
1967 |
1968 | merge2@1.4.1: {}
1969 |
1970 | micromatch@4.0.8:
1971 | dependencies:
1972 | braces: 3.0.3
1973 | picomatch: 2.3.1
1974 |
1975 | minimatch@10.0.1:
1976 | dependencies:
1977 | brace-expansion: 2.0.1
1978 |
1979 | minipass@7.1.2: {}
1980 |
1981 | mock-fs@5.4.1: {}
1982 |
1983 | mri@1.2.0: {}
1984 |
1985 | ms@2.1.3: {}
1986 |
1987 | mute-stream@2.0.0: {}
1988 |
1989 | nanoid@3.3.8: {}
1990 |
1991 | nice-try@1.0.5: {}
1992 |
1993 | open@8.4.2:
1994 | dependencies:
1995 | define-lazy-prop: 2.0.0
1996 | is-docker: 2.2.1
1997 | is-wsl: 2.2.0
1998 |
1999 | os-tmpdir@1.0.2: {}
2000 |
2001 | outdent@0.5.0: {}
2002 |
2003 | p-filter@2.1.0:
2004 | dependencies:
2005 | p-map: 2.1.0
2006 |
2007 | p-limit@2.3.0:
2008 | dependencies:
2009 | p-try: 2.2.0
2010 |
2011 | p-locate@4.1.0:
2012 | dependencies:
2013 | p-limit: 2.3.0
2014 |
2015 | p-map@2.1.0: {}
2016 |
2017 | p-try@2.2.0: {}
2018 |
2019 | package-json-from-dist@1.0.1: {}
2020 |
2021 | package-manager-detector@0.2.6: {}
2022 |
2023 | path-exists@4.0.0: {}
2024 |
2025 | path-key@2.0.1: {}
2026 |
2027 | path-key@3.1.1: {}
2028 |
2029 | path-scurry@2.0.0:
2030 | dependencies:
2031 | lru-cache: 11.0.2
2032 | minipass: 7.1.2
2033 |
2034 | path-type@4.0.0: {}
2035 |
2036 | pathe@1.1.2: {}
2037 |
2038 | pathval@2.0.0: {}
2039 |
2040 | picocolors@1.1.1: {}
2041 |
2042 | picomatch@2.3.1: {}
2043 |
2044 | pify@4.0.1: {}
2045 |
2046 | postcss@8.4.49:
2047 | dependencies:
2048 | nanoid: 3.3.8
2049 | picocolors: 1.1.1
2050 | source-map-js: 1.2.1
2051 |
2052 | prettier@2.8.8: {}
2053 |
2054 | queue-microtask@1.2.3: {}
2055 |
2056 | read-yaml-file@1.1.0:
2057 | dependencies:
2058 | graceful-fs: 4.2.11
2059 | js-yaml: 3.14.1
2060 | pify: 4.0.1
2061 | strip-bom: 3.0.0
2062 |
2063 | regenerator-runtime@0.14.1: {}
2064 |
2065 | resolve-from@5.0.0: {}
2066 |
2067 | reusify@1.0.4: {}
2068 |
2069 | rimraf@6.0.1:
2070 | dependencies:
2071 | glob: 11.0.0
2072 | package-json-from-dist: 1.0.1
2073 |
2074 | rollup@4.27.4:
2075 | dependencies:
2076 | '@types/estree': 1.0.6
2077 | optionalDependencies:
2078 | '@rollup/rollup-android-arm-eabi': 4.27.4
2079 | '@rollup/rollup-android-arm64': 4.27.4
2080 | '@rollup/rollup-darwin-arm64': 4.27.4
2081 | '@rollup/rollup-darwin-x64': 4.27.4
2082 | '@rollup/rollup-freebsd-arm64': 4.27.4
2083 | '@rollup/rollup-freebsd-x64': 4.27.4
2084 | '@rollup/rollup-linux-arm-gnueabihf': 4.27.4
2085 | '@rollup/rollup-linux-arm-musleabihf': 4.27.4
2086 | '@rollup/rollup-linux-arm64-gnu': 4.27.4
2087 | '@rollup/rollup-linux-arm64-musl': 4.27.4
2088 | '@rollup/rollup-linux-powerpc64le-gnu': 4.27.4
2089 | '@rollup/rollup-linux-riscv64-gnu': 4.27.4
2090 | '@rollup/rollup-linux-s390x-gnu': 4.27.4
2091 | '@rollup/rollup-linux-x64-gnu': 4.27.4
2092 | '@rollup/rollup-linux-x64-musl': 4.27.4
2093 | '@rollup/rollup-win32-arm64-msvc': 4.27.4
2094 | '@rollup/rollup-win32-ia32-msvc': 4.27.4
2095 | '@rollup/rollup-win32-x64-msvc': 4.27.4
2096 | fsevents: 2.3.3
2097 |
2098 | run-parallel@1.2.0:
2099 | dependencies:
2100 | queue-microtask: 1.2.3
2101 |
2102 | safer-buffer@2.1.2: {}
2103 |
2104 | semver@5.7.2: {}
2105 |
2106 | semver@7.6.3: {}
2107 |
2108 | shebang-command@1.2.0:
2109 | dependencies:
2110 | shebang-regex: 1.0.0
2111 |
2112 | shebang-command@2.0.0:
2113 | dependencies:
2114 | shebang-regex: 3.0.0
2115 |
2116 | shebang-regex@1.0.0: {}
2117 |
2118 | shebang-regex@3.0.0: {}
2119 |
2120 | siginfo@2.0.0: {}
2121 |
2122 | signal-exit@4.1.0: {}
2123 |
2124 | slash@3.0.0: {}
2125 |
2126 | source-map-js@1.2.1: {}
2127 |
2128 | spawndamnit@3.0.1:
2129 | dependencies:
2130 | cross-spawn: 7.0.6
2131 | signal-exit: 4.1.0
2132 |
2133 | sprintf-js@1.0.3: {}
2134 |
2135 | stackback@0.0.2: {}
2136 |
2137 | std-env@3.8.0: {}
2138 |
2139 | string-width@4.2.3:
2140 | dependencies:
2141 | emoji-regex: 8.0.0
2142 | is-fullwidth-code-point: 3.0.0
2143 | strip-ansi: 6.0.1
2144 |
2145 | string-width@5.1.2:
2146 | dependencies:
2147 | eastasianwidth: 0.2.0
2148 | emoji-regex: 9.2.2
2149 | strip-ansi: 7.1.0
2150 |
2151 | strip-ansi@6.0.1:
2152 | dependencies:
2153 | ansi-regex: 5.0.1
2154 |
2155 | strip-ansi@7.1.0:
2156 | dependencies:
2157 | ansi-regex: 6.1.0
2158 |
2159 | strip-bom@3.0.0: {}
2160 |
2161 | supports-color@7.2.0:
2162 | dependencies:
2163 | has-flag: 4.0.0
2164 |
2165 | term-size@2.2.1: {}
2166 |
2167 | tinybench@2.9.0: {}
2168 |
2169 | tinyexec@0.3.1: {}
2170 |
2171 | tinypool@1.0.2: {}
2172 |
2173 | tinyrainbow@1.2.0: {}
2174 |
2175 | tinyspy@3.0.2: {}
2176 |
2177 | tmp@0.0.33:
2178 | dependencies:
2179 | os-tmpdir: 1.0.2
2180 |
2181 | to-regex-range@5.0.1:
2182 | dependencies:
2183 | is-number: 7.0.0
2184 |
2185 | type-fest@0.21.3: {}
2186 |
2187 | typescript@5.7.2: {}
2188 |
2189 | undici-types@5.26.5: {}
2190 |
2191 | undici@5.28.2:
2192 | dependencies:
2193 | '@fastify/busboy': 2.1.1
2194 |
2195 | universalify@0.1.2: {}
2196 |
2197 | vite-node@2.1.6(@types/node@18.19.67):
2198 | dependencies:
2199 | cac: 6.7.14
2200 | debug: 4.3.7
2201 | es-module-lexer: 1.5.4
2202 | pathe: 1.1.2
2203 | vite: 6.0.1(@types/node@18.19.67)
2204 | transitivePeerDependencies:
2205 | - '@types/node'
2206 | - jiti
2207 | - less
2208 | - lightningcss
2209 | - sass
2210 | - sass-embedded
2211 | - stylus
2212 | - sugarss
2213 | - supports-color
2214 | - terser
2215 | - tsx
2216 | - yaml
2217 |
2218 | vite@6.0.1(@types/node@18.19.67):
2219 | dependencies:
2220 | esbuild: 0.24.0
2221 | postcss: 8.4.49
2222 | rollup: 4.27.4
2223 | optionalDependencies:
2224 | '@types/node': 18.19.67
2225 | fsevents: 2.3.3
2226 |
2227 | vitest@2.1.6(@types/node@18.19.67):
2228 | dependencies:
2229 | '@vitest/expect': 2.1.6
2230 | '@vitest/mocker': 2.1.6(vite@6.0.1(@types/node@18.19.67))
2231 | '@vitest/pretty-format': 2.1.6
2232 | '@vitest/runner': 2.1.6
2233 | '@vitest/snapshot': 2.1.6
2234 | '@vitest/spy': 2.1.6
2235 | '@vitest/utils': 2.1.6
2236 | chai: 5.1.2
2237 | debug: 4.3.7
2238 | expect-type: 1.1.0
2239 | magic-string: 0.30.14
2240 | pathe: 1.1.2
2241 | std-env: 3.8.0
2242 | tinybench: 2.9.0
2243 | tinyexec: 0.3.1
2244 | tinypool: 1.0.2
2245 | tinyrainbow: 1.2.0
2246 | vite: 6.0.1(@types/node@18.19.67)
2247 | vite-node: 2.1.6(@types/node@18.19.67)
2248 | why-is-node-running: 2.3.0
2249 | optionalDependencies:
2250 | '@types/node': 18.19.67
2251 | transitivePeerDependencies:
2252 | - jiti
2253 | - less
2254 | - lightningcss
2255 | - msw
2256 | - sass
2257 | - sass-embedded
2258 | - stylus
2259 | - sugarss
2260 | - supports-color
2261 | - terser
2262 | - tsx
2263 | - yaml
2264 |
2265 | which@1.3.1:
2266 | dependencies:
2267 | isexe: 2.0.0
2268 |
2269 | which@2.0.2:
2270 | dependencies:
2271 | isexe: 2.0.0
2272 |
2273 | why-is-node-running@2.3.0:
2274 | dependencies:
2275 | siginfo: 2.0.0
2276 | stackback: 0.0.2
2277 |
2278 | wrap-ansi@6.2.0:
2279 | dependencies:
2280 | ansi-styles: 4.3.0
2281 | string-width: 4.2.3
2282 | strip-ansi: 6.0.1
2283 |
2284 | wrap-ansi@7.0.0:
2285 | dependencies:
2286 | ansi-styles: 4.3.0
2287 | string-width: 4.2.3
2288 | strip-ansi: 6.0.1
2289 |
2290 | wrap-ansi@8.1.0:
2291 | dependencies:
2292 | ansi-styles: 6.2.1
2293 | string-width: 5.1.2
2294 | strip-ansi: 7.1.0
2295 |
2296 | yoctocolors-cjs@2.1.2: {}
2297 |
--------------------------------------------------------------------------------
/src/actions.ts:
--------------------------------------------------------------------------------
1 | import checkbox from '@inquirer/checkbox';
2 | import select from '@inquirer/select';
3 | import chalk from 'chalk';
4 | import open from 'open';
5 | import { fetch } from 'undici';
6 | import {
7 | ALWAYS_AUTH,
8 | AUTH,
9 | EMAIL,
10 | HOME,
11 | NPMRC,
12 | NRMRC,
13 | REGISTRY,
14 | REPOSITORY,
15 | } from './constants';
16 | import {
17 | exit,
18 | geneDashLine,
19 | getCurrentRegistry,
20 | getRegistries,
21 | isInternalRegistry,
22 | isLowerCaseEqual,
23 | isRegistryNotFound,
24 | printMessages,
25 | printSuccess,
26 | readFile,
27 | writeFile,
28 | } from './helpers';
29 |
30 | export async function onList() {
31 | const currentRegistry = await getCurrentRegistry();
32 | const registries = await getRegistries();
33 |
34 | const keys = Object.keys(registries);
35 | const length = Math.max(...keys.map((key) => key.length)) + 3;
36 |
37 | const messages = keys.map((key) => {
38 | const registry = registries[key];
39 | const prefix = isLowerCaseEqual(registry[REGISTRY], currentRegistry)
40 | ? chalk.green.bold('* ')
41 | : ' ';
42 | return prefix + key + geneDashLine(key, length) + registry[REGISTRY];
43 | });
44 |
45 | printMessages(messages);
46 | }
47 |
48 | export async function onCurrent({ showUrl }: { showUrl: boolean }) {
49 | const currentRegistry = await getCurrentRegistry();
50 | const registries = await getRegistries();
51 |
52 | const matchedRegistry = Object.entries(registries).find(([_name, registry]) =>
53 | isLowerCaseEqual(registry[REGISTRY], currentRegistry),
54 | );
55 |
56 | // not find equal registry
57 | if (!matchedRegistry) {
58 | printMessages([
59 | `Your current registry(${currentRegistry}) is not included in the nrm registries.`,
60 | `Use the ${chalk.green(
61 | 'nrm add [home]',
62 | )} command to add your registry.`,
63 | ]);
64 | return;
65 | }
66 |
67 | const [name, registry] = matchedRegistry;
68 | printMessages([
69 | `You are using ${chalk.green(
70 | showUrl ? registry[REGISTRY] : name,
71 | )} registry.`,
72 | ]);
73 | }
74 |
75 | export async function onUse(name: string) {
76 | const registries = await getRegistries();
77 | let alias = name;
78 |
79 | // if alias is undefined, select the registry alias from list
80 | if (alias === undefined) {
81 | alias = await select({
82 | message: 'Please select the registry you want to use',
83 | choices: Object.keys(registries),
84 | pageSize: 10,
85 | });
86 | }
87 |
88 | if (await isRegistryNotFound(alias)) {
89 | return;
90 | }
91 |
92 | const registry = registries[alias];
93 | const npmrc = await readFile(NPMRC);
94 | await writeFile(NPMRC, Object.assign(npmrc, registry));
95 |
96 | printSuccess(`The registry has been changed to '${alias}'.`);
97 | }
98 |
99 | export async function onDelete(name: string | undefined) {
100 | const customRegistries = await readFile(NRMRC);
101 |
102 | const deleteKeys: string[] = [];
103 | if (name) {
104 | deleteKeys.push(name);
105 | }
106 |
107 | const choices = Object.keys(customRegistries);
108 | if (name === undefined && !choices.length) {
109 | printMessages(['No any custom registries can be deleted.']);
110 | return;
111 | }
112 |
113 | if (name === undefined) {
114 | const selectedKeys = await checkbox({
115 | message: 'Please select the registries you want to delete',
116 | choices,
117 | });
118 | deleteKeys.push(...selectedKeys);
119 | }
120 |
121 | for (const key of deleteKeys) {
122 | if (
123 | (await isRegistryNotFound(key)) ||
124 | (await isInternalRegistry(key, 'delete'))
125 | ) {
126 | continue;
127 | }
128 |
129 | const registry = customRegistries[key];
130 | delete customRegistries[key];
131 | await writeFile(NRMRC, customRegistries);
132 | printSuccess(`The registry '${key}' has been deleted successfully.`);
133 |
134 | const currentRegistry = await getCurrentRegistry();
135 | if (currentRegistry === registry[REGISTRY]) {
136 | await onUse('npm');
137 | }
138 | }
139 | }
140 |
141 | export async function onAdd(name: string, url: string, home?: string) {
142 | const registries = await getRegistries();
143 | const registryNames = Object.keys(registries);
144 | const registryUrls = registryNames.map((name) => registries[name][REGISTRY]);
145 | if (
146 | registryNames.includes(name) ||
147 | registryUrls.some((eachUrl) => isLowerCaseEqual(eachUrl, url))
148 | ) {
149 | return exit(
150 | 'The registry name or url is already included in the nrm registries. Please make sure that the name and url are unique.',
151 | );
152 | }
153 |
154 | const newRegistry: Record = {};
155 | newRegistry[REGISTRY] = /\/$/.test(url) ? url : `${url}/`;
156 | if (home) {
157 | newRegistry[HOME] = home;
158 | }
159 | const customRegistries = await readFile(NRMRC);
160 | const newCustomRegistries = Object.assign(customRegistries, {
161 | [name]: newRegistry,
162 | });
163 | await writeFile(NRMRC, newCustomRegistries);
164 | printSuccess(
165 | `Add registry ${name} success, run ${chalk.green(
166 | `nrm use ${name}`,
167 | )} command to use ${name} registry.`,
168 | );
169 | }
170 |
171 | export async function onLogin(
172 | name: string,
173 | base64: string,
174 | {
175 | alwaysAuth,
176 | username,
177 | password,
178 | email,
179 | }: { alwaysAuth: boolean; username: string; password: string; email: string },
180 | ) {
181 | if (
182 | (await isRegistryNotFound(name)) ||
183 | (await isInternalRegistry(name, 'set authorization information of'))
184 | ) {
185 | return;
186 | }
187 |
188 | const customRegistries = await readFile(NRMRC);
189 | const registry = customRegistries[name];
190 | if (base64) {
191 | registry[AUTH] = base64;
192 | } else if (username && password) {
193 | registry[AUTH] = Buffer.from(`${username}:${password}`).toString('base64');
194 | } else {
195 | return exit(
196 | 'Authorization information in base64 format or username & password is required',
197 | );
198 | }
199 |
200 | if (alwaysAuth) {
201 | registry[ALWAYS_AUTH] = true;
202 | }
203 |
204 | if (email) {
205 | registry[EMAIL] = email;
206 | }
207 |
208 | Object.assign(customRegistries, { [name]: registry });
209 | await writeFile(NRMRC, customRegistries);
210 | printSuccess(
211 | `Set the authorization information of the registry '${name}' success.`,
212 | );
213 |
214 | const currentRegistry = await getCurrentRegistry();
215 | if (currentRegistry === registry[REGISTRY]) {
216 | const npmrc = await readFile(NPMRC);
217 | await writeFile(
218 | NPMRC,
219 | Object.assign(npmrc, {
220 | [AUTH]: registry[AUTH],
221 | [ALWAYS_AUTH]: registry[ALWAYS_AUTH],
222 | [EMAIL]: registry[EMAIL],
223 | }),
224 | );
225 | }
226 | }
227 |
228 | export async function onSetRepository(name: string, repo: string) {
229 | if (
230 | (await isRegistryNotFound(name)) ||
231 | (await isInternalRegistry(name, 'set repository of'))
232 | ) {
233 | return;
234 | }
235 |
236 | const customRegistries = await readFile(NRMRC);
237 | const registry = customRegistries[name];
238 | registry[REPOSITORY] = repo;
239 | await writeFile(NRMRC, customRegistries);
240 | printSuccess(`Set the ${REPOSITORY} of registry '${name}' successfully.`);
241 |
242 | const currentRegistry = await getCurrentRegistry();
243 | if (currentRegistry && registry[REGISTRY] === currentRegistry) {
244 | const npmrc = await readFile(NPMRC);
245 | Object.assign(npmrc, { [REPOSITORY]: repo });
246 | await writeFile(NPMRC, npmrc);
247 | printSuccess('Set repository attribute of npmrc successfully');
248 | }
249 | }
250 |
251 | export async function onSetScope(scopeName: string, url: string) {
252 | const scopeRegistryKey = `${scopeName}:${REGISTRY}`;
253 | const npmrc = await readFile(NPMRC);
254 | Object.assign(npmrc, { [scopeRegistryKey]: url });
255 | await writeFile(NPMRC, npmrc);
256 | printSuccess(`Set scope '${scopeRegistryKey}=${url}' success.`);
257 | }
258 |
259 | export async function onDeleteScope(scopeName: string) {
260 | const scopeRegistryKey = `${scopeName}:${REGISTRY}`;
261 | const npmrc = await readFile(NPMRC);
262 | if (npmrc[scopeRegistryKey]) {
263 | delete npmrc[scopeRegistryKey];
264 | await writeFile(NPMRC, npmrc);
265 | printSuccess(`Delete scope '${scopeRegistryKey}' success.`);
266 | }
267 | }
268 |
269 | export async function onSetAttribute(
270 | name: string,
271 | { attr, value }: { attr: string; value: string },
272 | ) {
273 | if (
274 | (await isRegistryNotFound(name)) ||
275 | (await isInternalRegistry(name, 'set attribute of'))
276 | ) {
277 | return;
278 | }
279 |
280 | if (REPOSITORY === attr) {
281 | return exit(
282 | `Use the ${chalk.green(
283 | 'nrm set-hosted-repo ',
284 | )} command to set repository.`,
285 | );
286 | }
287 | const customRegistries = await readFile(NRMRC);
288 | const registry = customRegistries[name];
289 | Object.assign(registry, { [attr]: value });
290 | await writeFile(NRMRC, customRegistries);
291 | printSuccess(
292 | `Set attribute '${attr}=${value}' of the registry '${name}' successfully.`,
293 | );
294 |
295 | const currentRegistry = await getCurrentRegistry();
296 | if (currentRegistry === registry[REGISTRY]) {
297 | const npmrc = await readFile(NPMRC);
298 | await writeFile(NPMRC, Object.assign(npmrc, { [attr]: value }));
299 | }
300 | }
301 |
302 | export async function onRename(name: string, newName: string) {
303 | if (
304 | (await isRegistryNotFound(name)) ||
305 | (await isInternalRegistry(name, 'rename'))
306 | ) {
307 | return;
308 | }
309 |
310 | if (name === newName) {
311 | return exit('The names cannot be the same.');
312 | }
313 |
314 | if (!(await isRegistryNotFound(newName, false))) {
315 | return exit(`The new registry name '${newName}' is already exist.`);
316 | }
317 | const customRegistries = await readFile(NRMRC);
318 | customRegistries[newName] = JSON.parse(
319 | JSON.stringify(customRegistries[name]),
320 | );
321 | delete customRegistries[name];
322 | await writeFile(NRMRC, customRegistries);
323 | printSuccess(`The registry '${name}' has been renamed to '${newName}'.`);
324 | }
325 |
326 | export async function onHome(name: string, browser?: string) {
327 | if (await isRegistryNotFound(name)) {
328 | return;
329 | }
330 |
331 | const registries = await getRegistries();
332 | if (!registries[name][HOME]) {
333 | return exit(`The homepage of registry '${name}' is not found.`);
334 | }
335 | open(
336 | registries[name][HOME],
337 | browser ? { app: { name: browser } } : undefined,
338 | );
339 | }
340 |
341 | export async function onTest(target?: string) {
342 | const registries = await getRegistries();
343 | const timeout = 5000;
344 |
345 | if (target && (await isRegistryNotFound(target))) {
346 | exit();
347 | }
348 |
349 | const sources = target ? { [target]: registries[target] } : registries;
350 |
351 | const results = await Promise.all(
352 | Object.keys(sources).map(async (name) => {
353 | const { registry } = sources[name];
354 | const start = Date.now();
355 | let status = false;
356 | let isTimeout = false;
357 | try {
358 | const response = await fetch(`${registry}nrm`, {
359 | signal: AbortSignal.timeout(timeout),
360 | });
361 | status = response.ok;
362 | } catch (error: any) {
363 | isTimeout = error.name === 'TimeoutError';
364 | }
365 | return {
366 | name,
367 | registry,
368 | success: status,
369 | time: Date.now() - start,
370 | isTimeout,
371 | };
372 | }),
373 | );
374 |
375 | const [fastest] = results
376 | .filter((each) => each.success)
377 | .map((each) => each.time)
378 | .sort((a, b) => a - b);
379 |
380 | const messages: string[] = [];
381 | const currentRegistry = await getCurrentRegistry();
382 | const errorMsg = chalk.red(
383 | ' (Fetch error, if this is your private registry, please ignore)',
384 | );
385 | const timeoutMsg = chalk.yellow(` (Fetch timeout over ${timeout} ms)`);
386 | const length = Math.max(...Object.keys(sources).map((key) => key.length)) + 3;
387 |
388 | for (const { registry, success, time, name, isTimeout } of results) {
389 | const isFastest = time === fastest;
390 | const prefix = registry === currentRegistry ? chalk.green('* ') : ' ';
391 | let suffix =
392 | isFastest && !target
393 | ? chalk.bgGreenBright(`${time} ms`)
394 | : isTimeout
395 | ? 'timeout'
396 | : `${time} ms`;
397 | if (!success) {
398 | suffix += isTimeout ? timeoutMsg : errorMsg;
399 | }
400 | messages.push(prefix + name + geneDashLine(name, length) + suffix);
401 | }
402 |
403 | printMessages(messages);
404 |
405 | return messages;
406 | }
407 |
--------------------------------------------------------------------------------
/src/constants.ts:
--------------------------------------------------------------------------------
1 | import os from 'node:os';
2 | import path from 'node:path';
3 | import type { RegistryConfig } from './types.js';
4 |
5 | export const REGISTRIES: RegistryConfig = {
6 | npm: {
7 | home: 'https://www.npmjs.org',
8 | registry: 'https://registry.npmjs.org/',
9 | },
10 | yarn: {
11 | home: 'https://yarnpkg.com',
12 | registry: 'https://registry.yarnpkg.com/',
13 | },
14 | tencent: {
15 | home: 'https://mirrors.tencent.com/npm/',
16 | registry: 'https://mirrors.tencent.com/npm/',
17 | },
18 | cnpm: {
19 | home: 'https://cnpmjs.org',
20 | registry: 'https://r.cnpmjs.org/',
21 | },
22 | taobao: {
23 | home: 'https://npmmirror.com',
24 | registry: 'https://registry.npmmirror.com/',
25 | },
26 | npmMirror: {
27 | home: 'https://skimdb.npmjs.com/',
28 | registry: 'https://skimdb.npmjs.com/registry/',
29 | },
30 | huawei: {
31 | home: 'https://www.huaweicloud.com/special/npm-jingxiang.html',
32 | registry: 'https://repo.huaweicloud.com/repository/npm/',
33 | },
34 | };
35 |
36 | export const HOME = 'home';
37 | export const AUTH = '_auth';
38 | export const EMAIL = 'email';
39 | export const REGISTRY = 'registry';
40 | export const REPOSITORY = 'repository';
41 | export const ALWAYS_AUTH = 'always-auth';
42 | export const REGISTRY_ATTRS = [REGISTRY, HOME, AUTH, ALWAYS_AUTH];
43 | export const NRMRC = path.join(os.homedir(), '.nrmrc');
44 | export const NPMRC = path.join(os.homedir(), '.npmrc');
45 |
--------------------------------------------------------------------------------
/src/helpers.ts:
--------------------------------------------------------------------------------
1 | import fs from 'node:fs';
2 | import process from 'node:process';
3 | import chalk from 'chalk';
4 | import ini from 'ini';
5 | import { NPMRC, NRMRC, REGISTRIES, REGISTRY } from './constants.js';
6 | import type { Registry } from './types.js';
7 |
8 | export async function readFile(
9 | file: fs.PathLike,
10 | ): Promise> {
11 | return new Promise((resolve) => {
12 | if (!fs.existsSync(file)) {
13 | resolve({});
14 | } else {
15 | try {
16 | const content = ini.parse(fs.readFileSync(file, 'utf-8'));
17 | resolve(content);
18 | } catch (error: any) {
19 | exit(error);
20 | }
21 | }
22 | });
23 | }
24 |
25 | export async function writeFile(
26 | path: fs.PathOrFileDescriptor,
27 | content: Record,
28 | ) {
29 | return new Promise((resolve) => {
30 | try {
31 | fs.writeFileSync(path, ini.stringify(content));
32 | resolve();
33 | } catch (error: any) {
34 | exit(error);
35 | }
36 | });
37 | }
38 |
39 | export function padding(message = '', before = 1, after = 1) {
40 | return (
41 | new Array(before).fill(' ').join('') +
42 | message +
43 | new Array(after).fill(' ').join('')
44 | );
45 | }
46 |
47 | export function printSuccess(message: string) {
48 | console.log(`${chalk.bgGreenBright(padding('SUCCESS'))} ${message}`);
49 | }
50 |
51 | export function printError(error: string) {
52 | console.error(`${chalk.bgRed(padding('ERROR'))} ${chalk.red(error)}`);
53 | }
54 |
55 | export function printMessages(messages: string[]) {
56 | console.log(messages.join('\n'));
57 | }
58 |
59 | export function geneDashLine(message: string, length: number) {
60 | const finalMessage = new Array(Math.max(2, length - message.length + 2)).join(
61 | '-',
62 | );
63 | return padding(chalk.dim(finalMessage));
64 | }
65 |
66 | export function isLowerCaseEqual(str1: string, str2: string) {
67 | if (str1 && str2) {
68 | return str1.toLowerCase() === str2.toLowerCase();
69 | }
70 |
71 | return !str1 && !str2;
72 | }
73 |
74 | export async function getCurrentRegistry(): Promise {
75 | const npmrc = await readFile(NPMRC);
76 | return npmrc[REGISTRY];
77 | }
78 |
79 | export async function getRegistries(): Promise> {
80 | const customRegistries = await readFile(NRMRC);
81 | return Object.assign({}, REGISTRIES, customRegistries);
82 | }
83 |
84 | export async function isRegistryNotFound(name: string, printErr = true) {
85 | const registries = await getRegistries();
86 | if (!Object.keys(registries).includes(name)) {
87 | printErr && printError(`The registry '${name}' is not found.`);
88 | return true;
89 | }
90 | return false;
91 | }
92 |
93 | export async function isInternalRegistry(name: string, handle?: string) {
94 | if (Object.keys(REGISTRIES).includes(name)) {
95 | handle && printError(`You cannot ${handle} the nrm internal registry.`);
96 | return true;
97 | }
98 |
99 | return false;
100 | }
101 |
102 | export function exit(error?: string) {
103 | error && printError(error);
104 | process.exit(1);
105 | }
106 |
107 | export function isUnicodeSupported() {
108 | if (process.platform !== 'win32') {
109 | return process.env.TERM !== 'linux';
110 | }
111 |
112 | return (
113 | Boolean(process.env.WT_SESSION) ||
114 | Boolean(process.env.TERMINUS_SUBLIME) ||
115 | process.env.ConEmuTask === '{cmd::Cmder}' ||
116 | process.env.TERM_PROGRAM === 'Terminus-Sublime' ||
117 | process.env.TERM_PROGRAM === 'vscode' ||
118 | process.env.TERM === 'xterm-256color' ||
119 | process.env.TERM === 'alacritty' ||
120 | process.env.TERMINAL_EMULATOR === 'JetBrains-JediTerm'
121 | );
122 | }
123 |
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env node
2 |
3 | import { Command } from 'commander';
4 | import packageJson from '../package.json';
5 | import {
6 | onAdd,
7 | onCurrent,
8 | onDelete,
9 | onDeleteScope,
10 | onHome,
11 | onList,
12 | onLogin,
13 | onRename,
14 | onSetAttribute,
15 | onSetRepository,
16 | onSetScope,
17 | onTest,
18 | onUse,
19 | } from './actions.js';
20 |
21 | const program = new Command();
22 |
23 | const { name, version, description } = packageJson;
24 | program.name(name).description(description).version(version);
25 |
26 | program.command('ls').description('List all the registries').action(onList);
27 |
28 | program
29 | .command('current')
30 | .option('-u, --show-url', 'Show the registry URL instead of the name')
31 | .description('Show current registry name or URL')
32 | .action(onCurrent);
33 |
34 | program
35 | .command('use [name]')
36 | .description('Change current registry')
37 | .action(onUse);
38 |
39 | program
40 | .command('add [home]')
41 | .description('Add custom registry')
42 | .action(onAdd);
43 |
44 | program
45 | .command('login [base64]')
46 | .option('-a, --always-auth', 'Set is always auth')
47 | .option('-u, --username ', 'Your user name for this registry')
48 | .option('-p, --password ', 'Your password for this registry')
49 | .option('-e, --email ', 'Your email for this registry')
50 | .description(
51 | 'Set authorize information for a custom registry with a base64 encoded string or username and password',
52 | )
53 | .action(onLogin);
54 |
55 | program
56 | .command('set-hosted-repo ')
57 | .description(
58 | 'Set hosted npm repository for a custom registry to publish package',
59 | )
60 | .action(onSetRepository);
61 |
62 | program
63 | .command('set-scope ')
64 | .description('Associating a scope with a registry')
65 | .action(onSetScope);
66 |
67 | program
68 | .command('del-scope ')
69 | .description('Remove a scope')
70 | .action(onDeleteScope);
71 |
72 | program
73 | .command('set ')
74 | .requiredOption('-a,--attr ', 'Set a custom registry attribute')
75 | .requiredOption('-v,--value ', 'Set a custom registry value')
76 | .description('Set a custom registry attribute')
77 | .action(onSetAttribute);
78 |
79 | program
80 | .command('rename ')
81 | .description('Change custom registry name')
82 | .action(onRename);
83 |
84 | program
85 | .command('del [name]')
86 | .description('Delete custom registry')
87 | .action(onDelete);
88 |
89 | program
90 | .command('home [browser]')
91 | .description('Open the homepage of registry with optional browser')
92 | .action(onHome);
93 |
94 | program
95 | .command('test [registry]')
96 | .description('Show response time for specific or all registries')
97 | .action(() => {
98 | onTest();
99 | }); // ignore return value to pass typescript check
100 |
101 | program.parse(process.argv);
102 |
103 | if (process.argv.length === 2) {
104 | program.outputHelp();
105 | }
106 |
--------------------------------------------------------------------------------
/src/types.ts:
--------------------------------------------------------------------------------
1 | export interface Registry {
2 | home: string;
3 | registry: string;
4 | }
5 |
6 | export type RegistryAlias =
7 | | 'npm'
8 | | 'yarn'
9 | | 'tencent'
10 | | 'cnpm'
11 | | 'taobao'
12 | | 'npmMirror'
13 | | 'huawei';
14 |
15 | export type RegistryConfig = Record;
16 |
--------------------------------------------------------------------------------
/tests/cli.test.ts:
--------------------------------------------------------------------------------
1 | import { spawn } from 'node:child_process';
2 | import chalk from 'chalk';
3 | import coffee from 'coffee';
4 | import open from 'open';
5 | import stripAnsi from 'strip-ansi';
6 | import {
7 | afterAll,
8 | afterEach,
9 | beforeAll,
10 | beforeEach,
11 | describe,
12 | expect,
13 | it,
14 | vi,
15 | } from 'vitest';
16 |
17 | import { unlink } from 'node:fs/promises';
18 | import { onHome, onTest } from '../src/actions';
19 | import { NPMRC, NRMRC, REGISTRIES } from '../src/constants';
20 | import { isUnicodeSupported, readFile, writeFile } from '../src/helpers';
21 |
22 |
23 | const isWin = process.platform === 'win32';
24 |
25 | const shouldUseMain = isUnicodeSupported();
26 |
27 | const pointer = shouldUseMain ? '❯' : '>';
28 | const radioOff = shouldUseMain ? '◯' : '( )';
29 | const radioOn = shouldUseMain ? '◉' : '(*)';
30 |
31 | vi.setConfig({
32 | testTimeout: 20000,
33 | });
34 | vi.mock('open', () => {
35 | return {
36 | default: vi.fn(() => console.log('browser opened')),
37 | };
38 | });
39 |
40 | vi.mock('undici', () => {
41 | return {
42 | fetch: vi.fn((url) => {
43 | return new Promise((resolve) => {
44 | setTimeout(
45 | () => resolve({ ok: !url.includes('error.com') }),
46 | (Math.random() + 1) * 1000,
47 | );
48 | });
49 | }),
50 | };
51 | });
52 |
53 | vi.stubGlobal('__NRM_VERSION__', null);
54 | vi.stubGlobal('__REGISTRY__', null);
55 | beforeAll(async () => {
56 | const { stdout } = await coffee.spawn('nrm', ['-V'], { shell: isWin }).end();
57 | global.__NRM_VERSION__ = stdout ? stdout : null;
58 | await coffee.spawn('npm', ['link'], { shell: isWin }).end();
59 | });
60 |
61 | afterAll(async () => {
62 | await coffee.spawn('npm', ['unlink', 'nrm', '-g'], { shell: isWin }).end();
63 |
64 | if (global.__NRM_VERSION__ !== null) {
65 | await coffee
66 | .spawn('npm', [`install -g nrm@${global.__NRM_VERSION__}`], {
67 | shell: isWin,
68 | })
69 | .end();
70 | }
71 | });
72 |
73 | it('nrm ls', async () => {
74 | await coffee
75 | .spawn('nrm', ['use', 'cnpm'], { shell: isWin })
76 | .expect('stdout', /The registry has been changed to 'cnpm'/g)
77 | .expect('code', 0)
78 | .end();
79 |
80 | const { stdout, code } = await coffee
81 | .spawn('nrm', ['ls'], { shell: isWin })
82 | .end();
83 |
84 | const match = `${chalk.green.bold('* ')}cnpm`;
85 |
86 | expect(stdout.includes(match)).toBe(true);
87 | expect(code).toBe(0);
88 | });
89 |
90 | it('nrm use ', async () => {
91 | await coffee
92 | .spawn('nrm', ['use', 'cnpm'], { shell: isWin })
93 | .expect('stdout', /The registry has been changed to 'cnpm'/g)
94 | .expect('code', 0)
95 | .end();
96 | });
97 |
98 | it('nrm use local', async () => {
99 | await coffee
100 | .spawn('nrm', ['use', 'cnpm', 'local'], { shell: isWin })
101 | .expect('stdout', /The registry has been changed to 'cnpm'/g)
102 | .expect('code', 0)
103 | .end();
104 |
105 | const npmrc = await readFile(NPMRC);
106 |
107 | expect(npmrc.registry).toBe(REGISTRIES.cnpm.registry);
108 |
109 | await coffee
110 | .spawn('nrm', ['current'], { shell: isWin })
111 | .expect('stdout', /cnpm/g)
112 | .expect('code', 0)
113 | .end();
114 | });
115 |
116 | it('nrm use local with user config', async () => {
117 | await writeFile(NPMRC, { abc: '123' });
118 |
119 | await coffee
120 | .spawn('nrm', ['use', 'cnpm', 'local'], { shell: isWin })
121 | .expect('stdout', /The registry has been changed to 'cnpm'/g)
122 | .expect('code', 0)
123 | .end();
124 |
125 | const npmrc = await readFile(NPMRC);
126 |
127 | expect(npmrc.registry).toBe(REGISTRIES.cnpm.registry);
128 | expect(npmrc.abc).toBe('123');
129 |
130 | await coffee
131 | .spawn('nrm', ['current'], { shell: isWin })
132 | .expect('stdout', /cnpm/g)
133 | .expect('code', 0)
134 | .end();
135 | });
136 |
137 | it('nrm use without argument', async () => {
138 | const { stdout } = spawn('nrm', ['use'], { shell: isWin });
139 |
140 | const message = await new Promise((resolve) => {
141 | stdout.on('data', (data) => {
142 | resolve(stripAnsi(data.toString()).trim());
143 | });
144 | });
145 |
146 | expect(
147 | message,
148 | ).toBe(`? Please select the registry you want to use (Use arrow keys)
149 | ${pointer} npm
150 | yarn
151 | tencent
152 | cnpm
153 | taobao
154 | npmMirror
155 | huawei`);
156 | });
157 |
158 | it('nrm current', async () => {
159 | await coffee
160 | .spawn('nrm', ['use', 'cnpm'], { shell: isWin })
161 | .expect('stdout', /The registry has been changed to 'cnpm'/g)
162 | .expect('code', 0)
163 | .end();
164 |
165 | await coffee
166 | .spawn('nrm', ['current'], { shell: isWin })
167 | .expect('stdout', /cnpm/g)
168 | .expect('code', 0)
169 | .end();
170 | });
171 |
172 | describe('nrm command which needs to add a custom registry', () => {
173 | const customName = 'customName';
174 | const url = 'https://registry.error.com/';
175 | let __REGISTRY__ = '';
176 | beforeEach(async () => {
177 | __REGISTRY__ = customName;
178 |
179 | await coffee
180 | .spawn('nrm', ['add', `${__REGISTRY__}`, `${url}`], { shell: isWin })
181 | .expect('stdout', /success/g)
182 | .expect('code', 0)
183 | .end();
184 | });
185 |
186 | afterEach(async () => {
187 | await coffee
188 | .spawn('nrm', ['del', `${__REGISTRY__}`], { shell: isWin })
189 | .expect('stdout', /has been deleted successfully/g)
190 | .expect('code', 0)
191 | .end();
192 | });
193 |
194 | it('nrm rename', async () => {
195 | const newName = 'newName';
196 | __REGISTRY__ = newName;
197 | const match = new RegExp(
198 | `The registry '${customName}' has been renamed to '${newName}'`,
199 | 'g',
200 | );
201 |
202 | await coffee
203 | .spawn('nrm', ['rename', `${customName}`, `${newName}`], { shell: isWin })
204 | .expect('stdout', match)
205 | .expect('code', 0)
206 | .end();
207 | });
208 |
209 | it('nrm set ', async () => {
210 | const attr = 'attr';
211 | const value = 'value';
212 |
213 | await coffee
214 | .spawn(
215 | 'nrm',
216 | ['set', `${__REGISTRY__}`, '-a', `${attr}`, '-v', `${value}`],
217 | { shell: isWin },
218 | )
219 | .expect('stdout', /successfully/g)
220 | .expect('code', 0)
221 | .end();
222 | });
223 |
224 | it('nrm test [registry]', async () => {
225 | const results = await onTest();
226 | expect(results.every((ele) => /\d+\sms/.test(ele))).toBe(true);
227 | expect(results.some((ele) => ele.includes('*'))).toBe(true);
228 | expect(results.some((ele) => ele.includes('please ignore'))).toBe(true);
229 | });
230 |
231 | it('nrm set-scope , del-scope ', async () => {
232 | const scopeName = 'nrm';
233 | const url = 'https://scope.example.org';
234 |
235 | await coffee
236 | .spawn('nrm', ['set-scope', `${scopeName}`, `${url}`], { shell: isWin })
237 | .expect('stdout', /success/g)
238 | .expect('code', 0)
239 | .end();
240 |
241 | await coffee
242 | .spawn('nrm', ['del-scope', `${scopeName}`], { shell: isWin })
243 | .expect('stdout', /success/g)
244 | .expect('code', 0)
245 | .end();
246 | });
247 |
248 | it('nrm set-hosted-repo ', async () => {
249 | const repo = 'repo';
250 | const match = new RegExp(
251 | `Set the repository of registry '${__REGISTRY__}' successfully`,
252 | 'g',
253 | );
254 |
255 | await coffee
256 | .spawn('nrm', ['set-hosted-repo', `${__REGISTRY__}`, `${repo}`], {
257 | shell: isWin,
258 | })
259 | .expect('stdout', match)
260 | .expect('code', 0)
261 | .end();
262 | });
263 |
264 | it('login [base64]', async () => {
265 | const username = 'username';
266 | const password = 'password';
267 |
268 | await coffee
269 | .spawn(
270 | 'nrm',
271 | ['login', `${__REGISTRY__}`, '-u', `${username}`, '-p', `${password}`],
272 | { shell: isWin },
273 | )
274 | .expect('stdout', /success/g)
275 | .expect('code', 0)
276 | .end();
277 |
278 | await coffee
279 | .spawn('nrm', ['login', `${__REGISTRY__}`], { shell: isWin })
280 | .expect(
281 | 'stderr',
282 | /Authorization information in base64 format or username & password is required/g,
283 | )
284 | .end();
285 | });
286 | });
287 |
288 | it('nrm home [browser]', async () => {
289 | await onHome('cnpm');
290 | expect(open).toHaveBeenCalled();
291 | });
292 |
293 | describe('nrm delete without argument (use keyword to select delete)', () => {
294 | const registries = [
295 | { name: 'test', url: 'http://localhost:3000' },
296 | { name: 'test1', url: 'http://localhost:3001' },
297 | { name: 'test2', url: 'http://localhost:3002' },
298 | ];
299 | beforeEach(async () => {
300 | for (const registry of registries) {
301 | await coffee
302 | .spawn('nrm', ['add', `${registry.name}`, `${registry.url}`], {
303 | shell: isWin,
304 | })
305 | .expect('stdout', /success/g)
306 | .expect('code', 0)
307 | .end();
308 | }
309 | });
310 |
311 | afterEach(async () => {
312 | await unlink(NRMRC);
313 | });
314 |
315 | it('nrm delete', async () => {
316 | const { stdout } = spawn('nrm', ['del'], { shell: isWin });
317 |
318 | const message = await new Promise((resolve) => {
319 | stdout.on('data', (data) => {
320 | resolve(stripAnsi(data.toString()).trim());
321 | });
322 | });
323 |
324 | expect(message).toMatchInlineSnapshot(`
325 | "? Please select the registries you want to delete (Press to select,
326 | to toggle all, to invert selection, and to proceed)
327 | ${pointer}${radioOff} test
328 | ${radioOff} test1
329 | ${radioOff} test2"
330 | `);
331 | });
332 |
333 | it('nrm delete (with keyword input)', async () => {
334 | const { stdout, stdin } = spawn('nrm', ['del'], { shell: isWin });
335 | stdin.write('\u001b[B');
336 |
337 | const message = await new Promise((resolve) => {
338 | const m: string[] = [];
339 | stdout.on('data', (data) => {
340 | m.push(stripAnsi(data.toString()).trim());
341 | // get the last output
342 | if (m.length === 2) {
343 | resolve(m[m.length - 1]);
344 | }
345 | });
346 | });
347 |
348 | expect(message).toMatchInlineSnapshot(`
349 | "? Please select the registries you want to delete (Press to select,
350 | to toggle all, to invert selection, and to proceed)
351 | ${radioOff} test
352 | ${pointer}${radioOff} test1
353 | ${radioOff} test2"
354 | `);
355 | });
356 | });
357 |
--------------------------------------------------------------------------------
/tests/helpers.test.ts:
--------------------------------------------------------------------------------
1 | import fs from 'node:fs';
2 | import chalk from 'chalk';
3 | import ini from 'ini';
4 | import mockFs from 'mock-fs';
5 | import { afterAll, beforeAll, expect, it } from 'vitest';
6 | import { NPMRC, NRMRC, REGISTRY } from '../src/constants';
7 | import {
8 | geneDashLine,
9 | getCurrentRegistry,
10 | getRegistries,
11 | isInternalRegistry,
12 | isLowerCaseEqual,
13 | isRegistryNotFound,
14 | readFile,
15 | writeFile,
16 | } from '../src/helpers';
17 |
18 | beforeAll(() => {
19 | mockFs({
20 | [NPMRC]: '',
21 | [NRMRC]: '',
22 | });
23 | });
24 |
25 | afterAll(() => {
26 | mockFs.restore();
27 | });
28 |
29 | it('geneDashLine', () => {
30 | const result1 = geneDashLine('taobao', 10);
31 | const result2 = geneDashLine('taobao', 1);
32 | expect(result1).toBe(` ${chalk.dim('-----')} `);
33 | expect(result2).toBe(` ${chalk.dim('-')} `);
34 | });
35 |
36 | it('getCurrentRegistry', async () => {
37 | const registry = ' https://registry.npmjs.org/';
38 | fs.writeFileSync(NPMRC, ini.stringify({ [REGISTRY]: registry }));
39 | const currentRegistry = await getCurrentRegistry();
40 | expect(currentRegistry).toBe(registry);
41 | });
42 |
43 | it('getRegistries', async () => {
44 | const name = 'fake name';
45 | const registry = 'https://registry.example.com/';
46 | fs.writeFileSync(NRMRC, ini.stringify({ [name]: { registry } }));
47 | const registries = await getRegistries();
48 | expect(Object.keys(registries).includes(name)).toBe(true);
49 | });
50 |
51 | it('readFile', async () => {
52 | const content = 'hello nrm';
53 | fs.writeFileSync(NRMRC, ini.stringify({ content: content }));
54 | const result1 = await readFile(NRMRC);
55 | const result2 = await readFile('file not exist');
56 | expect(result1.content).toBe(content);
57 | expect(result2).toEqual(Object.create(null));
58 | });
59 |
60 | it('writeFile', async () => {
61 | const content = { nrm: 'nrm is great' };
62 | await writeFile(NRMRC, { content });
63 | const result = await readFile(NRMRC);
64 | expect(result.content).toEqual(content);
65 | });
66 |
67 | it('isLowerCaseEqual', () => {
68 | const result1 = isLowerCaseEqual('taobao', 'TAOBAO');
69 | const result2 = isLowerCaseEqual('jd', 'tb');
70 | const result3 = isLowerCaseEqual('taobao', '');
71 | const result4 = isLowerCaseEqual('', '');
72 | expect(result1).toBe(true);
73 | expect(result2).toBe(false);
74 | expect(result3).toBe(false);
75 | expect(result4).toBe(true);
76 | });
77 |
78 | it('isRegistryNotFound', async () => {
79 | const unknown = 'unknown';
80 | const name = 'custom name';
81 | const registry = 'https://registry.example.com/';
82 | fs.writeFileSync(NRMRC, ini.stringify({ [name]: registry }));
83 | const result1 = await isRegistryNotFound(unknown, false);
84 | const result2 = await isRegistryNotFound(name, false);
85 | expect(result1).toBe(true);
86 | expect(result2).toBe(false);
87 | });
88 |
89 | it('isInternalRegistry', async () => {
90 | const name = 'custom name';
91 | const registry = 'https://registry.example.com/';
92 | fs.writeFileSync(NRMRC, ini.stringify({ [name]: registry }));
93 | const result1 = await isInternalRegistry(name);
94 | const result2 = await isInternalRegistry('npm');
95 | expect(result1).toBe(false);
96 | expect(result2).toBe(true);
97 | });
98 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "esnext",
4 | "strict": true,
5 | "declaration": false,
6 | "skipLibCheck": true,
7 | "esModuleInterop": true,
8 | "downlevelIteration": true,
9 | "resolveJsonModule": true,
10 | "lib": ["esnext"],
11 | "module": "CommonJS",
12 | "moduleResolution": "node",
13 | "outDir": "./dist",
14 | "rootDir": "./src"
15 | },
16 | "include": ["src"],
17 | "exclude": ["node_modules"]
18 | }
19 |
--------------------------------------------------------------------------------
/vitest.config.ts:
--------------------------------------------------------------------------------
1 | import { defineConfig } from 'vitest/config';
2 |
3 | export default defineConfig({
4 | test: {
5 | environment: 'node',
6 | },
7 | });
8 |
--------------------------------------------------------------------------------