+8
.changeset/README.md
+8
.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/master/docs/common-questions.md)
+16
.changeset/config.json
+16
.changeset/config.json
···
1
+
{
2
+
"$schema": "https://unpkg.com/@changesets/config@0.3.0/schema.json",
3
+
"changelog": "../scripts/changelog.js",
4
+
"commit": false,
5
+
"access": "public",
6
+
"baseBranch": "main",
7
+
"updateInternalDependencies": "minor",
8
+
"snapshot": {
9
+
"prereleaseTemplate": "{tag}-{commit}",
10
+
"useCalculatedVersion": true
11
+
},
12
+
"___experimentalUnsafeOptions_WILL_CHANGE_IN_PATCH": {
13
+
"onlyUpdatePeerDependentsWhenOutOfRange": true,
14
+
"updateInternalDependents": "out-of-range"
15
+
}
16
+
}
+1
.gitattributes
+1
.gitattributes
···
1
+
* text=auto
+76
.github/workflows/ci.yml
+76
.github/workflows/ci.yml
···
1
+
name: CI
2
+
3
+
on:
4
+
pull_request:
5
+
pull_request_review:
6
+
types: [submitted, edited]
7
+
branches: changeset-release/main
8
+
push:
9
+
branches:
10
+
- main
11
+
12
+
jobs:
13
+
unit:
14
+
name: Unit Tests
15
+
runs-on: ubuntu-latest
16
+
timeout-minutes: 10
17
+
strategy:
18
+
matrix:
19
+
node_version: [18, 20, 22]
20
+
steps:
21
+
- name: Checkout Repo
22
+
uses: actions/checkout@v4
23
+
with:
24
+
fetch-depth: 0
25
+
26
+
- name: Setup pnpm
27
+
uses: pnpm/action-setup@v3
28
+
with:
29
+
version: 9
30
+
run_install: false
31
+
32
+
- name: Setup Node
33
+
uses: actions/setup-node@v4
34
+
with:
35
+
node-version: ${{ matrix.node_version }}
36
+
cache: 'pnpm'
37
+
38
+
- name: Install Dependencies
39
+
run: pnpm install --frozen-lockfile --prefer-offline
40
+
41
+
- name: Unit Tests
42
+
run: pnpm run test
43
+
44
+
check:
45
+
name: Checks
46
+
runs-on: ubuntu-latest
47
+
timeout-minutes: 10
48
+
steps:
49
+
- name: Checkout Repo
50
+
uses: actions/checkout@v4
51
+
with:
52
+
fetch-depth: 0
53
+
54
+
- name: Setup pnpm
55
+
uses: pnpm/action-setup@v3
56
+
with:
57
+
version: 9
58
+
run_install: false
59
+
60
+
- name: Setup Node
61
+
uses: actions/setup-node@v4
62
+
with:
63
+
node-version: ${{ matrix.node_version }}
64
+
cache: 'pnpm'
65
+
66
+
- name: Install Dependencies
67
+
run: pnpm install --frozen-lockfile --prefer-offline
68
+
69
+
- name: TypeScript
70
+
run: pnpm run check
71
+
72
+
- name: Unit Tests
73
+
run: pnpm run test
74
+
75
+
- name: Build
76
+
run: pnpm run build
+60
.github/workflows/release.yml
+60
.github/workflows/release.yml
···
1
+
name: Release
2
+
on:
3
+
push:
4
+
branches:
5
+
- main
6
+
7
+
jobs:
8
+
release:
9
+
name: Release
10
+
runs-on: ubuntu-20.04
11
+
timeout-minutes: 20
12
+
permissions:
13
+
contents: write
14
+
id-token: write
15
+
issues: write
16
+
repository-projects: write
17
+
deployments: write
18
+
packages: write
19
+
pull-requests: write
20
+
steps:
21
+
- name: Checkout Repo
22
+
uses: actions/checkout@v4
23
+
with:
24
+
fetch-depth: 0
25
+
26
+
- name: Setup pnpm
27
+
uses: pnpm/action-setup@v3
28
+
with:
29
+
version: 9
30
+
run_install: false
31
+
32
+
- name: Setup Node
33
+
uses: actions/setup-node@v4
34
+
with:
35
+
node-version: 22
36
+
cache: 'pnpm'
37
+
38
+
- name: Install Dependencies
39
+
run: pnpm install --frozen-lockfile --prefer-offline
40
+
41
+
- name: PR or Publish
42
+
id: changesets
43
+
uses: changesets/action@v1.4.5
44
+
with:
45
+
version: pnpm changeset:version
46
+
publish: pnpm changeset:publish
47
+
env:
48
+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
49
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
50
+
51
+
- name: Publish Prerelease
52
+
if: steps.changesets.outputs.published != 'true'
53
+
env:
54
+
NPM_TOKEN: ${{ secrets.NPM_TOKEN }}
55
+
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
56
+
run: |
57
+
npm config set "//registry.npmjs.org/:_authToken" "$NPM_TOKEN"
58
+
git reset --hard origin/main
59
+
pnpm changeset version --no-git-tag --snapshot canary
60
+
pnpm changeset publish --no-git-tag --snapshot canary --tag canary
+24
LICENSE.md
+24
LICENSE.md
···
1
+
MIT License
2
+
3
+
Copyright (c) Phil Pluckthun,
4
+
Copyright (c) 2016 - 2020 Node Fetch Team,
5
+
Copyright (c) Remix Software Inc. 2020-2021,
6
+
Copyright (c) Shopify Inc. 2022-2024
7
+
8
+
Permission is hereby granted, free of charge, to any person obtaining a copy
9
+
of this software and associated documentation files (the "Software"), to deal
10
+
in the Software without restriction, including without limitation the rights
11
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
12
+
copies of the Software, and to permit persons to whom the Software is
13
+
furnished to do so, subject to the following conditions:
14
+
15
+
The above copyright notice and this permission notice shall be included in all
16
+
copies or substantial portions of the Software.
17
+
18
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
19
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
20
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
21
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
22
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
23
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
24
+
SOFTWARE.
+14
README.md
+14
README.md
···
1
+
# fetch-nodeshim
2
+
3
+
A looser implementation of `fetch` that bypasses Node.js' built-in `fetch`.
4
+
Some implementations (specifically ones that provide undici-based shims)
5
+
or some versions of Node.js may ship with a built-in version of `undici`
6
+
that's older and/or missing patches.
7
+
8
+
This implementation of `fetch` uses built-ins as much as possible,
9
+
using global `Request`, `Response`, and `Headers`, whether they're provided
10
+
by a polyfill or by Node.js itself.
11
+
However, it's a looser and more permissive implementation that calls
12
+
into `node:http` and `node:https` instead.
13
+
14
+
Think of it as `@remix-run/web-fetch`, but lighter.
+70
package.json
+70
package.json
···
1
+
{
2
+
"name": "fetch-nodeshim",
3
+
"version": "0.1.0",
4
+
"description": "A Node.js fetch shim using built-in Request, Response, and Headers (but without native fetch)",
5
+
"author": "Phil Pluckthun <phil@kitten.sh>",
6
+
"source": "./src/index.ts",
7
+
"main": "./dist/minifetch",
8
+
"module": "./dist/minifetch.mjs",
9
+
"types": "./dist/minifetch.d.ts",
10
+
"files": [
11
+
"LICENSE.md",
12
+
"README.md",
13
+
"CHANGELOG.md",
14
+
"dist/"
15
+
],
16
+
"scripts": {
17
+
"test": "vitest test",
18
+
"test:run": "vitest test --run",
19
+
"check": "tsc --noEmit",
20
+
"build": "rollup -c ./scripts/rollup.config.mjs",
21
+
"clean": "rimraf dist node_modules/.cache",
22
+
"prepublishOnly": "run-s clean build check test:run",
23
+
"prepare": "node ./scripts/prepare.js || true",
24
+
"changeset:version": "changeset version && pnpm install --lockfile-only",
25
+
"changeset:publish": "changeset publish"
26
+
},
27
+
"exports": {
28
+
".": {
29
+
"types": "./dist/minifetch.d.ts",
30
+
"import": "./dist/minifetch.mjs",
31
+
"require": "./dist/minifetch.js",
32
+
"source": "./src/index.ts"
33
+
},
34
+
"./package.json": "./package.json"
35
+
},
36
+
"prettier": {
37
+
"singleQuote": true,
38
+
"arrowParens": "avoid",
39
+
"trailingComma": "es5"
40
+
},
41
+
"lint-staged": {
42
+
"*.{js,ts,json,md}": "prettier --write"
43
+
},
44
+
"keywords": [],
45
+
"license": "MIT",
46
+
"devDependencies": {
47
+
"@babel/plugin-transform-block-scoping": "^7.25.9",
48
+
"@babel/plugin-transform-typescript": "^7.26.7",
49
+
"@changesets/cli": "^2.27.1",
50
+
"@changesets/get-github-info": "^0.6.0",
51
+
"@rollup/plugin-babel": "^6.0.4",
52
+
"@rollup/plugin-commonjs": "^28.0.2",
53
+
"@rollup/plugin-node-resolve": "^16.0.0",
54
+
"@rollup/plugin-terser": "^0.4.4",
55
+
"@types/node": "^22.12.0",
56
+
"busboy": "^0.3.1",
57
+
"dotenv": "^16.4.7",
58
+
"form-data": "^4.0.1",
59
+
"lint-staged": "^15.4.3",
60
+
"npm-run-all": "^4.1.5",
61
+
"prettier": "^3.4.2",
62
+
"rimraf": "^6.0.1",
63
+
"rollup": "^4.32.1",
64
+
"rollup-plugin-cjs-check": "^1.0.3",
65
+
"rollup-plugin-dts": "^6.1.1",
66
+
"typescript": "^5.7.3",
67
+
"undici-types": "^7.3.0",
68
+
"vitest": "^3.0.4"
69
+
}
70
+
}
+4200
pnpm-lock.yaml
+4200
pnpm-lock.yaml
···
1
+
lockfileVersion: '9.0'
2
+
3
+
settings:
4
+
autoInstallPeers: true
5
+
excludeLinksFromLockfile: false
6
+
7
+
importers:
8
+
9
+
.:
10
+
devDependencies:
11
+
'@babel/plugin-transform-block-scoping':
12
+
specifier: ^7.25.9
13
+
version: 7.25.9(@babel/core@7.26.7)
14
+
'@babel/plugin-transform-typescript':
15
+
specifier: ^7.26.7
16
+
version: 7.26.7(@babel/core@7.26.7)
17
+
'@changesets/cli':
18
+
specifier: ^2.27.1
19
+
version: 2.27.12
20
+
'@changesets/get-github-info':
21
+
specifier: ^0.6.0
22
+
version: 0.6.0
23
+
'@rollup/plugin-babel':
24
+
specifier: ^6.0.4
25
+
version: 6.0.4(@babel/core@7.26.7)(rollup@4.32.1)
26
+
'@rollup/plugin-commonjs':
27
+
specifier: ^28.0.2
28
+
version: 28.0.2(rollup@4.32.1)
29
+
'@rollup/plugin-node-resolve':
30
+
specifier: ^16.0.0
31
+
version: 16.0.0(rollup@4.32.1)
32
+
'@rollup/plugin-terser':
33
+
specifier: ^0.4.4
34
+
version: 0.4.4(rollup@4.32.1)
35
+
'@types/node':
36
+
specifier: ^22.12.0
37
+
version: 22.12.0
38
+
busboy:
39
+
specifier: ^0.3.1
40
+
version: 0.3.1
41
+
dotenv:
42
+
specifier: ^16.4.7
43
+
version: 16.4.7
44
+
form-data:
45
+
specifier: ^4.0.1
46
+
version: 4.0.1
47
+
lint-staged:
48
+
specifier: ^15.4.3
49
+
version: 15.4.3
50
+
npm-run-all:
51
+
specifier: ^4.1.5
52
+
version: 4.1.5
53
+
prettier:
54
+
specifier: ^3.4.2
55
+
version: 3.4.2
56
+
rimraf:
57
+
specifier: ^6.0.1
58
+
version: 6.0.1
59
+
rollup:
60
+
specifier: ^4.32.1
61
+
version: 4.32.1
62
+
rollup-plugin-cjs-check:
63
+
specifier: ^1.0.3
64
+
version: 1.0.3(rollup@4.32.1)
65
+
rollup-plugin-dts:
66
+
specifier: ^6.1.1
67
+
version: 6.1.1(rollup@4.32.1)(typescript@5.7.3)
68
+
typescript:
69
+
specifier: ^5.7.3
70
+
version: 5.7.3
71
+
undici-types:
72
+
specifier: ^7.3.0
73
+
version: 7.3.0
74
+
vitest:
75
+
specifier: ^3.0.4
76
+
version: 3.0.4(@types/node@22.12.0)(terser@5.37.0)(yaml@2.7.0)
77
+
78
+
packages:
79
+
80
+
'@ampproject/remapping@2.3.0':
81
+
resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==}
82
+
engines: {node: '>=6.0.0'}
83
+
84
+
'@babel/code-frame@7.26.2':
85
+
resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==}
86
+
engines: {node: '>=6.9.0'}
87
+
88
+
'@babel/compat-data@7.26.5':
89
+
resolution: {integrity: sha512-XvcZi1KWf88RVbF9wn8MN6tYFloU5qX8KjuF3E1PVBmJ9eypXfs4GRiJwLuTZL0iSnJUKn1BFPa5BPZZJyFzPg==}
90
+
engines: {node: '>=6.9.0'}
91
+
92
+
'@babel/core@7.26.7':
93
+
resolution: {integrity: sha512-SRijHmF0PSPgLIBYlWnG0hyeJLwXE2CgpsXaMOrtt2yp9/86ALw6oUlj9KYuZ0JN07T4eBMVIW4li/9S1j2BGA==}
94
+
engines: {node: '>=6.9.0'}
95
+
96
+
'@babel/generator@7.26.5':
97
+
resolution: {integrity: sha512-2caSP6fN9I7HOe6nqhtft7V4g7/V/gfDsC3Ag4W7kEzzvRGKqiv0pu0HogPiZ3KaVSoNDhUws6IJjDjpfmYIXw==}
98
+
engines: {node: '>=6.9.0'}
99
+
100
+
'@babel/helper-annotate-as-pure@7.25.9':
101
+
resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==}
102
+
engines: {node: '>=6.9.0'}
103
+
104
+
'@babel/helper-compilation-targets@7.26.5':
105
+
resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==}
106
+
engines: {node: '>=6.9.0'}
107
+
108
+
'@babel/helper-create-class-features-plugin@7.25.9':
109
+
resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==}
110
+
engines: {node: '>=6.9.0'}
111
+
peerDependencies:
112
+
'@babel/core': ^7.0.0
113
+
114
+
'@babel/helper-member-expression-to-functions@7.25.9':
115
+
resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==}
116
+
engines: {node: '>=6.9.0'}
117
+
118
+
'@babel/helper-module-imports@7.25.9':
119
+
resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==}
120
+
engines: {node: '>=6.9.0'}
121
+
122
+
'@babel/helper-module-transforms@7.26.0':
123
+
resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==}
124
+
engines: {node: '>=6.9.0'}
125
+
peerDependencies:
126
+
'@babel/core': ^7.0.0
127
+
128
+
'@babel/helper-optimise-call-expression@7.25.9':
129
+
resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==}
130
+
engines: {node: '>=6.9.0'}
131
+
132
+
'@babel/helper-plugin-utils@7.26.5':
133
+
resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==}
134
+
engines: {node: '>=6.9.0'}
135
+
136
+
'@babel/helper-replace-supers@7.26.5':
137
+
resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==}
138
+
engines: {node: '>=6.9.0'}
139
+
peerDependencies:
140
+
'@babel/core': ^7.0.0
141
+
142
+
'@babel/helper-skip-transparent-expression-wrappers@7.25.9':
143
+
resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==}
144
+
engines: {node: '>=6.9.0'}
145
+
146
+
'@babel/helper-string-parser@7.25.9':
147
+
resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==}
148
+
engines: {node: '>=6.9.0'}
149
+
150
+
'@babel/helper-validator-identifier@7.25.9':
151
+
resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==}
152
+
engines: {node: '>=6.9.0'}
153
+
154
+
'@babel/helper-validator-option@7.25.9':
155
+
resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==}
156
+
engines: {node: '>=6.9.0'}
157
+
158
+
'@babel/helpers@7.26.7':
159
+
resolution: {integrity: sha512-8NHiL98vsi0mbPQmYAGWwfcFaOy4j2HY49fXJCfuDcdE7fMIsH9a7GdaeXpIBsbT7307WU8KCMp5pUVDNL4f9A==}
160
+
engines: {node: '>=6.9.0'}
161
+
162
+
'@babel/parser@7.26.7':
163
+
resolution: {integrity: sha512-kEvgGGgEjRUutvdVvZhbn/BxVt+5VSpwXz1j3WYXQbXDo8KzFOPNG2GQbdAiNq8g6wn1yKk7C/qrke03a84V+w==}
164
+
engines: {node: '>=6.0.0'}
165
+
hasBin: true
166
+
167
+
'@babel/plugin-syntax-typescript@7.25.9':
168
+
resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==}
169
+
engines: {node: '>=6.9.0'}
170
+
peerDependencies:
171
+
'@babel/core': ^7.0.0-0
172
+
173
+
'@babel/plugin-transform-block-scoping@7.25.9':
174
+
resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==}
175
+
engines: {node: '>=6.9.0'}
176
+
peerDependencies:
177
+
'@babel/core': ^7.0.0-0
178
+
179
+
'@babel/plugin-transform-typescript@7.26.7':
180
+
resolution: {integrity: sha512-5cJurntg+AT+cgelGP9Bt788DKiAw9gIMSMU2NJrLAilnj0m8WZWUNZPSLOmadYsujHutpgElO+50foX+ib/Wg==}
181
+
engines: {node: '>=6.9.0'}
182
+
peerDependencies:
183
+
'@babel/core': ^7.0.0-0
184
+
185
+
'@babel/runtime@7.26.7':
186
+
resolution: {integrity: sha512-AOPI3D+a8dXnja+iwsUqGRjr1BbZIe771sXdapOtYI531gSqpi92vXivKcq2asu/DFpdl1ceFAKZyRzK2PCVcQ==}
187
+
engines: {node: '>=6.9.0'}
188
+
189
+
'@babel/template@7.25.9':
190
+
resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==}
191
+
engines: {node: '>=6.9.0'}
192
+
193
+
'@babel/traverse@7.26.7':
194
+
resolution: {integrity: sha512-1x1sgeyRLC3r5fQOM0/xtQKsYjyxmFjaOrLJNtZ81inNjyJHGIolTULPiSc/2qe1/qfpFLisLQYFnnZl7QoedA==}
195
+
engines: {node: '>=6.9.0'}
196
+
197
+
'@babel/types@7.26.7':
198
+
resolution: {integrity: sha512-t8kDRGrKXyp6+tjUh7hw2RLyclsW4TRoRvRHtSyAX9Bb5ldlFh+90YAYY6awRXrlB4G5G2izNeGySpATlFzmOg==}
199
+
engines: {node: '>=6.9.0'}
200
+
201
+
'@changesets/apply-release-plan@7.0.8':
202
+
resolution: {integrity: sha512-qjMUj4DYQ1Z6qHawsn7S71SujrExJ+nceyKKyI9iB+M5p9lCL55afuEd6uLBPRpLGWQwkwvWegDHtwHJb1UjpA==}
203
+
204
+
'@changesets/assemble-release-plan@6.0.5':
205
+
resolution: {integrity: sha512-IgvBWLNKZd6k4t72MBTBK3nkygi0j3t3zdC1zrfusYo0KpdsvnDjrMM9vPnTCLCMlfNs55jRL4gIMybxa64FCQ==}
206
+
207
+
'@changesets/changelog-git@0.2.0':
208
+
resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==}
209
+
210
+
'@changesets/cli@2.27.12':
211
+
resolution: {integrity: sha512-9o3fOfHYOvBnyEn0mcahB7wzaA3P4bGJf8PNqGit5PKaMEFdsRixik+txkrJWd2VX+O6wRFXpxQL8j/1ANKE9g==}
212
+
hasBin: true
213
+
214
+
'@changesets/config@3.0.5':
215
+
resolution: {integrity: sha512-QyXLSSd10GquX7hY0Mt4yQFMEeqnO5z/XLpbIr4PAkNNoQNKwDyiSrx4yd749WddusH1v3OSiA0NRAYmH/APpQ==}
216
+
217
+
'@changesets/errors@0.2.0':
218
+
resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==}
219
+
220
+
'@changesets/get-dependents-graph@2.1.2':
221
+
resolution: {integrity: sha512-sgcHRkiBY9i4zWYBwlVyAjEM9sAzs4wYVwJUdnbDLnVG3QwAaia1Mk5P8M7kraTOZN+vBET7n8KyB0YXCbFRLQ==}
222
+
223
+
'@changesets/get-github-info@0.6.0':
224
+
resolution: {integrity: sha512-v/TSnFVXI8vzX9/w3DU2Ol+UlTZcu3m0kXTjTT4KlAdwSvwutcByYwyYn9hwerPWfPkT2JfpoX0KgvCEi8Q/SA==}
225
+
226
+
'@changesets/get-release-plan@4.0.6':
227
+
resolution: {integrity: sha512-FHRwBkY7Eili04Y5YMOZb0ezQzKikTka4wL753vfUA5COSebt7KThqiuCN9BewE4/qFGgF/5t3AuzXx1/UAY4w==}
228
+
229
+
'@changesets/get-version-range-type@0.4.0':
230
+
resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==}
231
+
232
+
'@changesets/git@3.0.2':
233
+
resolution: {integrity: sha512-r1/Kju9Y8OxRRdvna+nxpQIsMsRQn9dhhAZt94FLDeu0Hij2hnOozW8iqnHBgvu+KdnJppCveQwK4odwfw/aWQ==}
234
+
235
+
'@changesets/logger@0.1.1':
236
+
resolution: {integrity: sha512-OQtR36ZlnuTxKqoW4Sv6x5YIhOmClRd5pWsjZsddYxpWs517R0HkyiefQPIytCVh4ZcC5x9XaG8KTdd5iRQUfg==}
237
+
238
+
'@changesets/parse@0.4.0':
239
+
resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==}
240
+
241
+
'@changesets/pre@2.0.1':
242
+
resolution: {integrity: sha512-vvBJ/If4jKM4tPz9JdY2kGOgWmCowUYOi5Ycv8dyLnEE8FgpYYUo1mgJZxcdtGGP3aG8rAQulGLyyXGSLkIMTQ==}
243
+
244
+
'@changesets/read@0.6.2':
245
+
resolution: {integrity: sha512-wjfQpJvryY3zD61p8jR87mJdyx2FIhEcdXhKUqkja87toMrP/3jtg/Yg29upN+N4Ckf525/uvV7a4tzBlpk6gg==}
246
+
247
+
'@changesets/should-skip-package@0.1.1':
248
+
resolution: {integrity: sha512-H9LjLbF6mMHLtJIc/eHR9Na+MifJ3VxtgP/Y+XLn4BF7tDTEN1HNYtH6QMcjP1uxp9sjaFYmW8xqloaCi/ckTg==}
249
+
250
+
'@changesets/types@4.1.0':
251
+
resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==}
252
+
253
+
'@changesets/types@6.0.0':
254
+
resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==}
255
+
256
+
'@changesets/write@0.3.2':
257
+
resolution: {integrity: sha512-kDxDrPNpUgsjDbWBvUo27PzKX4gqeKOlhibaOXDJA6kuBisGqNHv/HwGJrAu8U/dSf8ZEFIeHIPtvSlZI1kULw==}
258
+
259
+
'@esbuild/aix-ppc64@0.24.2':
260
+
resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==}
261
+
engines: {node: '>=18'}
262
+
cpu: [ppc64]
263
+
os: [aix]
264
+
265
+
'@esbuild/android-arm64@0.24.2':
266
+
resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==}
267
+
engines: {node: '>=18'}
268
+
cpu: [arm64]
269
+
os: [android]
270
+
271
+
'@esbuild/android-arm@0.24.2':
272
+
resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==}
273
+
engines: {node: '>=18'}
274
+
cpu: [arm]
275
+
os: [android]
276
+
277
+
'@esbuild/android-x64@0.24.2':
278
+
resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==}
279
+
engines: {node: '>=18'}
280
+
cpu: [x64]
281
+
os: [android]
282
+
283
+
'@esbuild/darwin-arm64@0.24.2':
284
+
resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==}
285
+
engines: {node: '>=18'}
286
+
cpu: [arm64]
287
+
os: [darwin]
288
+
289
+
'@esbuild/darwin-x64@0.24.2':
290
+
resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==}
291
+
engines: {node: '>=18'}
292
+
cpu: [x64]
293
+
os: [darwin]
294
+
295
+
'@esbuild/freebsd-arm64@0.24.2':
296
+
resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==}
297
+
engines: {node: '>=18'}
298
+
cpu: [arm64]
299
+
os: [freebsd]
300
+
301
+
'@esbuild/freebsd-x64@0.24.2':
302
+
resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==}
303
+
engines: {node: '>=18'}
304
+
cpu: [x64]
305
+
os: [freebsd]
306
+
307
+
'@esbuild/linux-arm64@0.24.2':
308
+
resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==}
309
+
engines: {node: '>=18'}
310
+
cpu: [arm64]
311
+
os: [linux]
312
+
313
+
'@esbuild/linux-arm@0.24.2':
314
+
resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==}
315
+
engines: {node: '>=18'}
316
+
cpu: [arm]
317
+
os: [linux]
318
+
319
+
'@esbuild/linux-ia32@0.24.2':
320
+
resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==}
321
+
engines: {node: '>=18'}
322
+
cpu: [ia32]
323
+
os: [linux]
324
+
325
+
'@esbuild/linux-loong64@0.24.2':
326
+
resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==}
327
+
engines: {node: '>=18'}
328
+
cpu: [loong64]
329
+
os: [linux]
330
+
331
+
'@esbuild/linux-mips64el@0.24.2':
332
+
resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==}
333
+
engines: {node: '>=18'}
334
+
cpu: [mips64el]
335
+
os: [linux]
336
+
337
+
'@esbuild/linux-ppc64@0.24.2':
338
+
resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==}
339
+
engines: {node: '>=18'}
340
+
cpu: [ppc64]
341
+
os: [linux]
342
+
343
+
'@esbuild/linux-riscv64@0.24.2':
344
+
resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==}
345
+
engines: {node: '>=18'}
346
+
cpu: [riscv64]
347
+
os: [linux]
348
+
349
+
'@esbuild/linux-s390x@0.24.2':
350
+
resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==}
351
+
engines: {node: '>=18'}
352
+
cpu: [s390x]
353
+
os: [linux]
354
+
355
+
'@esbuild/linux-x64@0.24.2':
356
+
resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==}
357
+
engines: {node: '>=18'}
358
+
cpu: [x64]
359
+
os: [linux]
360
+
361
+
'@esbuild/netbsd-arm64@0.24.2':
362
+
resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==}
363
+
engines: {node: '>=18'}
364
+
cpu: [arm64]
365
+
os: [netbsd]
366
+
367
+
'@esbuild/netbsd-x64@0.24.2':
368
+
resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==}
369
+
engines: {node: '>=18'}
370
+
cpu: [x64]
371
+
os: [netbsd]
372
+
373
+
'@esbuild/openbsd-arm64@0.24.2':
374
+
resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==}
375
+
engines: {node: '>=18'}
376
+
cpu: [arm64]
377
+
os: [openbsd]
378
+
379
+
'@esbuild/openbsd-x64@0.24.2':
380
+
resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==}
381
+
engines: {node: '>=18'}
382
+
cpu: [x64]
383
+
os: [openbsd]
384
+
385
+
'@esbuild/sunos-x64@0.24.2':
386
+
resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==}
387
+
engines: {node: '>=18'}
388
+
cpu: [x64]
389
+
os: [sunos]
390
+
391
+
'@esbuild/win32-arm64@0.24.2':
392
+
resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==}
393
+
engines: {node: '>=18'}
394
+
cpu: [arm64]
395
+
os: [win32]
396
+
397
+
'@esbuild/win32-ia32@0.24.2':
398
+
resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==}
399
+
engines: {node: '>=18'}
400
+
cpu: [ia32]
401
+
os: [win32]
402
+
403
+
'@esbuild/win32-x64@0.24.2':
404
+
resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==}
405
+
engines: {node: '>=18'}
406
+
cpu: [x64]
407
+
os: [win32]
408
+
409
+
'@isaacs/cliui@8.0.2':
410
+
resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
411
+
engines: {node: '>=12'}
412
+
413
+
'@jridgewell/gen-mapping@0.3.8':
414
+
resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==}
415
+
engines: {node: '>=6.0.0'}
416
+
417
+
'@jridgewell/resolve-uri@3.1.2':
418
+
resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
419
+
engines: {node: '>=6.0.0'}
420
+
421
+
'@jridgewell/set-array@1.2.1':
422
+
resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==}
423
+
engines: {node: '>=6.0.0'}
424
+
425
+
'@jridgewell/source-map@0.3.6':
426
+
resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==}
427
+
428
+
'@jridgewell/sourcemap-codec@1.5.0':
429
+
resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==}
430
+
431
+
'@jridgewell/trace-mapping@0.3.25':
432
+
resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==}
433
+
434
+
'@manypkg/find-root@1.1.0':
435
+
resolution: {integrity: sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==}
436
+
437
+
'@manypkg/get-packages@1.1.3':
438
+
resolution: {integrity: sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==}
439
+
440
+
'@nodelib/fs.scandir@2.1.5':
441
+
resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
442
+
engines: {node: '>= 8'}
443
+
444
+
'@nodelib/fs.stat@2.0.5':
445
+
resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
446
+
engines: {node: '>= 8'}
447
+
448
+
'@nodelib/fs.walk@1.2.8':
449
+
resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
450
+
engines: {node: '>= 8'}
451
+
452
+
'@rollup/plugin-babel@6.0.4':
453
+
resolution: {integrity: sha512-YF7Y52kFdFT/xVSuVdjkV5ZdX/3YtmX0QulG+x0taQOtJdHYzVU61aSSkAgVJ7NOv6qPkIYiJSgSWWN/DM5sGw==}
454
+
engines: {node: '>=14.0.0'}
455
+
peerDependencies:
456
+
'@babel/core': ^7.0.0
457
+
'@types/babel__core': ^7.1.9
458
+
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
459
+
peerDependenciesMeta:
460
+
'@types/babel__core':
461
+
optional: true
462
+
rollup:
463
+
optional: true
464
+
465
+
'@rollup/plugin-commonjs@28.0.2':
466
+
resolution: {integrity: sha512-BEFI2EDqzl+vA1rl97IDRZ61AIwGH093d9nz8+dThxJNH8oSoB7MjWvPCX3dkaK1/RCJ/1v/R1XB15FuSs0fQw==}
467
+
engines: {node: '>=16.0.0 || 14 >= 14.17'}
468
+
peerDependencies:
469
+
rollup: ^2.68.0||^3.0.0||^4.0.0
470
+
peerDependenciesMeta:
471
+
rollup:
472
+
optional: true
473
+
474
+
'@rollup/plugin-node-resolve@16.0.0':
475
+
resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==}
476
+
engines: {node: '>=14.0.0'}
477
+
peerDependencies:
478
+
rollup: ^2.78.0||^3.0.0||^4.0.0
479
+
peerDependenciesMeta:
480
+
rollup:
481
+
optional: true
482
+
483
+
'@rollup/plugin-terser@0.4.4':
484
+
resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==}
485
+
engines: {node: '>=14.0.0'}
486
+
peerDependencies:
487
+
rollup: ^2.0.0||^3.0.0||^4.0.0
488
+
peerDependenciesMeta:
489
+
rollup:
490
+
optional: true
491
+
492
+
'@rollup/pluginutils@5.1.4':
493
+
resolution: {integrity: sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==}
494
+
engines: {node: '>=14.0.0'}
495
+
peerDependencies:
496
+
rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0
497
+
peerDependenciesMeta:
498
+
rollup:
499
+
optional: true
500
+
501
+
'@rollup/rollup-android-arm-eabi@4.32.1':
502
+
resolution: {integrity: sha512-/pqA4DmqyCm8u5YIDzIdlLcEmuvxb0v8fZdFhVMszSpDTgbQKdw3/mB3eMUHIbubtJ6F9j+LtmyCnHTEqIHyzA==}
503
+
cpu: [arm]
504
+
os: [android]
505
+
506
+
'@rollup/rollup-android-arm64@4.32.1':
507
+
resolution: {integrity: sha512-If3PDskT77q7zgqVqYuj7WG3WC08G1kwXGVFi9Jr8nY6eHucREHkfpX79c0ACAjLj3QIWKPJR7w4i+f5EdLH5Q==}
508
+
cpu: [arm64]
509
+
os: [android]
510
+
511
+
'@rollup/rollup-darwin-arm64@4.32.1':
512
+
resolution: {integrity: sha512-zCpKHioQ9KgZToFp5Wvz6zaWbMzYQ2LJHQ+QixDKq52KKrF65ueu6Af4hLlLWHjX1Wf/0G5kSJM9PySW9IrvHA==}
513
+
cpu: [arm64]
514
+
os: [darwin]
515
+
516
+
'@rollup/rollup-darwin-x64@4.32.1':
517
+
resolution: {integrity: sha512-sFvF+t2+TyUo/ZQqUcifrJIgznx58oFZbdHS9TvHq3xhPVL9nOp+yZ6LKrO9GWTP+6DbFtoyLDbjTpR62Mbr3Q==}
518
+
cpu: [x64]
519
+
os: [darwin]
520
+
521
+
'@rollup/rollup-freebsd-arm64@4.32.1':
522
+
resolution: {integrity: sha512-NbOa+7InvMWRcY9RG+B6kKIMD/FsnQPH0MWUvDlQB1iXnF/UcKSudCXZtv4lW+C276g3w5AxPbfry5rSYvyeYA==}
523
+
cpu: [arm64]
524
+
os: [freebsd]
525
+
526
+
'@rollup/rollup-freebsd-x64@4.32.1':
527
+
resolution: {integrity: sha512-JRBRmwvHPXR881j2xjry8HZ86wIPK2CcDw0EXchE1UgU0ubWp9nvlT7cZYKc6bkypBt745b4bglf3+xJ7hXWWw==}
528
+
cpu: [x64]
529
+
os: [freebsd]
530
+
531
+
'@rollup/rollup-linux-arm-gnueabihf@4.32.1':
532
+
resolution: {integrity: sha512-PKvszb+9o/vVdUzCCjL0sKHukEQV39tD3fepXxYrHE3sTKrRdCydI7uldRLbjLmDA3TFDmh418XH19NOsDRH8g==}
533
+
cpu: [arm]
534
+
os: [linux]
535
+
536
+
'@rollup/rollup-linux-arm-musleabihf@4.32.1':
537
+
resolution: {integrity: sha512-9WHEMV6Y89eL606ReYowXuGF1Yb2vwfKWKdD1A5h+OYnPZSJvxbEjxTRKPgi7tkP2DSnW0YLab1ooy+i/FQp/Q==}
538
+
cpu: [arm]
539
+
os: [linux]
540
+
541
+
'@rollup/rollup-linux-arm64-gnu@4.32.1':
542
+
resolution: {integrity: sha512-tZWc9iEt5fGJ1CL2LRPw8OttkCBDs+D8D3oEM8mH8S1ICZCtFJhD7DZ3XMGM8kpqHvhGUTvNUYVDnmkj4BDXnw==}
543
+
cpu: [arm64]
544
+
os: [linux]
545
+
546
+
'@rollup/rollup-linux-arm64-musl@4.32.1':
547
+
resolution: {integrity: sha512-FTYc2YoTWUsBz5GTTgGkRYYJ5NGJIi/rCY4oK/I8aKowx1ToXeoVVbIE4LGAjsauvlhjfl0MYacxClLld1VrOw==}
548
+
cpu: [arm64]
549
+
os: [linux]
550
+
551
+
'@rollup/rollup-linux-loongarch64-gnu@4.32.1':
552
+
resolution: {integrity: sha512-F51qLdOtpS6P1zJVRzYM0v6MrBNypyPEN1GfMiz0gPu9jN8ScGaEFIZQwteSsGKg799oR5EaP7+B2jHgL+d+Kw==}
553
+
cpu: [loong64]
554
+
os: [linux]
555
+
556
+
'@rollup/rollup-linux-powerpc64le-gnu@4.32.1':
557
+
resolution: {integrity: sha512-wO0WkfSppfX4YFm5KhdCCpnpGbtgQNj/tgvYzrVYFKDpven8w2N6Gg5nB6w+wAMO3AIfSTWeTjfVe+uZ23zAlg==}
558
+
cpu: [ppc64]
559
+
os: [linux]
560
+
561
+
'@rollup/rollup-linux-riscv64-gnu@4.32.1':
562
+
resolution: {integrity: sha512-iWswS9cIXfJO1MFYtI/4jjlrGb/V58oMu4dYJIKnR5UIwbkzR0PJ09O0PDZT0oJ3LYWXBSWahNf/Mjo6i1E5/g==}
563
+
cpu: [riscv64]
564
+
os: [linux]
565
+
566
+
'@rollup/rollup-linux-s390x-gnu@4.32.1':
567
+
resolution: {integrity: sha512-RKt8NI9tebzmEthMnfVgG3i/XeECkMPS+ibVZjZ6mNekpbbUmkNWuIN2yHsb/mBPyZke4nlI4YqIdFPgKuoyQQ==}
568
+
cpu: [s390x]
569
+
os: [linux]
570
+
571
+
'@rollup/rollup-linux-x64-gnu@4.32.1':
572
+
resolution: {integrity: sha512-WQFLZ9c42ECqEjwg/GHHsouij3pzLXkFdz0UxHa/0OM12LzvX7DzedlY0SIEly2v18YZLRhCRoHZDxbBSWoGYg==}
573
+
cpu: [x64]
574
+
os: [linux]
575
+
576
+
'@rollup/rollup-linux-x64-musl@4.32.1':
577
+
resolution: {integrity: sha512-BLoiyHDOWoS3uccNSADMza6V6vCNiphi94tQlVIL5de+r6r/CCQuNnerf+1g2mnk2b6edp5dk0nhdZ7aEjOBsA==}
578
+
cpu: [x64]
579
+
os: [linux]
580
+
581
+
'@rollup/rollup-win32-arm64-msvc@4.32.1':
582
+
resolution: {integrity: sha512-w2l3UnlgYTNNU+Z6wOR8YdaioqfEnwPjIsJ66KxKAf0p+AuL2FHeTX6qvM+p/Ue3XPBVNyVSfCrfZiQh7vZHLQ==}
583
+
cpu: [arm64]
584
+
os: [win32]
585
+
586
+
'@rollup/rollup-win32-ia32-msvc@4.32.1':
587
+
resolution: {integrity: sha512-Am9H+TGLomPGkBnaPWie4F3x+yQ2rr4Bk2jpwy+iV+Gel9jLAu/KqT8k3X4jxFPW6Zf8OMnehyutsd+eHoq1WQ==}
588
+
cpu: [ia32]
589
+
os: [win32]
590
+
591
+
'@rollup/rollup-win32-x64-msvc@4.32.1':
592
+
resolution: {integrity: sha512-ar80GhdZb4DgmW3myIS9nRFYcpJRSME8iqWgzH2i44u+IdrzmiXVxeFnExQ5v4JYUSpg94bWjevMG8JHf1Da5Q==}
593
+
cpu: [x64]
594
+
os: [win32]
595
+
596
+
'@types/estree@1.0.6':
597
+
resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==}
598
+
599
+
'@types/node@12.20.55':
600
+
resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
601
+
602
+
'@types/node@22.12.0':
603
+
resolution: {integrity: sha512-Fll2FZ1riMjNmlmJOdAyY5pUbkftXslB5DgEzlIuNaiWhXd00FhWxVC/r4yV/4wBb9JfImTu+jiSvXTkJ7F/gA==}
604
+
605
+
'@types/resolve@1.20.2':
606
+
resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==}
607
+
608
+
'@vitest/expect@3.0.4':
609
+
resolution: {integrity: sha512-Nm5kJmYw6P2BxhJPkO3eKKhGYKRsnqJqf+r0yOGRKpEP+bSCBDsjXgiu1/5QFrnPMEgzfC38ZEjvCFgaNBC0Eg==}
610
+
611
+
'@vitest/mocker@3.0.4':
612
+
resolution: {integrity: sha512-gEef35vKafJlfQbnyOXZ0Gcr9IBUsMTyTLXsEQwuyYAerpHqvXhzdBnDFuHLpFqth3F7b6BaFr4qV/Cs1ULx5A==}
613
+
peerDependencies:
614
+
msw: ^2.4.9
615
+
vite: ^5.0.0 || ^6.0.0
616
+
peerDependenciesMeta:
617
+
msw:
618
+
optional: true
619
+
vite:
620
+
optional: true
621
+
622
+
'@vitest/pretty-format@3.0.4':
623
+
resolution: {integrity: sha512-ts0fba+dEhK2aC9PFuZ9LTpULHpY/nd6jhAQ5IMU7Gaj7crPCTdCFfgvXxruRBLFS+MLraicCuFXxISEq8C93g==}
624
+
625
+
'@vitest/runner@3.0.4':
626
+
resolution: {integrity: sha512-dKHzTQ7n9sExAcWH/0sh1elVgwc7OJ2lMOBrAm73J7AH6Pf9T12Zh3lNE1TETZaqrWFXtLlx3NVrLRb5hCK+iw==}
627
+
628
+
'@vitest/snapshot@3.0.4':
629
+
resolution: {integrity: sha512-+p5knMLwIk7lTQkM3NonZ9zBewzVp9EVkVpvNta0/PlFWpiqLaRcF4+33L1it3uRUCh0BGLOaXPPGEjNKfWb4w==}
630
+
631
+
'@vitest/spy@3.0.4':
632
+
resolution: {integrity: sha512-sXIMF0oauYyUy2hN49VFTYodzEAu744MmGcPR3ZBsPM20G+1/cSW/n1U+3Yu/zHxX2bIDe1oJASOkml+osTU6Q==}
633
+
634
+
'@vitest/utils@3.0.4':
635
+
resolution: {integrity: sha512-8BqC1ksYsHtbWH+DfpOAKrFw3jl3Uf9J7yeFh85Pz52IWuh1hBBtyfEbRNNZNjl8H8A5yMLH9/t+k7HIKzQcZQ==}
636
+
637
+
acorn@8.14.0:
638
+
resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==}
639
+
engines: {node: '>=0.4.0'}
640
+
hasBin: true
641
+
642
+
ansi-colors@4.1.3:
643
+
resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==}
644
+
engines: {node: '>=6'}
645
+
646
+
ansi-escapes@7.0.0:
647
+
resolution: {integrity: sha512-GdYO7a61mR0fOlAsvC9/rIHf7L96sBc6dEWzeOu+KAea5bZyQRPIpojrVoI4AXGJS/ycu/fBTdLrUkA4ODrvjw==}
648
+
engines: {node: '>=18'}
649
+
650
+
ansi-regex@5.0.1:
651
+
resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
652
+
engines: {node: '>=8'}
653
+
654
+
ansi-regex@6.1.0:
655
+
resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==}
656
+
engines: {node: '>=12'}
657
+
658
+
ansi-styles@3.2.1:
659
+
resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
660
+
engines: {node: '>=4'}
661
+
662
+
ansi-styles@4.3.0:
663
+
resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
664
+
engines: {node: '>=8'}
665
+
666
+
ansi-styles@6.2.1:
667
+
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
668
+
engines: {node: '>=12'}
669
+
670
+
argparse@1.0.10:
671
+
resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==}
672
+
673
+
array-buffer-byte-length@1.0.2:
674
+
resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
675
+
engines: {node: '>= 0.4'}
676
+
677
+
array-union@2.1.0:
678
+
resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
679
+
engines: {node: '>=8'}
680
+
681
+
arraybuffer.prototype.slice@1.0.4:
682
+
resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
683
+
engines: {node: '>= 0.4'}
684
+
685
+
assertion-error@2.0.1:
686
+
resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
687
+
engines: {node: '>=12'}
688
+
689
+
async-function@1.0.0:
690
+
resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
691
+
engines: {node: '>= 0.4'}
692
+
693
+
asynckit@0.4.0:
694
+
resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==}
695
+
696
+
available-typed-arrays@1.0.7:
697
+
resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
698
+
engines: {node: '>= 0.4'}
699
+
700
+
balanced-match@1.0.2:
701
+
resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
702
+
703
+
better-path-resolve@1.0.0:
704
+
resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==}
705
+
engines: {node: '>=4'}
706
+
707
+
brace-expansion@1.1.11:
708
+
resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
709
+
710
+
brace-expansion@2.0.1:
711
+
resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
712
+
713
+
braces@3.0.3:
714
+
resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
715
+
engines: {node: '>=8'}
716
+
717
+
browserslist@4.24.4:
718
+
resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==}
719
+
engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
720
+
hasBin: true
721
+
722
+
buffer-from@1.1.2:
723
+
resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==}
724
+
725
+
busboy@0.3.1:
726
+
resolution: {integrity: sha512-y7tTxhGKXcyBxRKAni+awqx8uqaJKrSFSNFSeRG5CsWNdmy2BIK+6VGWEW7TZnIO/533mtMEA4rOevQV815YJw==}
727
+
engines: {node: '>=4.5.0'}
728
+
729
+
cac@6.7.14:
730
+
resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
731
+
engines: {node: '>=8'}
732
+
733
+
call-bind-apply-helpers@1.0.1:
734
+
resolution: {integrity: sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==}
735
+
engines: {node: '>= 0.4'}
736
+
737
+
call-bind@1.0.8:
738
+
resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==}
739
+
engines: {node: '>= 0.4'}
740
+
741
+
call-bound@1.0.3:
742
+
resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==}
743
+
engines: {node: '>= 0.4'}
744
+
745
+
caniuse-lite@1.0.30001696:
746
+
resolution: {integrity: sha512-pDCPkvzfa39ehJtJ+OwGT/2yvT2SbjfHhiIW2LWOAcMQ7BzwxT/XuyUp4OTOd0XFWA6BKw0JalnBHgSi5DGJBQ==}
747
+
748
+
chai@5.1.2:
749
+
resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==}
750
+
engines: {node: '>=12'}
751
+
752
+
chalk@2.4.2:
753
+
resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
754
+
engines: {node: '>=4'}
755
+
756
+
chalk@5.4.1:
757
+
resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==}
758
+
engines: {node: ^12.17.0 || ^14.13 || >=16.0.0}
759
+
760
+
chardet@0.7.0:
761
+
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
762
+
763
+
check-error@2.1.1:
764
+
resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==}
765
+
engines: {node: '>= 16'}
766
+
767
+
ci-info@3.9.0:
768
+
resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==}
769
+
engines: {node: '>=8'}
770
+
771
+
cjs-module-lexer@1.4.2:
772
+
resolution: {integrity: sha512-7gdnIlr/WqvlQaX6yMvhHbiEVZ07qCV22rb/brgyFGKgo76ckIsrtDp4w2NIOitmKDNgiUm+pfVSE4VMwnkXwQ==}
773
+
774
+
cli-cursor@5.0.0:
775
+
resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==}
776
+
engines: {node: '>=18'}
777
+
778
+
cli-truncate@4.0.0:
779
+
resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==}
780
+
engines: {node: '>=18'}
781
+
782
+
color-convert@1.9.3:
783
+
resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
784
+
785
+
color-convert@2.0.1:
786
+
resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
787
+
engines: {node: '>=7.0.0'}
788
+
789
+
color-name@1.1.3:
790
+
resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
791
+
792
+
color-name@1.1.4:
793
+
resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
794
+
795
+
colorette@2.0.20:
796
+
resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==}
797
+
798
+
combined-stream@1.0.8:
799
+
resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==}
800
+
engines: {node: '>= 0.8'}
801
+
802
+
commander@13.1.0:
803
+
resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==}
804
+
engines: {node: '>=18'}
805
+
806
+
commander@2.20.3:
807
+
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
808
+
809
+
commondir@1.0.1:
810
+
resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==}
811
+
812
+
concat-map@0.0.1:
813
+
resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
814
+
815
+
convert-source-map@2.0.0:
816
+
resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
817
+
818
+
cross-spawn@6.0.6:
819
+
resolution: {integrity: sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw==}
820
+
engines: {node: '>=4.8'}
821
+
822
+
cross-spawn@7.0.6:
823
+
resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
824
+
engines: {node: '>= 8'}
825
+
826
+
data-view-buffer@1.0.2:
827
+
resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
828
+
engines: {node: '>= 0.4'}
829
+
830
+
data-view-byte-length@1.0.2:
831
+
resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
832
+
engines: {node: '>= 0.4'}
833
+
834
+
data-view-byte-offset@1.0.1:
835
+
resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
836
+
engines: {node: '>= 0.4'}
837
+
838
+
dataloader@1.4.0:
839
+
resolution: {integrity: sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==}
840
+
841
+
debug@4.4.0:
842
+
resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==}
843
+
engines: {node: '>=6.0'}
844
+
peerDependencies:
845
+
supports-color: '*'
846
+
peerDependenciesMeta:
847
+
supports-color:
848
+
optional: true
849
+
850
+
deep-eql@5.0.2:
851
+
resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==}
852
+
engines: {node: '>=6'}
853
+
854
+
deepmerge@4.3.1:
855
+
resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==}
856
+
engines: {node: '>=0.10.0'}
857
+
858
+
define-data-property@1.1.4:
859
+
resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
860
+
engines: {node: '>= 0.4'}
861
+
862
+
define-properties@1.2.1:
863
+
resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
864
+
engines: {node: '>= 0.4'}
865
+
866
+
delayed-stream@1.0.0:
867
+
resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==}
868
+
engines: {node: '>=0.4.0'}
869
+
870
+
detect-indent@6.1.0:
871
+
resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==}
872
+
engines: {node: '>=8'}
873
+
874
+
dicer@0.3.0:
875
+
resolution: {integrity: sha512-MdceRRWqltEG2dZqO769g27N/3PXfcKl04VhYnBlo2YhH7zPi88VebsjTKclaOyiuMaGU72hTfw3VkUitGcVCA==}
876
+
engines: {node: '>=4.5.0'}
877
+
878
+
dir-glob@3.0.1:
879
+
resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
880
+
engines: {node: '>=8'}
881
+
882
+
dotenv@16.4.7:
883
+
resolution: {integrity: sha512-47qPchRCykZC03FhkYAhrvwU4xDBFIj1QPqaarj6mdM/hgUzfPHcpkHJOn3mJAufFeeAxAzeGsr5X0M4k6fLZQ==}
884
+
engines: {node: '>=12'}
885
+
886
+
dunder-proto@1.0.1:
887
+
resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
888
+
engines: {node: '>= 0.4'}
889
+
890
+
eastasianwidth@0.2.0:
891
+
resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
892
+
893
+
electron-to-chromium@1.5.90:
894
+
resolution: {integrity: sha512-C3PN4aydfW91Natdyd449Kw+BzhLmof6tzy5W1pFC5SpQxVXT+oyiyOG9AgYYSN9OdA/ik3YkCrpwqI8ug5Tug==}
895
+
896
+
emoji-regex@10.4.0:
897
+
resolution: {integrity: sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw==}
898
+
899
+
emoji-regex@8.0.0:
900
+
resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
901
+
902
+
emoji-regex@9.2.2:
903
+
resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
904
+
905
+
enquirer@2.4.1:
906
+
resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
907
+
engines: {node: '>=8.6'}
908
+
909
+
environment@1.1.0:
910
+
resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==}
911
+
engines: {node: '>=18'}
912
+
913
+
error-ex@1.3.2:
914
+
resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
915
+
916
+
es-abstract@1.23.9:
917
+
resolution: {integrity: sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA==}
918
+
engines: {node: '>= 0.4'}
919
+
920
+
es-define-property@1.0.1:
921
+
resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
922
+
engines: {node: '>= 0.4'}
923
+
924
+
es-errors@1.3.0:
925
+
resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
926
+
engines: {node: '>= 0.4'}
927
+
928
+
es-module-lexer@1.6.0:
929
+
resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==}
930
+
931
+
es-object-atoms@1.1.1:
932
+
resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==}
933
+
engines: {node: '>= 0.4'}
934
+
935
+
es-set-tostringtag@2.1.0:
936
+
resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
937
+
engines: {node: '>= 0.4'}
938
+
939
+
es-to-primitive@1.3.0:
940
+
resolution: {integrity: sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==}
941
+
engines: {node: '>= 0.4'}
942
+
943
+
esbuild@0.24.2:
944
+
resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==}
945
+
engines: {node: '>=18'}
946
+
hasBin: true
947
+
948
+
escalade@3.2.0:
949
+
resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==}
950
+
engines: {node: '>=6'}
951
+
952
+
escape-string-regexp@1.0.5:
953
+
resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
954
+
engines: {node: '>=0.8.0'}
955
+
956
+
esprima@4.0.1:
957
+
resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==}
958
+
engines: {node: '>=4'}
959
+
hasBin: true
960
+
961
+
estree-walker@2.0.2:
962
+
resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==}
963
+
964
+
estree-walker@3.0.3:
965
+
resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
966
+
967
+
eventemitter3@5.0.1:
968
+
resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==}
969
+
970
+
execa@8.0.1:
971
+
resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==}
972
+
engines: {node: '>=16.17'}
973
+
974
+
expect-type@1.1.0:
975
+
resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==}
976
+
engines: {node: '>=12.0.0'}
977
+
978
+
extendable-error@0.1.7:
979
+
resolution: {integrity: sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==}
980
+
981
+
external-editor@3.1.0:
982
+
resolution: {integrity: sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==}
983
+
engines: {node: '>=4'}
984
+
985
+
fast-glob@3.3.3:
986
+
resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
987
+
engines: {node: '>=8.6.0'}
988
+
989
+
fastq@1.19.0:
990
+
resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==}
991
+
992
+
fdir@6.4.3:
993
+
resolution: {integrity: sha512-PMXmW2y1hDDfTSRc9gaXIuCCRpuoz3Kaz8cUelp3smouvfT632ozg2vrT6lJsHKKOF59YLbOGfAWGUcKEfRMQw==}
994
+
peerDependencies:
995
+
picomatch: ^3 || ^4
996
+
peerDependenciesMeta:
997
+
picomatch:
998
+
optional: true
999
+
1000
+
fill-range@7.1.1:
1001
+
resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
1002
+
engines: {node: '>=8'}
1003
+
1004
+
find-up@4.1.0:
1005
+
resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
1006
+
engines: {node: '>=8'}
1007
+
1008
+
for-each@0.3.4:
1009
+
resolution: {integrity: sha512-kKaIINnFpzW6ffJNDjjyjrk21BkDx38c0xa/klsT8VzLCaMEefv4ZTacrcVR4DmgTeBra++jMDAfS/tS799YDw==}
1010
+
engines: {node: '>= 0.4'}
1011
+
1012
+
foreground-child@3.3.0:
1013
+
resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==}
1014
+
engines: {node: '>=14'}
1015
+
1016
+
form-data@4.0.1:
1017
+
resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==}
1018
+
engines: {node: '>= 6'}
1019
+
1020
+
fs-extra@7.0.1:
1021
+
resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==}
1022
+
engines: {node: '>=6 <7 || >=8'}
1023
+
1024
+
fs-extra@8.1.0:
1025
+
resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==}
1026
+
engines: {node: '>=6 <7 || >=8'}
1027
+
1028
+
fsevents@2.3.3:
1029
+
resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
1030
+
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
1031
+
os: [darwin]
1032
+
1033
+
function-bind@1.1.2:
1034
+
resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
1035
+
1036
+
function.prototype.name@1.1.8:
1037
+
resolution: {integrity: sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q==}
1038
+
engines: {node: '>= 0.4'}
1039
+
1040
+
functions-have-names@1.2.3:
1041
+
resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
1042
+
1043
+
gensync@1.0.0-beta.2:
1044
+
resolution: {integrity: sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==}
1045
+
engines: {node: '>=6.9.0'}
1046
+
1047
+
get-east-asian-width@1.3.0:
1048
+
resolution: {integrity: sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ==}
1049
+
engines: {node: '>=18'}
1050
+
1051
+
get-intrinsic@1.2.7:
1052
+
resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==}
1053
+
engines: {node: '>= 0.4'}
1054
+
1055
+
get-proto@1.0.1:
1056
+
resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
1057
+
engines: {node: '>= 0.4'}
1058
+
1059
+
get-stream@8.0.1:
1060
+
resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==}
1061
+
engines: {node: '>=16'}
1062
+
1063
+
get-symbol-description@1.1.0:
1064
+
resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
1065
+
engines: {node: '>= 0.4'}
1066
+
1067
+
glob-parent@5.1.2:
1068
+
resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
1069
+
engines: {node: '>= 6'}
1070
+
1071
+
glob@11.0.1:
1072
+
resolution: {integrity: sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==}
1073
+
engines: {node: 20 || >=22}
1074
+
hasBin: true
1075
+
1076
+
globals@11.12.0:
1077
+
resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
1078
+
engines: {node: '>=4'}
1079
+
1080
+
globalthis@1.0.4:
1081
+
resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
1082
+
engines: {node: '>= 0.4'}
1083
+
1084
+
globby@11.1.0:
1085
+
resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
1086
+
engines: {node: '>=10'}
1087
+
1088
+
gopd@1.2.0:
1089
+
resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
1090
+
engines: {node: '>= 0.4'}
1091
+
1092
+
graceful-fs@4.2.11:
1093
+
resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
1094
+
1095
+
has-bigints@1.1.0:
1096
+
resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
1097
+
engines: {node: '>= 0.4'}
1098
+
1099
+
has-flag@3.0.0:
1100
+
resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
1101
+
engines: {node: '>=4'}
1102
+
1103
+
has-property-descriptors@1.0.2:
1104
+
resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
1105
+
1106
+
has-proto@1.2.0:
1107
+
resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
1108
+
engines: {node: '>= 0.4'}
1109
+
1110
+
has-symbols@1.1.0:
1111
+
resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
1112
+
engines: {node: '>= 0.4'}
1113
+
1114
+
has-tostringtag@1.0.2:
1115
+
resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
1116
+
engines: {node: '>= 0.4'}
1117
+
1118
+
hasown@2.0.2:
1119
+
resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==}
1120
+
engines: {node: '>= 0.4'}
1121
+
1122
+
hosted-git-info@2.8.9:
1123
+
resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
1124
+
1125
+
human-id@1.0.2:
1126
+
resolution: {integrity: sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==}
1127
+
1128
+
human-signals@5.0.0:
1129
+
resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==}
1130
+
engines: {node: '>=16.17.0'}
1131
+
1132
+
iconv-lite@0.4.24:
1133
+
resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==}
1134
+
engines: {node: '>=0.10.0'}
1135
+
1136
+
ignore@5.3.2:
1137
+
resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
1138
+
engines: {node: '>= 4'}
1139
+
1140
+
internal-slot@1.1.0:
1141
+
resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
1142
+
engines: {node: '>= 0.4'}
1143
+
1144
+
is-array-buffer@3.0.5:
1145
+
resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
1146
+
engines: {node: '>= 0.4'}
1147
+
1148
+
is-arrayish@0.2.1:
1149
+
resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
1150
+
1151
+
is-async-function@2.1.1:
1152
+
resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
1153
+
engines: {node: '>= 0.4'}
1154
+
1155
+
is-bigint@1.1.0:
1156
+
resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
1157
+
engines: {node: '>= 0.4'}
1158
+
1159
+
is-boolean-object@1.2.1:
1160
+
resolution: {integrity: sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==}
1161
+
engines: {node: '>= 0.4'}
1162
+
1163
+
is-callable@1.2.7:
1164
+
resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
1165
+
engines: {node: '>= 0.4'}
1166
+
1167
+
is-core-module@2.16.1:
1168
+
resolution: {integrity: sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==}
1169
+
engines: {node: '>= 0.4'}
1170
+
1171
+
is-data-view@1.0.2:
1172
+
resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
1173
+
engines: {node: '>= 0.4'}
1174
+
1175
+
is-date-object@1.1.0:
1176
+
resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
1177
+
engines: {node: '>= 0.4'}
1178
+
1179
+
is-extglob@2.1.1:
1180
+
resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
1181
+
engines: {node: '>=0.10.0'}
1182
+
1183
+
is-finalizationregistry@1.1.1:
1184
+
resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
1185
+
engines: {node: '>= 0.4'}
1186
+
1187
+
is-fullwidth-code-point@3.0.0:
1188
+
resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
1189
+
engines: {node: '>=8'}
1190
+
1191
+
is-fullwidth-code-point@4.0.0:
1192
+
resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==}
1193
+
engines: {node: '>=12'}
1194
+
1195
+
is-fullwidth-code-point@5.0.0:
1196
+
resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==}
1197
+
engines: {node: '>=18'}
1198
+
1199
+
is-generator-function@1.1.0:
1200
+
resolution: {integrity: sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ==}
1201
+
engines: {node: '>= 0.4'}
1202
+
1203
+
is-glob@4.0.3:
1204
+
resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
1205
+
engines: {node: '>=0.10.0'}
1206
+
1207
+
is-map@2.0.3:
1208
+
resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
1209
+
engines: {node: '>= 0.4'}
1210
+
1211
+
is-module@1.0.0:
1212
+
resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==}
1213
+
1214
+
is-number-object@1.1.1:
1215
+
resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
1216
+
engines: {node: '>= 0.4'}
1217
+
1218
+
is-number@7.0.0:
1219
+
resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
1220
+
engines: {node: '>=0.12.0'}
1221
+
1222
+
is-reference@1.2.1:
1223
+
resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==}
1224
+
1225
+
is-regex@1.2.1:
1226
+
resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
1227
+
engines: {node: '>= 0.4'}
1228
+
1229
+
is-set@2.0.3:
1230
+
resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
1231
+
engines: {node: '>= 0.4'}
1232
+
1233
+
is-shared-array-buffer@1.0.4:
1234
+
resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
1235
+
engines: {node: '>= 0.4'}
1236
+
1237
+
is-stream@3.0.0:
1238
+
resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
1239
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1240
+
1241
+
is-string@1.1.1:
1242
+
resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
1243
+
engines: {node: '>= 0.4'}
1244
+
1245
+
is-subdir@1.2.0:
1246
+
resolution: {integrity: sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==}
1247
+
engines: {node: '>=4'}
1248
+
1249
+
is-symbol@1.1.1:
1250
+
resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
1251
+
engines: {node: '>= 0.4'}
1252
+
1253
+
is-typed-array@1.1.15:
1254
+
resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
1255
+
engines: {node: '>= 0.4'}
1256
+
1257
+
is-weakmap@2.0.2:
1258
+
resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
1259
+
engines: {node: '>= 0.4'}
1260
+
1261
+
is-weakref@1.1.0:
1262
+
resolution: {integrity: sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==}
1263
+
engines: {node: '>= 0.4'}
1264
+
1265
+
is-weakset@2.0.4:
1266
+
resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
1267
+
engines: {node: '>= 0.4'}
1268
+
1269
+
is-windows@1.0.2:
1270
+
resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==}
1271
+
engines: {node: '>=0.10.0'}
1272
+
1273
+
isarray@2.0.5:
1274
+
resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
1275
+
1276
+
isexe@2.0.0:
1277
+
resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
1278
+
1279
+
jackspeak@4.0.2:
1280
+
resolution: {integrity: sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw==}
1281
+
engines: {node: 20 || >=22}
1282
+
1283
+
js-tokens@4.0.0:
1284
+
resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
1285
+
1286
+
js-yaml@3.14.1:
1287
+
resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==}
1288
+
hasBin: true
1289
+
1290
+
jsesc@3.1.0:
1291
+
resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
1292
+
engines: {node: '>=6'}
1293
+
hasBin: true
1294
+
1295
+
json-parse-better-errors@1.0.2:
1296
+
resolution: {integrity: sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==}
1297
+
1298
+
json5@2.2.3:
1299
+
resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==}
1300
+
engines: {node: '>=6'}
1301
+
hasBin: true
1302
+
1303
+
jsonfile@4.0.0:
1304
+
resolution: {integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==}
1305
+
1306
+
lilconfig@3.1.3:
1307
+
resolution: {integrity: sha512-/vlFKAoH5Cgt3Ie+JLhRbwOsCQePABiU3tJ1egGvyQ+33R/vcwM2Zl2QR/LzjsBeItPt3oSVXapn+m4nQDvpzw==}
1308
+
engines: {node: '>=14'}
1309
+
1310
+
lint-staged@15.4.3:
1311
+
resolution: {integrity: sha512-FoH1vOeouNh1pw+90S+cnuoFwRfUD9ijY2GKy5h7HS3OR7JVir2N2xrsa0+Twc1B7cW72L+88geG5cW4wIhn7g==}
1312
+
engines: {node: '>=18.12.0'}
1313
+
hasBin: true
1314
+
1315
+
listr2@8.2.5:
1316
+
resolution: {integrity: sha512-iyAZCeyD+c1gPyE9qpFu8af0Y+MRtmKOncdGoA2S5EY8iFq99dmmvkNnHiWo+pj0s7yH7l3KPIgee77tKpXPWQ==}
1317
+
engines: {node: '>=18.0.0'}
1318
+
1319
+
load-json-file@4.0.0:
1320
+
resolution: {integrity: sha512-Kx8hMakjX03tiGTLAIdJ+lL0htKnXjEZN6hk/tozf/WOuYGdZBJrZ+rCJRbVCugsjB3jMLn9746NsQIf5VjBMw==}
1321
+
engines: {node: '>=4'}
1322
+
1323
+
locate-path@5.0.0:
1324
+
resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
1325
+
engines: {node: '>=8'}
1326
+
1327
+
lodash.startcase@4.4.0:
1328
+
resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==}
1329
+
1330
+
log-update@6.1.0:
1331
+
resolution: {integrity: sha512-9ie8ItPR6tjY5uYJh8K/Zrv/RMZ5VOlOWvtZdEHYSTFKZfIBPQa9tOAEeAWhd+AnIneLJ22w5fjOYtoutpWq5w==}
1332
+
engines: {node: '>=18'}
1333
+
1334
+
loupe@3.1.3:
1335
+
resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==}
1336
+
1337
+
lru-cache@11.0.2:
1338
+
resolution: {integrity: sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==}
1339
+
engines: {node: 20 || >=22}
1340
+
1341
+
lru-cache@5.1.1:
1342
+
resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==}
1343
+
1344
+
magic-string@0.30.17:
1345
+
resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==}
1346
+
1347
+
math-intrinsics@1.1.0:
1348
+
resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
1349
+
engines: {node: '>= 0.4'}
1350
+
1351
+
memorystream@0.3.1:
1352
+
resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==}
1353
+
engines: {node: '>= 0.10.0'}
1354
+
1355
+
merge-stream@2.0.0:
1356
+
resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
1357
+
1358
+
merge2@1.4.1:
1359
+
resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
1360
+
engines: {node: '>= 8'}
1361
+
1362
+
micromatch@4.0.8:
1363
+
resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
1364
+
engines: {node: '>=8.6'}
1365
+
1366
+
mime-db@1.52.0:
1367
+
resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==}
1368
+
engines: {node: '>= 0.6'}
1369
+
1370
+
mime-types@2.1.35:
1371
+
resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==}
1372
+
engines: {node: '>= 0.6'}
1373
+
1374
+
mimic-fn@4.0.0:
1375
+
resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
1376
+
engines: {node: '>=12'}
1377
+
1378
+
mimic-function@5.0.1:
1379
+
resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==}
1380
+
engines: {node: '>=18'}
1381
+
1382
+
minimatch@10.0.1:
1383
+
resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==}
1384
+
engines: {node: 20 || >=22}
1385
+
1386
+
minimatch@3.1.2:
1387
+
resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
1388
+
1389
+
minipass@7.1.2:
1390
+
resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==}
1391
+
engines: {node: '>=16 || 14 >=14.17'}
1392
+
1393
+
mri@1.2.0:
1394
+
resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==}
1395
+
engines: {node: '>=4'}
1396
+
1397
+
ms@2.1.3:
1398
+
resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
1399
+
1400
+
nanoid@3.3.8:
1401
+
resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==}
1402
+
engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
1403
+
hasBin: true
1404
+
1405
+
nice-try@1.0.5:
1406
+
resolution: {integrity: sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ==}
1407
+
1408
+
node-fetch@2.7.0:
1409
+
resolution: {integrity: sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A==}
1410
+
engines: {node: 4.x || >=6.0.0}
1411
+
peerDependencies:
1412
+
encoding: ^0.1.0
1413
+
peerDependenciesMeta:
1414
+
encoding:
1415
+
optional: true
1416
+
1417
+
node-releases@2.0.19:
1418
+
resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==}
1419
+
1420
+
normalize-package-data@2.5.0:
1421
+
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
1422
+
1423
+
npm-run-all@4.1.5:
1424
+
resolution: {integrity: sha512-Oo82gJDAVcaMdi3nuoKFavkIHBRVqQ1qvMb+9LHk/cF4P6B2m8aP04hGf7oL6wZ9BuGwX1onlLhpuoofSyoQDQ==}
1425
+
engines: {node: '>= 4'}
1426
+
hasBin: true
1427
+
1428
+
npm-run-path@5.3.0:
1429
+
resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==}
1430
+
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
1431
+
1432
+
object-inspect@1.13.3:
1433
+
resolution: {integrity: sha512-kDCGIbxkDSXE3euJZZXzc6to7fCrKHNI/hSRQnRuQ+BWjFNzZwiFF8fj/6o2t2G9/jTj8PSIYTfCLelLZEeRpA==}
1434
+
engines: {node: '>= 0.4'}
1435
+
1436
+
object-keys@1.1.1:
1437
+
resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
1438
+
engines: {node: '>= 0.4'}
1439
+
1440
+
object.assign@4.1.7:
1441
+
resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
1442
+
engines: {node: '>= 0.4'}
1443
+
1444
+
onetime@6.0.0:
1445
+
resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
1446
+
engines: {node: '>=12'}
1447
+
1448
+
onetime@7.0.0:
1449
+
resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==}
1450
+
engines: {node: '>=18'}
1451
+
1452
+
os-tmpdir@1.0.2:
1453
+
resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==}
1454
+
engines: {node: '>=0.10.0'}
1455
+
1456
+
outdent@0.5.0:
1457
+
resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==}
1458
+
1459
+
own-keys@1.0.1:
1460
+
resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
1461
+
engines: {node: '>= 0.4'}
1462
+
1463
+
p-filter@2.1.0:
1464
+
resolution: {integrity: sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==}
1465
+
engines: {node: '>=8'}
1466
+
1467
+
p-limit@2.3.0:
1468
+
resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
1469
+
engines: {node: '>=6'}
1470
+
1471
+
p-locate@4.1.0:
1472
+
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
1473
+
engines: {node: '>=8'}
1474
+
1475
+
p-map@2.1.0:
1476
+
resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==}
1477
+
engines: {node: '>=6'}
1478
+
1479
+
p-try@2.2.0:
1480
+
resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
1481
+
engines: {node: '>=6'}
1482
+
1483
+
package-json-from-dist@1.0.1:
1484
+
resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==}
1485
+
1486
+
package-manager-detector@0.2.9:
1487
+
resolution: {integrity: sha512-+vYvA/Y31l8Zk8dwxHhL3JfTuHPm6tlxM2A3GeQyl7ovYnSp1+mzAxClxaOr0qO1TtPxbQxetI7v5XqKLJZk7Q==}
1488
+
1489
+
parse-json@4.0.0:
1490
+
resolution: {integrity: sha512-aOIos8bujGN93/8Ox/jPLh7RwVnPEysynVFE+fQZyg6jKELEHwzgKdLRFHUgXJL6kylijVSBC4BvN9OmsB48Rw==}
1491
+
engines: {node: '>=4'}
1492
+
1493
+
path-exists@4.0.0:
1494
+
resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
1495
+
engines: {node: '>=8'}
1496
+
1497
+
path-key@2.0.1:
1498
+
resolution: {integrity: sha512-fEHGKCSmUSDPv4uoj8AlD+joPlq3peND+HRYyxFz4KPw4z926S/b8rIuFs2FYJg3BwsxJf6A9/3eIdLaYC+9Dw==}
1499
+
engines: {node: '>=4'}
1500
+
1501
+
path-key@3.1.1:
1502
+
resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
1503
+
engines: {node: '>=8'}
1504
+
1505
+
path-key@4.0.0:
1506
+
resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
1507
+
engines: {node: '>=12'}
1508
+
1509
+
path-parse@1.0.7:
1510
+
resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
1511
+
1512
+
path-scurry@2.0.0:
1513
+
resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==}
1514
+
engines: {node: 20 || >=22}
1515
+
1516
+
path-type@3.0.0:
1517
+
resolution: {integrity: sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==}
1518
+
engines: {node: '>=4'}
1519
+
1520
+
path-type@4.0.0:
1521
+
resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
1522
+
engines: {node: '>=8'}
1523
+
1524
+
pathe@2.0.2:
1525
+
resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==}
1526
+
1527
+
pathval@2.0.0:
1528
+
resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==}
1529
+
engines: {node: '>= 14.16'}
1530
+
1531
+
picocolors@1.1.1:
1532
+
resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
1533
+
1534
+
picomatch@2.3.1:
1535
+
resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
1536
+
engines: {node: '>=8.6'}
1537
+
1538
+
picomatch@4.0.2:
1539
+
resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==}
1540
+
engines: {node: '>=12'}
1541
+
1542
+
pidtree@0.3.1:
1543
+
resolution: {integrity: sha512-qQbW94hLHEqCg7nhby4yRC7G2+jYHY4Rguc2bjw7Uug4GIJuu1tvf2uHaZv5Q8zdt+WKJ6qK1FOI6amaWUo5FA==}
1544
+
engines: {node: '>=0.10'}
1545
+
hasBin: true
1546
+
1547
+
pidtree@0.6.0:
1548
+
resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==}
1549
+
engines: {node: '>=0.10'}
1550
+
hasBin: true
1551
+
1552
+
pify@3.0.0:
1553
+
resolution: {integrity: sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg==}
1554
+
engines: {node: '>=4'}
1555
+
1556
+
pify@4.0.1:
1557
+
resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==}
1558
+
engines: {node: '>=6'}
1559
+
1560
+
possible-typed-array-names@1.0.0:
1561
+
resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==}
1562
+
engines: {node: '>= 0.4'}
1563
+
1564
+
postcss@8.5.1:
1565
+
resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==}
1566
+
engines: {node: ^10 || ^12 || >=14}
1567
+
1568
+
prettier@2.8.8:
1569
+
resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==}
1570
+
engines: {node: '>=10.13.0'}
1571
+
hasBin: true
1572
+
1573
+
prettier@3.4.2:
1574
+
resolution: {integrity: sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==}
1575
+
engines: {node: '>=14'}
1576
+
hasBin: true
1577
+
1578
+
queue-microtask@1.2.3:
1579
+
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
1580
+
1581
+
randombytes@2.1.0:
1582
+
resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==}
1583
+
1584
+
read-pkg@3.0.0:
1585
+
resolution: {integrity: sha512-BLq/cCO9two+lBgiTYNqD6GdtK8s4NpaWrl6/rCO9w0TUS8oJl7cmToOZfRYllKTISY6nt1U7jQ53brmKqY6BA==}
1586
+
engines: {node: '>=4'}
1587
+
1588
+
read-yaml-file@1.1.0:
1589
+
resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==}
1590
+
engines: {node: '>=6'}
1591
+
1592
+
reflect.getprototypeof@1.0.10:
1593
+
resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
1594
+
engines: {node: '>= 0.4'}
1595
+
1596
+
regenerator-runtime@0.14.1:
1597
+
resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==}
1598
+
1599
+
regexp.prototype.flags@1.5.4:
1600
+
resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
1601
+
engines: {node: '>= 0.4'}
1602
+
1603
+
resolve-from@5.0.0:
1604
+
resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==}
1605
+
engines: {node: '>=8'}
1606
+
1607
+
resolve@1.22.10:
1608
+
resolution: {integrity: sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==}
1609
+
engines: {node: '>= 0.4'}
1610
+
hasBin: true
1611
+
1612
+
restore-cursor@5.1.0:
1613
+
resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==}
1614
+
engines: {node: '>=18'}
1615
+
1616
+
reusify@1.0.4:
1617
+
resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
1618
+
engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
1619
+
1620
+
rfdc@1.4.1:
1621
+
resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==}
1622
+
1623
+
rimraf@6.0.1:
1624
+
resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==}
1625
+
engines: {node: 20 || >=22}
1626
+
hasBin: true
1627
+
1628
+
rollup-plugin-cjs-check@1.0.3:
1629
+
resolution: {integrity: sha512-l8Gn8fm0YsAUuCVPmJ9CjwX5D98xyjc7iBlKfik5RGgXrV35nBwKCb+xbsK2oMrWMIRdLWsfyVUBM153e2zvYg==}
1630
+
engines: {node: '>=14.0.0'}
1631
+
peerDependencies:
1632
+
rollup: ^1.20.0 || ^2.0.0 || ^3.0.0 || ^4.0.0
1633
+
1634
+
rollup-plugin-dts@6.1.1:
1635
+
resolution: {integrity: sha512-aSHRcJ6KG2IHIioYlvAOcEq6U99sVtqDDKVhnwt70rW6tsz3tv5OSjEiWcgzfsHdLyGXZ/3b/7b/+Za3Y6r1XA==}
1636
+
engines: {node: '>=16'}
1637
+
peerDependencies:
1638
+
rollup: ^3.29.4 || ^4
1639
+
typescript: ^4.5 || ^5.0
1640
+
1641
+
rollup@4.32.1:
1642
+
resolution: {integrity: sha512-z+aeEsOeEa3mEbS1Tjl6sAZ8NE3+AalQz1RJGj81M+fizusbdDMoEJwdJNHfaB40Scr4qNu+welOfes7maKonA==}
1643
+
engines: {node: '>=18.0.0', npm: '>=8.0.0'}
1644
+
hasBin: true
1645
+
1646
+
run-parallel@1.2.0:
1647
+
resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
1648
+
1649
+
safe-array-concat@1.1.3:
1650
+
resolution: {integrity: sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==}
1651
+
engines: {node: '>=0.4'}
1652
+
1653
+
safe-buffer@5.2.1:
1654
+
resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==}
1655
+
1656
+
safe-push-apply@1.0.0:
1657
+
resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
1658
+
engines: {node: '>= 0.4'}
1659
+
1660
+
safe-regex-test@1.1.0:
1661
+
resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
1662
+
engines: {node: '>= 0.4'}
1663
+
1664
+
safer-buffer@2.1.2:
1665
+
resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==}
1666
+
1667
+
semver@5.7.2:
1668
+
resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
1669
+
hasBin: true
1670
+
1671
+
semver@6.3.1:
1672
+
resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
1673
+
hasBin: true
1674
+
1675
+
semver@7.7.0:
1676
+
resolution: {integrity: sha512-DrfFnPzblFmNrIZzg5RzHegbiRWg7KMR7btwi2yjHwx06zsUbO5g613sVwEV7FTwmzJu+Io0lJe2GJ3LxqpvBQ==}
1677
+
engines: {node: '>=10'}
1678
+
hasBin: true
1679
+
1680
+
serialize-javascript@6.0.2:
1681
+
resolution: {integrity: sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==}
1682
+
1683
+
set-function-length@1.2.2:
1684
+
resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
1685
+
engines: {node: '>= 0.4'}
1686
+
1687
+
set-function-name@2.0.2:
1688
+
resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
1689
+
engines: {node: '>= 0.4'}
1690
+
1691
+
set-proto@1.0.0:
1692
+
resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
1693
+
engines: {node: '>= 0.4'}
1694
+
1695
+
shebang-command@1.2.0:
1696
+
resolution: {integrity: sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==}
1697
+
engines: {node: '>=0.10.0'}
1698
+
1699
+
shebang-command@2.0.0:
1700
+
resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
1701
+
engines: {node: '>=8'}
1702
+
1703
+
shebang-regex@1.0.0:
1704
+
resolution: {integrity: sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==}
1705
+
engines: {node: '>=0.10.0'}
1706
+
1707
+
shebang-regex@3.0.0:
1708
+
resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
1709
+
engines: {node: '>=8'}
1710
+
1711
+
shell-quote@1.8.2:
1712
+
resolution: {integrity: sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA==}
1713
+
engines: {node: '>= 0.4'}
1714
+
1715
+
side-channel-list@1.0.0:
1716
+
resolution: {integrity: sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==}
1717
+
engines: {node: '>= 0.4'}
1718
+
1719
+
side-channel-map@1.0.1:
1720
+
resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
1721
+
engines: {node: '>= 0.4'}
1722
+
1723
+
side-channel-weakmap@1.0.2:
1724
+
resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
1725
+
engines: {node: '>= 0.4'}
1726
+
1727
+
side-channel@1.1.0:
1728
+
resolution: {integrity: sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==}
1729
+
engines: {node: '>= 0.4'}
1730
+
1731
+
siginfo@2.0.0:
1732
+
resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
1733
+
1734
+
signal-exit@4.1.0:
1735
+
resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
1736
+
engines: {node: '>=14'}
1737
+
1738
+
slash@3.0.0:
1739
+
resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
1740
+
engines: {node: '>=8'}
1741
+
1742
+
slice-ansi@5.0.0:
1743
+
resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==}
1744
+
engines: {node: '>=12'}
1745
+
1746
+
slice-ansi@7.1.0:
1747
+
resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==}
1748
+
engines: {node: '>=18'}
1749
+
1750
+
smob@1.5.0:
1751
+
resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==}
1752
+
1753
+
source-map-js@1.2.1:
1754
+
resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
1755
+
engines: {node: '>=0.10.0'}
1756
+
1757
+
source-map-support@0.5.21:
1758
+
resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==}
1759
+
1760
+
source-map@0.6.1:
1761
+
resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==}
1762
+
engines: {node: '>=0.10.0'}
1763
+
1764
+
spawndamnit@3.0.1:
1765
+
resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==}
1766
+
1767
+
spdx-correct@3.2.0:
1768
+
resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
1769
+
1770
+
spdx-exceptions@2.5.0:
1771
+
resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
1772
+
1773
+
spdx-expression-parse@3.0.1:
1774
+
resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
1775
+
1776
+
spdx-license-ids@3.0.21:
1777
+
resolution: {integrity: sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg==}
1778
+
1779
+
sprintf-js@1.0.3:
1780
+
resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==}
1781
+
1782
+
stackback@0.0.2:
1783
+
resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
1784
+
1785
+
std-env@3.8.0:
1786
+
resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==}
1787
+
1788
+
streamsearch@0.1.2:
1789
+
resolution: {integrity: sha512-jos8u++JKm0ARcSUTAZXOVC0mSox7Bhn6sBgty73P1f3JGf7yG2clTbBNHUdde/kdvP2FESam+vM6l8jBrNxHA==}
1790
+
engines: {node: '>=0.8.0'}
1791
+
1792
+
string-argv@0.3.2:
1793
+
resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==}
1794
+
engines: {node: '>=0.6.19'}
1795
+
1796
+
string-width@4.2.3:
1797
+
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
1798
+
engines: {node: '>=8'}
1799
+
1800
+
string-width@5.1.2:
1801
+
resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
1802
+
engines: {node: '>=12'}
1803
+
1804
+
string-width@7.2.0:
1805
+
resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==}
1806
+
engines: {node: '>=18'}
1807
+
1808
+
string.prototype.padend@3.1.6:
1809
+
resolution: {integrity: sha512-XZpspuSB7vJWhvJc9DLSlrXl1mcA2BdoY5jjnS135ydXqLoqhs96JjDtCkjJEQHvfqZIp9hBuBMgI589peyx9Q==}
1810
+
engines: {node: '>= 0.4'}
1811
+
1812
+
string.prototype.trim@1.2.10:
1813
+
resolution: {integrity: sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==}
1814
+
engines: {node: '>= 0.4'}
1815
+
1816
+
string.prototype.trimend@1.0.9:
1817
+
resolution: {integrity: sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==}
1818
+
engines: {node: '>= 0.4'}
1819
+
1820
+
string.prototype.trimstart@1.0.8:
1821
+
resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
1822
+
engines: {node: '>= 0.4'}
1823
+
1824
+
strip-ansi@6.0.1:
1825
+
resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
1826
+
engines: {node: '>=8'}
1827
+
1828
+
strip-ansi@7.1.0:
1829
+
resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
1830
+
engines: {node: '>=12'}
1831
+
1832
+
strip-bom@3.0.0:
1833
+
resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
1834
+
engines: {node: '>=4'}
1835
+
1836
+
strip-final-newline@3.0.0:
1837
+
resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
1838
+
engines: {node: '>=12'}
1839
+
1840
+
supports-color@5.5.0:
1841
+
resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
1842
+
engines: {node: '>=4'}
1843
+
1844
+
supports-preserve-symlinks-flag@1.0.0:
1845
+
resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
1846
+
engines: {node: '>= 0.4'}
1847
+
1848
+
term-size@2.2.1:
1849
+
resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==}
1850
+
engines: {node: '>=8'}
1851
+
1852
+
terser@5.37.0:
1853
+
resolution: {integrity: sha512-B8wRRkmre4ERucLM/uXx4MOV5cbnOlVAqUst+1+iLKPI0dOgFO28f84ptoQt9HEI537PMzfYa/d+GEPKTRXmYA==}
1854
+
engines: {node: '>=10'}
1855
+
hasBin: true
1856
+
1857
+
tinybench@2.9.0:
1858
+
resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
1859
+
1860
+
tinyexec@0.3.2:
1861
+
resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==}
1862
+
1863
+
tinypool@1.0.2:
1864
+
resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==}
1865
+
engines: {node: ^18.0.0 || >=20.0.0}
1866
+
1867
+
tinyrainbow@2.0.0:
1868
+
resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==}
1869
+
engines: {node: '>=14.0.0'}
1870
+
1871
+
tinyspy@3.0.2:
1872
+
resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==}
1873
+
engines: {node: '>=14.0.0'}
1874
+
1875
+
tmp@0.0.33:
1876
+
resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==}
1877
+
engines: {node: '>=0.6.0'}
1878
+
1879
+
to-regex-range@5.0.1:
1880
+
resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
1881
+
engines: {node: '>=8.0'}
1882
+
1883
+
tr46@0.0.3:
1884
+
resolution: {integrity: sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==}
1885
+
1886
+
typed-array-buffer@1.0.3:
1887
+
resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
1888
+
engines: {node: '>= 0.4'}
1889
+
1890
+
typed-array-byte-length@1.0.3:
1891
+
resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
1892
+
engines: {node: '>= 0.4'}
1893
+
1894
+
typed-array-byte-offset@1.0.4:
1895
+
resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
1896
+
engines: {node: '>= 0.4'}
1897
+
1898
+
typed-array-length@1.0.7:
1899
+
resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==}
1900
+
engines: {node: '>= 0.4'}
1901
+
1902
+
typescript@5.7.3:
1903
+
resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==}
1904
+
engines: {node: '>=14.17'}
1905
+
hasBin: true
1906
+
1907
+
unbox-primitive@1.1.0:
1908
+
resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
1909
+
engines: {node: '>= 0.4'}
1910
+
1911
+
undici-types@6.20.0:
1912
+
resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==}
1913
+
1914
+
undici-types@7.3.0:
1915
+
resolution: {integrity: sha512-z2pHpkN2BEJl3QlQo0GtfGCyuhuBbWX60vzGwyn7ex/seM2UkvyGEfEV0Qb9pXc5StNfcJpsstgaf2YTEJa63Q==}
1916
+
1917
+
universalify@0.1.2:
1918
+
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
1919
+
engines: {node: '>= 4.0.0'}
1920
+
1921
+
update-browserslist-db@1.1.2:
1922
+
resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==}
1923
+
hasBin: true
1924
+
peerDependencies:
1925
+
browserslist: '>= 4.21.0'
1926
+
1927
+
validate-npm-package-license@3.0.4:
1928
+
resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
1929
+
1930
+
vite-node@3.0.4:
1931
+
resolution: {integrity: sha512-7JZKEzcYV2Nx3u6rlvN8qdo3QV7Fxyt6hx+CCKz9fbWxdX5IvUOmTWEAxMrWxaiSf7CKGLJQ5rFu8prb/jBjOA==}
1932
+
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1933
+
hasBin: true
1934
+
1935
+
vite@6.0.11:
1936
+
resolution: {integrity: sha512-4VL9mQPKoHy4+FE0NnRE/kbY51TOfaknxAjt3fJbGJxhIpBZiqVzlZDEesWWsuREXHwNdAoOFZ9MkPEVXczHwg==}
1937
+
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1938
+
hasBin: true
1939
+
peerDependencies:
1940
+
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
1941
+
jiti: '>=1.21.0'
1942
+
less: '*'
1943
+
lightningcss: ^1.21.0
1944
+
sass: '*'
1945
+
sass-embedded: '*'
1946
+
stylus: '*'
1947
+
sugarss: '*'
1948
+
terser: ^5.16.0
1949
+
tsx: ^4.8.1
1950
+
yaml: ^2.4.2
1951
+
peerDependenciesMeta:
1952
+
'@types/node':
1953
+
optional: true
1954
+
jiti:
1955
+
optional: true
1956
+
less:
1957
+
optional: true
1958
+
lightningcss:
1959
+
optional: true
1960
+
sass:
1961
+
optional: true
1962
+
sass-embedded:
1963
+
optional: true
1964
+
stylus:
1965
+
optional: true
1966
+
sugarss:
1967
+
optional: true
1968
+
terser:
1969
+
optional: true
1970
+
tsx:
1971
+
optional: true
1972
+
yaml:
1973
+
optional: true
1974
+
1975
+
vitest@3.0.4:
1976
+
resolution: {integrity: sha512-6XG8oTKy2gnJIFTHP6LD7ExFeNLxiTkK3CfMvT7IfR8IN+BYICCf0lXUQmX7i7JoxUP8QmeP4mTnWXgflu4yjw==}
1977
+
engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0}
1978
+
hasBin: true
1979
+
peerDependencies:
1980
+
'@edge-runtime/vm': '*'
1981
+
'@types/debug': ^4.1.12
1982
+
'@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0
1983
+
'@vitest/browser': 3.0.4
1984
+
'@vitest/ui': 3.0.4
1985
+
happy-dom: '*'
1986
+
jsdom: '*'
1987
+
peerDependenciesMeta:
1988
+
'@edge-runtime/vm':
1989
+
optional: true
1990
+
'@types/debug':
1991
+
optional: true
1992
+
'@types/node':
1993
+
optional: true
1994
+
'@vitest/browser':
1995
+
optional: true
1996
+
'@vitest/ui':
1997
+
optional: true
1998
+
happy-dom:
1999
+
optional: true
2000
+
jsdom:
2001
+
optional: true
2002
+
2003
+
webidl-conversions@3.0.1:
2004
+
resolution: {integrity: sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==}
2005
+
2006
+
whatwg-url@5.0.0:
2007
+
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
2008
+
2009
+
which-boxed-primitive@1.1.1:
2010
+
resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
2011
+
engines: {node: '>= 0.4'}
2012
+
2013
+
which-builtin-type@1.2.1:
2014
+
resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
2015
+
engines: {node: '>= 0.4'}
2016
+
2017
+
which-collection@1.0.2:
2018
+
resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
2019
+
engines: {node: '>= 0.4'}
2020
+
2021
+
which-typed-array@1.1.18:
2022
+
resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==}
2023
+
engines: {node: '>= 0.4'}
2024
+
2025
+
which@1.3.1:
2026
+
resolution: {integrity: sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==}
2027
+
hasBin: true
2028
+
2029
+
which@2.0.2:
2030
+
resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
2031
+
engines: {node: '>= 8'}
2032
+
hasBin: true
2033
+
2034
+
why-is-node-running@2.3.0:
2035
+
resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
2036
+
engines: {node: '>=8'}
2037
+
hasBin: true
2038
+
2039
+
wrap-ansi@7.0.0:
2040
+
resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
2041
+
engines: {node: '>=10'}
2042
+
2043
+
wrap-ansi@8.1.0:
2044
+
resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
2045
+
engines: {node: '>=12'}
2046
+
2047
+
wrap-ansi@9.0.0:
2048
+
resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==}
2049
+
engines: {node: '>=18'}
2050
+
2051
+
yallist@3.1.1:
2052
+
resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==}
2053
+
2054
+
yaml@2.7.0:
2055
+
resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==}
2056
+
engines: {node: '>= 14'}
2057
+
hasBin: true
2058
+
2059
+
snapshots:
2060
+
2061
+
'@ampproject/remapping@2.3.0':
2062
+
dependencies:
2063
+
'@jridgewell/gen-mapping': 0.3.8
2064
+
'@jridgewell/trace-mapping': 0.3.25
2065
+
2066
+
'@babel/code-frame@7.26.2':
2067
+
dependencies:
2068
+
'@babel/helper-validator-identifier': 7.25.9
2069
+
js-tokens: 4.0.0
2070
+
picocolors: 1.1.1
2071
+
2072
+
'@babel/compat-data@7.26.5': {}
2073
+
2074
+
'@babel/core@7.26.7':
2075
+
dependencies:
2076
+
'@ampproject/remapping': 2.3.0
2077
+
'@babel/code-frame': 7.26.2
2078
+
'@babel/generator': 7.26.5
2079
+
'@babel/helper-compilation-targets': 7.26.5
2080
+
'@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.7)
2081
+
'@babel/helpers': 7.26.7
2082
+
'@babel/parser': 7.26.7
2083
+
'@babel/template': 7.25.9
2084
+
'@babel/traverse': 7.26.7
2085
+
'@babel/types': 7.26.7
2086
+
convert-source-map: 2.0.0
2087
+
debug: 4.4.0
2088
+
gensync: 1.0.0-beta.2
2089
+
json5: 2.2.3
2090
+
semver: 6.3.1
2091
+
transitivePeerDependencies:
2092
+
- supports-color
2093
+
2094
+
'@babel/generator@7.26.5':
2095
+
dependencies:
2096
+
'@babel/parser': 7.26.7
2097
+
'@babel/types': 7.26.7
2098
+
'@jridgewell/gen-mapping': 0.3.8
2099
+
'@jridgewell/trace-mapping': 0.3.25
2100
+
jsesc: 3.1.0
2101
+
2102
+
'@babel/helper-annotate-as-pure@7.25.9':
2103
+
dependencies:
2104
+
'@babel/types': 7.26.7
2105
+
2106
+
'@babel/helper-compilation-targets@7.26.5':
2107
+
dependencies:
2108
+
'@babel/compat-data': 7.26.5
2109
+
'@babel/helper-validator-option': 7.25.9
2110
+
browserslist: 4.24.4
2111
+
lru-cache: 5.1.1
2112
+
semver: 6.3.1
2113
+
2114
+
'@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.7)':
2115
+
dependencies:
2116
+
'@babel/core': 7.26.7
2117
+
'@babel/helper-annotate-as-pure': 7.25.9
2118
+
'@babel/helper-member-expression-to-functions': 7.25.9
2119
+
'@babel/helper-optimise-call-expression': 7.25.9
2120
+
'@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.7)
2121
+
'@babel/helper-skip-transparent-expression-wrappers': 7.25.9
2122
+
'@babel/traverse': 7.26.7
2123
+
semver: 6.3.1
2124
+
transitivePeerDependencies:
2125
+
- supports-color
2126
+
2127
+
'@babel/helper-member-expression-to-functions@7.25.9':
2128
+
dependencies:
2129
+
'@babel/traverse': 7.26.7
2130
+
'@babel/types': 7.26.7
2131
+
transitivePeerDependencies:
2132
+
- supports-color
2133
+
2134
+
'@babel/helper-module-imports@7.25.9':
2135
+
dependencies:
2136
+
'@babel/traverse': 7.26.7
2137
+
'@babel/types': 7.26.7
2138
+
transitivePeerDependencies:
2139
+
- supports-color
2140
+
2141
+
'@babel/helper-module-transforms@7.26.0(@babel/core@7.26.7)':
2142
+
dependencies:
2143
+
'@babel/core': 7.26.7
2144
+
'@babel/helper-module-imports': 7.25.9
2145
+
'@babel/helper-validator-identifier': 7.25.9
2146
+
'@babel/traverse': 7.26.7
2147
+
transitivePeerDependencies:
2148
+
- supports-color
2149
+
2150
+
'@babel/helper-optimise-call-expression@7.25.9':
2151
+
dependencies:
2152
+
'@babel/types': 7.26.7
2153
+
2154
+
'@babel/helper-plugin-utils@7.26.5': {}
2155
+
2156
+
'@babel/helper-replace-supers@7.26.5(@babel/core@7.26.7)':
2157
+
dependencies:
2158
+
'@babel/core': 7.26.7
2159
+
'@babel/helper-member-expression-to-functions': 7.25.9
2160
+
'@babel/helper-optimise-call-expression': 7.25.9
2161
+
'@babel/traverse': 7.26.7
2162
+
transitivePeerDependencies:
2163
+
- supports-color
2164
+
2165
+
'@babel/helper-skip-transparent-expression-wrappers@7.25.9':
2166
+
dependencies:
2167
+
'@babel/traverse': 7.26.7
2168
+
'@babel/types': 7.26.7
2169
+
transitivePeerDependencies:
2170
+
- supports-color
2171
+
2172
+
'@babel/helper-string-parser@7.25.9': {}
2173
+
2174
+
'@babel/helper-validator-identifier@7.25.9': {}
2175
+
2176
+
'@babel/helper-validator-option@7.25.9': {}
2177
+
2178
+
'@babel/helpers@7.26.7':
2179
+
dependencies:
2180
+
'@babel/template': 7.25.9
2181
+
'@babel/types': 7.26.7
2182
+
2183
+
'@babel/parser@7.26.7':
2184
+
dependencies:
2185
+
'@babel/types': 7.26.7
2186
+
2187
+
'@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.7)':
2188
+
dependencies:
2189
+
'@babel/core': 7.26.7
2190
+
'@babel/helper-plugin-utils': 7.26.5
2191
+
2192
+
'@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.7)':
2193
+
dependencies:
2194
+
'@babel/core': 7.26.7
2195
+
'@babel/helper-plugin-utils': 7.26.5
2196
+
2197
+
'@babel/plugin-transform-typescript@7.26.7(@babel/core@7.26.7)':
2198
+
dependencies:
2199
+
'@babel/core': 7.26.7
2200
+
'@babel/helper-annotate-as-pure': 7.25.9
2201
+
'@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.7)
2202
+
'@babel/helper-plugin-utils': 7.26.5
2203
+
'@babel/helper-skip-transparent-expression-wrappers': 7.25.9
2204
+
'@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.7)
2205
+
transitivePeerDependencies:
2206
+
- supports-color
2207
+
2208
+
'@babel/runtime@7.26.7':
2209
+
dependencies:
2210
+
regenerator-runtime: 0.14.1
2211
+
2212
+
'@babel/template@7.25.9':
2213
+
dependencies:
2214
+
'@babel/code-frame': 7.26.2
2215
+
'@babel/parser': 7.26.7
2216
+
'@babel/types': 7.26.7
2217
+
2218
+
'@babel/traverse@7.26.7':
2219
+
dependencies:
2220
+
'@babel/code-frame': 7.26.2
2221
+
'@babel/generator': 7.26.5
2222
+
'@babel/parser': 7.26.7
2223
+
'@babel/template': 7.25.9
2224
+
'@babel/types': 7.26.7
2225
+
debug: 4.4.0
2226
+
globals: 11.12.0
2227
+
transitivePeerDependencies:
2228
+
- supports-color
2229
+
2230
+
'@babel/types@7.26.7':
2231
+
dependencies:
2232
+
'@babel/helper-string-parser': 7.25.9
2233
+
'@babel/helper-validator-identifier': 7.25.9
2234
+
2235
+
'@changesets/apply-release-plan@7.0.8':
2236
+
dependencies:
2237
+
'@changesets/config': 3.0.5
2238
+
'@changesets/get-version-range-type': 0.4.0
2239
+
'@changesets/git': 3.0.2
2240
+
'@changesets/should-skip-package': 0.1.1
2241
+
'@changesets/types': 6.0.0
2242
+
'@manypkg/get-packages': 1.1.3
2243
+
detect-indent: 6.1.0
2244
+
fs-extra: 7.0.1
2245
+
lodash.startcase: 4.4.0
2246
+
outdent: 0.5.0
2247
+
prettier: 2.8.8
2248
+
resolve-from: 5.0.0
2249
+
semver: 7.7.0
2250
+
2251
+
'@changesets/assemble-release-plan@6.0.5':
2252
+
dependencies:
2253
+
'@changesets/errors': 0.2.0
2254
+
'@changesets/get-dependents-graph': 2.1.2
2255
+
'@changesets/should-skip-package': 0.1.1
2256
+
'@changesets/types': 6.0.0
2257
+
'@manypkg/get-packages': 1.1.3
2258
+
semver: 7.7.0
2259
+
2260
+
'@changesets/changelog-git@0.2.0':
2261
+
dependencies:
2262
+
'@changesets/types': 6.0.0
2263
+
2264
+
'@changesets/cli@2.27.12':
2265
+
dependencies:
2266
+
'@changesets/apply-release-plan': 7.0.8
2267
+
'@changesets/assemble-release-plan': 6.0.5
2268
+
'@changesets/changelog-git': 0.2.0
2269
+
'@changesets/config': 3.0.5
2270
+
'@changesets/errors': 0.2.0
2271
+
'@changesets/get-dependents-graph': 2.1.2
2272
+
'@changesets/get-release-plan': 4.0.6
2273
+
'@changesets/git': 3.0.2
2274
+
'@changesets/logger': 0.1.1
2275
+
'@changesets/pre': 2.0.1
2276
+
'@changesets/read': 0.6.2
2277
+
'@changesets/should-skip-package': 0.1.1
2278
+
'@changesets/types': 6.0.0
2279
+
'@changesets/write': 0.3.2
2280
+
'@manypkg/get-packages': 1.1.3
2281
+
ansi-colors: 4.1.3
2282
+
ci-info: 3.9.0
2283
+
enquirer: 2.4.1
2284
+
external-editor: 3.1.0
2285
+
fs-extra: 7.0.1
2286
+
mri: 1.2.0
2287
+
p-limit: 2.3.0
2288
+
package-manager-detector: 0.2.9
2289
+
picocolors: 1.1.1
2290
+
resolve-from: 5.0.0
2291
+
semver: 7.7.0
2292
+
spawndamnit: 3.0.1
2293
+
term-size: 2.2.1
2294
+
2295
+
'@changesets/config@3.0.5':
2296
+
dependencies:
2297
+
'@changesets/errors': 0.2.0
2298
+
'@changesets/get-dependents-graph': 2.1.2
2299
+
'@changesets/logger': 0.1.1
2300
+
'@changesets/types': 6.0.0
2301
+
'@manypkg/get-packages': 1.1.3
2302
+
fs-extra: 7.0.1
2303
+
micromatch: 4.0.8
2304
+
2305
+
'@changesets/errors@0.2.0':
2306
+
dependencies:
2307
+
extendable-error: 0.1.7
2308
+
2309
+
'@changesets/get-dependents-graph@2.1.2':
2310
+
dependencies:
2311
+
'@changesets/types': 6.0.0
2312
+
'@manypkg/get-packages': 1.1.3
2313
+
picocolors: 1.1.1
2314
+
semver: 7.7.0
2315
+
2316
+
'@changesets/get-github-info@0.6.0':
2317
+
dependencies:
2318
+
dataloader: 1.4.0
2319
+
node-fetch: 2.7.0
2320
+
transitivePeerDependencies:
2321
+
- encoding
2322
+
2323
+
'@changesets/get-release-plan@4.0.6':
2324
+
dependencies:
2325
+
'@changesets/assemble-release-plan': 6.0.5
2326
+
'@changesets/config': 3.0.5
2327
+
'@changesets/pre': 2.0.1
2328
+
'@changesets/read': 0.6.2
2329
+
'@changesets/types': 6.0.0
2330
+
'@manypkg/get-packages': 1.1.3
2331
+
2332
+
'@changesets/get-version-range-type@0.4.0': {}
2333
+
2334
+
'@changesets/git@3.0.2':
2335
+
dependencies:
2336
+
'@changesets/errors': 0.2.0
2337
+
'@manypkg/get-packages': 1.1.3
2338
+
is-subdir: 1.2.0
2339
+
micromatch: 4.0.8
2340
+
spawndamnit: 3.0.1
2341
+
2342
+
'@changesets/logger@0.1.1':
2343
+
dependencies:
2344
+
picocolors: 1.1.1
2345
+
2346
+
'@changesets/parse@0.4.0':
2347
+
dependencies:
2348
+
'@changesets/types': 6.0.0
2349
+
js-yaml: 3.14.1
2350
+
2351
+
'@changesets/pre@2.0.1':
2352
+
dependencies:
2353
+
'@changesets/errors': 0.2.0
2354
+
'@changesets/types': 6.0.0
2355
+
'@manypkg/get-packages': 1.1.3
2356
+
fs-extra: 7.0.1
2357
+
2358
+
'@changesets/read@0.6.2':
2359
+
dependencies:
2360
+
'@changesets/git': 3.0.2
2361
+
'@changesets/logger': 0.1.1
2362
+
'@changesets/parse': 0.4.0
2363
+
'@changesets/types': 6.0.0
2364
+
fs-extra: 7.0.1
2365
+
p-filter: 2.1.0
2366
+
picocolors: 1.1.1
2367
+
2368
+
'@changesets/should-skip-package@0.1.1':
2369
+
dependencies:
2370
+
'@changesets/types': 6.0.0
2371
+
'@manypkg/get-packages': 1.1.3
2372
+
2373
+
'@changesets/types@4.1.0': {}
2374
+
2375
+
'@changesets/types@6.0.0': {}
2376
+
2377
+
'@changesets/write@0.3.2':
2378
+
dependencies:
2379
+
'@changesets/types': 6.0.0
2380
+
fs-extra: 7.0.1
2381
+
human-id: 1.0.2
2382
+
prettier: 2.8.8
2383
+
2384
+
'@esbuild/aix-ppc64@0.24.2':
2385
+
optional: true
2386
+
2387
+
'@esbuild/android-arm64@0.24.2':
2388
+
optional: true
2389
+
2390
+
'@esbuild/android-arm@0.24.2':
2391
+
optional: true
2392
+
2393
+
'@esbuild/android-x64@0.24.2':
2394
+
optional: true
2395
+
2396
+
'@esbuild/darwin-arm64@0.24.2':
2397
+
optional: true
2398
+
2399
+
'@esbuild/darwin-x64@0.24.2':
2400
+
optional: true
2401
+
2402
+
'@esbuild/freebsd-arm64@0.24.2':
2403
+
optional: true
2404
+
2405
+
'@esbuild/freebsd-x64@0.24.2':
2406
+
optional: true
2407
+
2408
+
'@esbuild/linux-arm64@0.24.2':
2409
+
optional: true
2410
+
2411
+
'@esbuild/linux-arm@0.24.2':
2412
+
optional: true
2413
+
2414
+
'@esbuild/linux-ia32@0.24.2':
2415
+
optional: true
2416
+
2417
+
'@esbuild/linux-loong64@0.24.2':
2418
+
optional: true
2419
+
2420
+
'@esbuild/linux-mips64el@0.24.2':
2421
+
optional: true
2422
+
2423
+
'@esbuild/linux-ppc64@0.24.2':
2424
+
optional: true
2425
+
2426
+
'@esbuild/linux-riscv64@0.24.2':
2427
+
optional: true
2428
+
2429
+
'@esbuild/linux-s390x@0.24.2':
2430
+
optional: true
2431
+
2432
+
'@esbuild/linux-x64@0.24.2':
2433
+
optional: true
2434
+
2435
+
'@esbuild/netbsd-arm64@0.24.2':
2436
+
optional: true
2437
+
2438
+
'@esbuild/netbsd-x64@0.24.2':
2439
+
optional: true
2440
+
2441
+
'@esbuild/openbsd-arm64@0.24.2':
2442
+
optional: true
2443
+
2444
+
'@esbuild/openbsd-x64@0.24.2':
2445
+
optional: true
2446
+
2447
+
'@esbuild/sunos-x64@0.24.2':
2448
+
optional: true
2449
+
2450
+
'@esbuild/win32-arm64@0.24.2':
2451
+
optional: true
2452
+
2453
+
'@esbuild/win32-ia32@0.24.2':
2454
+
optional: true
2455
+
2456
+
'@esbuild/win32-x64@0.24.2':
2457
+
optional: true
2458
+
2459
+
'@isaacs/cliui@8.0.2':
2460
+
dependencies:
2461
+
string-width: 5.1.2
2462
+
string-width-cjs: string-width@4.2.3
2463
+
strip-ansi: 7.1.0
2464
+
strip-ansi-cjs: strip-ansi@6.0.1
2465
+
wrap-ansi: 8.1.0
2466
+
wrap-ansi-cjs: wrap-ansi@7.0.0
2467
+
2468
+
'@jridgewell/gen-mapping@0.3.8':
2469
+
dependencies:
2470
+
'@jridgewell/set-array': 1.2.1
2471
+
'@jridgewell/sourcemap-codec': 1.5.0
2472
+
'@jridgewell/trace-mapping': 0.3.25
2473
+
2474
+
'@jridgewell/resolve-uri@3.1.2': {}
2475
+
2476
+
'@jridgewell/set-array@1.2.1': {}
2477
+
2478
+
'@jridgewell/source-map@0.3.6':
2479
+
dependencies:
2480
+
'@jridgewell/gen-mapping': 0.3.8
2481
+
'@jridgewell/trace-mapping': 0.3.25
2482
+
2483
+
'@jridgewell/sourcemap-codec@1.5.0': {}
2484
+
2485
+
'@jridgewell/trace-mapping@0.3.25':
2486
+
dependencies:
2487
+
'@jridgewell/resolve-uri': 3.1.2
2488
+
'@jridgewell/sourcemap-codec': 1.5.0
2489
+
2490
+
'@manypkg/find-root@1.1.0':
2491
+
dependencies:
2492
+
'@babel/runtime': 7.26.7
2493
+
'@types/node': 12.20.55
2494
+
find-up: 4.1.0
2495
+
fs-extra: 8.1.0
2496
+
2497
+
'@manypkg/get-packages@1.1.3':
2498
+
dependencies:
2499
+
'@babel/runtime': 7.26.7
2500
+
'@changesets/types': 4.1.0
2501
+
'@manypkg/find-root': 1.1.0
2502
+
fs-extra: 8.1.0
2503
+
globby: 11.1.0
2504
+
read-yaml-file: 1.1.0
2505
+
2506
+
'@nodelib/fs.scandir@2.1.5':
2507
+
dependencies:
2508
+
'@nodelib/fs.stat': 2.0.5
2509
+
run-parallel: 1.2.0
2510
+
2511
+
'@nodelib/fs.stat@2.0.5': {}
2512
+
2513
+
'@nodelib/fs.walk@1.2.8':
2514
+
dependencies:
2515
+
'@nodelib/fs.scandir': 2.1.5
2516
+
fastq: 1.19.0
2517
+
2518
+
'@rollup/plugin-babel@6.0.4(@babel/core@7.26.7)(rollup@4.32.1)':
2519
+
dependencies:
2520
+
'@babel/core': 7.26.7
2521
+
'@babel/helper-module-imports': 7.25.9
2522
+
'@rollup/pluginutils': 5.1.4(rollup@4.32.1)
2523
+
optionalDependencies:
2524
+
rollup: 4.32.1
2525
+
transitivePeerDependencies:
2526
+
- supports-color
2527
+
2528
+
'@rollup/plugin-commonjs@28.0.2(rollup@4.32.1)':
2529
+
dependencies:
2530
+
'@rollup/pluginutils': 5.1.4(rollup@4.32.1)
2531
+
commondir: 1.0.1
2532
+
estree-walker: 2.0.2
2533
+
fdir: 6.4.3(picomatch@4.0.2)
2534
+
is-reference: 1.2.1
2535
+
magic-string: 0.30.17
2536
+
picomatch: 4.0.2
2537
+
optionalDependencies:
2538
+
rollup: 4.32.1
2539
+
2540
+
'@rollup/plugin-node-resolve@16.0.0(rollup@4.32.1)':
2541
+
dependencies:
2542
+
'@rollup/pluginutils': 5.1.4(rollup@4.32.1)
2543
+
'@types/resolve': 1.20.2
2544
+
deepmerge: 4.3.1
2545
+
is-module: 1.0.0
2546
+
resolve: 1.22.10
2547
+
optionalDependencies:
2548
+
rollup: 4.32.1
2549
+
2550
+
'@rollup/plugin-terser@0.4.4(rollup@4.32.1)':
2551
+
dependencies:
2552
+
serialize-javascript: 6.0.2
2553
+
smob: 1.5.0
2554
+
terser: 5.37.0
2555
+
optionalDependencies:
2556
+
rollup: 4.32.1
2557
+
2558
+
'@rollup/pluginutils@5.1.4(rollup@4.32.1)':
2559
+
dependencies:
2560
+
'@types/estree': 1.0.6
2561
+
estree-walker: 2.0.2
2562
+
picomatch: 4.0.2
2563
+
optionalDependencies:
2564
+
rollup: 4.32.1
2565
+
2566
+
'@rollup/rollup-android-arm-eabi@4.32.1':
2567
+
optional: true
2568
+
2569
+
'@rollup/rollup-android-arm64@4.32.1':
2570
+
optional: true
2571
+
2572
+
'@rollup/rollup-darwin-arm64@4.32.1':
2573
+
optional: true
2574
+
2575
+
'@rollup/rollup-darwin-x64@4.32.1':
2576
+
optional: true
2577
+
2578
+
'@rollup/rollup-freebsd-arm64@4.32.1':
2579
+
optional: true
2580
+
2581
+
'@rollup/rollup-freebsd-x64@4.32.1':
2582
+
optional: true
2583
+
2584
+
'@rollup/rollup-linux-arm-gnueabihf@4.32.1':
2585
+
optional: true
2586
+
2587
+
'@rollup/rollup-linux-arm-musleabihf@4.32.1':
2588
+
optional: true
2589
+
2590
+
'@rollup/rollup-linux-arm64-gnu@4.32.1':
2591
+
optional: true
2592
+
2593
+
'@rollup/rollup-linux-arm64-musl@4.32.1':
2594
+
optional: true
2595
+
2596
+
'@rollup/rollup-linux-loongarch64-gnu@4.32.1':
2597
+
optional: true
2598
+
2599
+
'@rollup/rollup-linux-powerpc64le-gnu@4.32.1':
2600
+
optional: true
2601
+
2602
+
'@rollup/rollup-linux-riscv64-gnu@4.32.1':
2603
+
optional: true
2604
+
2605
+
'@rollup/rollup-linux-s390x-gnu@4.32.1':
2606
+
optional: true
2607
+
2608
+
'@rollup/rollup-linux-x64-gnu@4.32.1':
2609
+
optional: true
2610
+
2611
+
'@rollup/rollup-linux-x64-musl@4.32.1':
2612
+
optional: true
2613
+
2614
+
'@rollup/rollup-win32-arm64-msvc@4.32.1':
2615
+
optional: true
2616
+
2617
+
'@rollup/rollup-win32-ia32-msvc@4.32.1':
2618
+
optional: true
2619
+
2620
+
'@rollup/rollup-win32-x64-msvc@4.32.1':
2621
+
optional: true
2622
+
2623
+
'@types/estree@1.0.6': {}
2624
+
2625
+
'@types/node@12.20.55': {}
2626
+
2627
+
'@types/node@22.12.0':
2628
+
dependencies:
2629
+
undici-types: 6.20.0
2630
+
2631
+
'@types/resolve@1.20.2': {}
2632
+
2633
+
'@vitest/expect@3.0.4':
2634
+
dependencies:
2635
+
'@vitest/spy': 3.0.4
2636
+
'@vitest/utils': 3.0.4
2637
+
chai: 5.1.2
2638
+
tinyrainbow: 2.0.0
2639
+
2640
+
'@vitest/mocker@3.0.4(vite@6.0.11(@types/node@22.12.0)(terser@5.37.0)(yaml@2.7.0))':
2641
+
dependencies:
2642
+
'@vitest/spy': 3.0.4
2643
+
estree-walker: 3.0.3
2644
+
magic-string: 0.30.17
2645
+
optionalDependencies:
2646
+
vite: 6.0.11(@types/node@22.12.0)(terser@5.37.0)(yaml@2.7.0)
2647
+
2648
+
'@vitest/pretty-format@3.0.4':
2649
+
dependencies:
2650
+
tinyrainbow: 2.0.0
2651
+
2652
+
'@vitest/runner@3.0.4':
2653
+
dependencies:
2654
+
'@vitest/utils': 3.0.4
2655
+
pathe: 2.0.2
2656
+
2657
+
'@vitest/snapshot@3.0.4':
2658
+
dependencies:
2659
+
'@vitest/pretty-format': 3.0.4
2660
+
magic-string: 0.30.17
2661
+
pathe: 2.0.2
2662
+
2663
+
'@vitest/spy@3.0.4':
2664
+
dependencies:
2665
+
tinyspy: 3.0.2
2666
+
2667
+
'@vitest/utils@3.0.4':
2668
+
dependencies:
2669
+
'@vitest/pretty-format': 3.0.4
2670
+
loupe: 3.1.3
2671
+
tinyrainbow: 2.0.0
2672
+
2673
+
acorn@8.14.0: {}
2674
+
2675
+
ansi-colors@4.1.3: {}
2676
+
2677
+
ansi-escapes@7.0.0:
2678
+
dependencies:
2679
+
environment: 1.1.0
2680
+
2681
+
ansi-regex@5.0.1: {}
2682
+
2683
+
ansi-regex@6.1.0: {}
2684
+
2685
+
ansi-styles@3.2.1:
2686
+
dependencies:
2687
+
color-convert: 1.9.3
2688
+
2689
+
ansi-styles@4.3.0:
2690
+
dependencies:
2691
+
color-convert: 2.0.1
2692
+
2693
+
ansi-styles@6.2.1: {}
2694
+
2695
+
argparse@1.0.10:
2696
+
dependencies:
2697
+
sprintf-js: 1.0.3
2698
+
2699
+
array-buffer-byte-length@1.0.2:
2700
+
dependencies:
2701
+
call-bound: 1.0.3
2702
+
is-array-buffer: 3.0.5
2703
+
2704
+
array-union@2.1.0: {}
2705
+
2706
+
arraybuffer.prototype.slice@1.0.4:
2707
+
dependencies:
2708
+
array-buffer-byte-length: 1.0.2
2709
+
call-bind: 1.0.8
2710
+
define-properties: 1.2.1
2711
+
es-abstract: 1.23.9
2712
+
es-errors: 1.3.0
2713
+
get-intrinsic: 1.2.7
2714
+
is-array-buffer: 3.0.5
2715
+
2716
+
assertion-error@2.0.1: {}
2717
+
2718
+
async-function@1.0.0: {}
2719
+
2720
+
asynckit@0.4.0: {}
2721
+
2722
+
available-typed-arrays@1.0.7:
2723
+
dependencies:
2724
+
possible-typed-array-names: 1.0.0
2725
+
2726
+
balanced-match@1.0.2: {}
2727
+
2728
+
better-path-resolve@1.0.0:
2729
+
dependencies:
2730
+
is-windows: 1.0.2
2731
+
2732
+
brace-expansion@1.1.11:
2733
+
dependencies:
2734
+
balanced-match: 1.0.2
2735
+
concat-map: 0.0.1
2736
+
2737
+
brace-expansion@2.0.1:
2738
+
dependencies:
2739
+
balanced-match: 1.0.2
2740
+
2741
+
braces@3.0.3:
2742
+
dependencies:
2743
+
fill-range: 7.1.1
2744
+
2745
+
browserslist@4.24.4:
2746
+
dependencies:
2747
+
caniuse-lite: 1.0.30001696
2748
+
electron-to-chromium: 1.5.90
2749
+
node-releases: 2.0.19
2750
+
update-browserslist-db: 1.1.2(browserslist@4.24.4)
2751
+
2752
+
buffer-from@1.1.2: {}
2753
+
2754
+
busboy@0.3.1:
2755
+
dependencies:
2756
+
dicer: 0.3.0
2757
+
2758
+
cac@6.7.14: {}
2759
+
2760
+
call-bind-apply-helpers@1.0.1:
2761
+
dependencies:
2762
+
es-errors: 1.3.0
2763
+
function-bind: 1.1.2
2764
+
2765
+
call-bind@1.0.8:
2766
+
dependencies:
2767
+
call-bind-apply-helpers: 1.0.1
2768
+
es-define-property: 1.0.1
2769
+
get-intrinsic: 1.2.7
2770
+
set-function-length: 1.2.2
2771
+
2772
+
call-bound@1.0.3:
2773
+
dependencies:
2774
+
call-bind-apply-helpers: 1.0.1
2775
+
get-intrinsic: 1.2.7
2776
+
2777
+
caniuse-lite@1.0.30001696: {}
2778
+
2779
+
chai@5.1.2:
2780
+
dependencies:
2781
+
assertion-error: 2.0.1
2782
+
check-error: 2.1.1
2783
+
deep-eql: 5.0.2
2784
+
loupe: 3.1.3
2785
+
pathval: 2.0.0
2786
+
2787
+
chalk@2.4.2:
2788
+
dependencies:
2789
+
ansi-styles: 3.2.1
2790
+
escape-string-regexp: 1.0.5
2791
+
supports-color: 5.5.0
2792
+
2793
+
chalk@5.4.1: {}
2794
+
2795
+
chardet@0.7.0: {}
2796
+
2797
+
check-error@2.1.1: {}
2798
+
2799
+
ci-info@3.9.0: {}
2800
+
2801
+
cjs-module-lexer@1.4.2: {}
2802
+
2803
+
cli-cursor@5.0.0:
2804
+
dependencies:
2805
+
restore-cursor: 5.1.0
2806
+
2807
+
cli-truncate@4.0.0:
2808
+
dependencies:
2809
+
slice-ansi: 5.0.0
2810
+
string-width: 7.2.0
2811
+
2812
+
color-convert@1.9.3:
2813
+
dependencies:
2814
+
color-name: 1.1.3
2815
+
2816
+
color-convert@2.0.1:
2817
+
dependencies:
2818
+
color-name: 1.1.4
2819
+
2820
+
color-name@1.1.3: {}
2821
+
2822
+
color-name@1.1.4: {}
2823
+
2824
+
colorette@2.0.20: {}
2825
+
2826
+
combined-stream@1.0.8:
2827
+
dependencies:
2828
+
delayed-stream: 1.0.0
2829
+
2830
+
commander@13.1.0: {}
2831
+
2832
+
commander@2.20.3: {}
2833
+
2834
+
commondir@1.0.1: {}
2835
+
2836
+
concat-map@0.0.1: {}
2837
+
2838
+
convert-source-map@2.0.0: {}
2839
+
2840
+
cross-spawn@6.0.6:
2841
+
dependencies:
2842
+
nice-try: 1.0.5
2843
+
path-key: 2.0.1
2844
+
semver: 5.7.2
2845
+
shebang-command: 1.2.0
2846
+
which: 1.3.1
2847
+
2848
+
cross-spawn@7.0.6:
2849
+
dependencies:
2850
+
path-key: 3.1.1
2851
+
shebang-command: 2.0.0
2852
+
which: 2.0.2
2853
+
2854
+
data-view-buffer@1.0.2:
2855
+
dependencies:
2856
+
call-bound: 1.0.3
2857
+
es-errors: 1.3.0
2858
+
is-data-view: 1.0.2
2859
+
2860
+
data-view-byte-length@1.0.2:
2861
+
dependencies:
2862
+
call-bound: 1.0.3
2863
+
es-errors: 1.3.0
2864
+
is-data-view: 1.0.2
2865
+
2866
+
data-view-byte-offset@1.0.1:
2867
+
dependencies:
2868
+
call-bound: 1.0.3
2869
+
es-errors: 1.3.0
2870
+
is-data-view: 1.0.2
2871
+
2872
+
dataloader@1.4.0: {}
2873
+
2874
+
debug@4.4.0:
2875
+
dependencies:
2876
+
ms: 2.1.3
2877
+
2878
+
deep-eql@5.0.2: {}
2879
+
2880
+
deepmerge@4.3.1: {}
2881
+
2882
+
define-data-property@1.1.4:
2883
+
dependencies:
2884
+
es-define-property: 1.0.1
2885
+
es-errors: 1.3.0
2886
+
gopd: 1.2.0
2887
+
2888
+
define-properties@1.2.1:
2889
+
dependencies:
2890
+
define-data-property: 1.1.4
2891
+
has-property-descriptors: 1.0.2
2892
+
object-keys: 1.1.1
2893
+
2894
+
delayed-stream@1.0.0: {}
2895
+
2896
+
detect-indent@6.1.0: {}
2897
+
2898
+
dicer@0.3.0:
2899
+
dependencies:
2900
+
streamsearch: 0.1.2
2901
+
2902
+
dir-glob@3.0.1:
2903
+
dependencies:
2904
+
path-type: 4.0.0
2905
+
2906
+
dotenv@16.4.7: {}
2907
+
2908
+
dunder-proto@1.0.1:
2909
+
dependencies:
2910
+
call-bind-apply-helpers: 1.0.1
2911
+
es-errors: 1.3.0
2912
+
gopd: 1.2.0
2913
+
2914
+
eastasianwidth@0.2.0: {}
2915
+
2916
+
electron-to-chromium@1.5.90: {}
2917
+
2918
+
emoji-regex@10.4.0: {}
2919
+
2920
+
emoji-regex@8.0.0: {}
2921
+
2922
+
emoji-regex@9.2.2: {}
2923
+
2924
+
enquirer@2.4.1:
2925
+
dependencies:
2926
+
ansi-colors: 4.1.3
2927
+
strip-ansi: 6.0.1
2928
+
2929
+
environment@1.1.0: {}
2930
+
2931
+
error-ex@1.3.2:
2932
+
dependencies:
2933
+
is-arrayish: 0.2.1
2934
+
2935
+
es-abstract@1.23.9:
2936
+
dependencies:
2937
+
array-buffer-byte-length: 1.0.2
2938
+
arraybuffer.prototype.slice: 1.0.4
2939
+
available-typed-arrays: 1.0.7
2940
+
call-bind: 1.0.8
2941
+
call-bound: 1.0.3
2942
+
data-view-buffer: 1.0.2
2943
+
data-view-byte-length: 1.0.2
2944
+
data-view-byte-offset: 1.0.1
2945
+
es-define-property: 1.0.1
2946
+
es-errors: 1.3.0
2947
+
es-object-atoms: 1.1.1
2948
+
es-set-tostringtag: 2.1.0
2949
+
es-to-primitive: 1.3.0
2950
+
function.prototype.name: 1.1.8
2951
+
get-intrinsic: 1.2.7
2952
+
get-proto: 1.0.1
2953
+
get-symbol-description: 1.1.0
2954
+
globalthis: 1.0.4
2955
+
gopd: 1.2.0
2956
+
has-property-descriptors: 1.0.2
2957
+
has-proto: 1.2.0
2958
+
has-symbols: 1.1.0
2959
+
hasown: 2.0.2
2960
+
internal-slot: 1.1.0
2961
+
is-array-buffer: 3.0.5
2962
+
is-callable: 1.2.7
2963
+
is-data-view: 1.0.2
2964
+
is-regex: 1.2.1
2965
+
is-shared-array-buffer: 1.0.4
2966
+
is-string: 1.1.1
2967
+
is-typed-array: 1.1.15
2968
+
is-weakref: 1.1.0
2969
+
math-intrinsics: 1.1.0
2970
+
object-inspect: 1.13.3
2971
+
object-keys: 1.1.1
2972
+
object.assign: 4.1.7
2973
+
own-keys: 1.0.1
2974
+
regexp.prototype.flags: 1.5.4
2975
+
safe-array-concat: 1.1.3
2976
+
safe-push-apply: 1.0.0
2977
+
safe-regex-test: 1.1.0
2978
+
set-proto: 1.0.0
2979
+
string.prototype.trim: 1.2.10
2980
+
string.prototype.trimend: 1.0.9
2981
+
string.prototype.trimstart: 1.0.8
2982
+
typed-array-buffer: 1.0.3
2983
+
typed-array-byte-length: 1.0.3
2984
+
typed-array-byte-offset: 1.0.4
2985
+
typed-array-length: 1.0.7
2986
+
unbox-primitive: 1.1.0
2987
+
which-typed-array: 1.1.18
2988
+
2989
+
es-define-property@1.0.1: {}
2990
+
2991
+
es-errors@1.3.0: {}
2992
+
2993
+
es-module-lexer@1.6.0: {}
2994
+
2995
+
es-object-atoms@1.1.1:
2996
+
dependencies:
2997
+
es-errors: 1.3.0
2998
+
2999
+
es-set-tostringtag@2.1.0:
3000
+
dependencies:
3001
+
es-errors: 1.3.0
3002
+
get-intrinsic: 1.2.7
3003
+
has-tostringtag: 1.0.2
3004
+
hasown: 2.0.2
3005
+
3006
+
es-to-primitive@1.3.0:
3007
+
dependencies:
3008
+
is-callable: 1.2.7
3009
+
is-date-object: 1.1.0
3010
+
is-symbol: 1.1.1
3011
+
3012
+
esbuild@0.24.2:
3013
+
optionalDependencies:
3014
+
'@esbuild/aix-ppc64': 0.24.2
3015
+
'@esbuild/android-arm': 0.24.2
3016
+
'@esbuild/android-arm64': 0.24.2
3017
+
'@esbuild/android-x64': 0.24.2
3018
+
'@esbuild/darwin-arm64': 0.24.2
3019
+
'@esbuild/darwin-x64': 0.24.2
3020
+
'@esbuild/freebsd-arm64': 0.24.2
3021
+
'@esbuild/freebsd-x64': 0.24.2
3022
+
'@esbuild/linux-arm': 0.24.2
3023
+
'@esbuild/linux-arm64': 0.24.2
3024
+
'@esbuild/linux-ia32': 0.24.2
3025
+
'@esbuild/linux-loong64': 0.24.2
3026
+
'@esbuild/linux-mips64el': 0.24.2
3027
+
'@esbuild/linux-ppc64': 0.24.2
3028
+
'@esbuild/linux-riscv64': 0.24.2
3029
+
'@esbuild/linux-s390x': 0.24.2
3030
+
'@esbuild/linux-x64': 0.24.2
3031
+
'@esbuild/netbsd-arm64': 0.24.2
3032
+
'@esbuild/netbsd-x64': 0.24.2
3033
+
'@esbuild/openbsd-arm64': 0.24.2
3034
+
'@esbuild/openbsd-x64': 0.24.2
3035
+
'@esbuild/sunos-x64': 0.24.2
3036
+
'@esbuild/win32-arm64': 0.24.2
3037
+
'@esbuild/win32-ia32': 0.24.2
3038
+
'@esbuild/win32-x64': 0.24.2
3039
+
3040
+
escalade@3.2.0: {}
3041
+
3042
+
escape-string-regexp@1.0.5: {}
3043
+
3044
+
esprima@4.0.1: {}
3045
+
3046
+
estree-walker@2.0.2: {}
3047
+
3048
+
estree-walker@3.0.3:
3049
+
dependencies:
3050
+
'@types/estree': 1.0.6
3051
+
3052
+
eventemitter3@5.0.1: {}
3053
+
3054
+
execa@8.0.1:
3055
+
dependencies:
3056
+
cross-spawn: 7.0.6
3057
+
get-stream: 8.0.1
3058
+
human-signals: 5.0.0
3059
+
is-stream: 3.0.0
3060
+
merge-stream: 2.0.0
3061
+
npm-run-path: 5.3.0
3062
+
onetime: 6.0.0
3063
+
signal-exit: 4.1.0
3064
+
strip-final-newline: 3.0.0
3065
+
3066
+
expect-type@1.1.0: {}
3067
+
3068
+
extendable-error@0.1.7: {}
3069
+
3070
+
external-editor@3.1.0:
3071
+
dependencies:
3072
+
chardet: 0.7.0
3073
+
iconv-lite: 0.4.24
3074
+
tmp: 0.0.33
3075
+
3076
+
fast-glob@3.3.3:
3077
+
dependencies:
3078
+
'@nodelib/fs.stat': 2.0.5
3079
+
'@nodelib/fs.walk': 1.2.8
3080
+
glob-parent: 5.1.2
3081
+
merge2: 1.4.1
3082
+
micromatch: 4.0.8
3083
+
3084
+
fastq@1.19.0:
3085
+
dependencies:
3086
+
reusify: 1.0.4
3087
+
3088
+
fdir@6.4.3(picomatch@4.0.2):
3089
+
optionalDependencies:
3090
+
picomatch: 4.0.2
3091
+
3092
+
fill-range@7.1.1:
3093
+
dependencies:
3094
+
to-regex-range: 5.0.1
3095
+
3096
+
find-up@4.1.0:
3097
+
dependencies:
3098
+
locate-path: 5.0.0
3099
+
path-exists: 4.0.0
3100
+
3101
+
for-each@0.3.4:
3102
+
dependencies:
3103
+
is-callable: 1.2.7
3104
+
3105
+
foreground-child@3.3.0:
3106
+
dependencies:
3107
+
cross-spawn: 7.0.6
3108
+
signal-exit: 4.1.0
3109
+
3110
+
form-data@4.0.1:
3111
+
dependencies:
3112
+
asynckit: 0.4.0
3113
+
combined-stream: 1.0.8
3114
+
mime-types: 2.1.35
3115
+
3116
+
fs-extra@7.0.1:
3117
+
dependencies:
3118
+
graceful-fs: 4.2.11
3119
+
jsonfile: 4.0.0
3120
+
universalify: 0.1.2
3121
+
3122
+
fs-extra@8.1.0:
3123
+
dependencies:
3124
+
graceful-fs: 4.2.11
3125
+
jsonfile: 4.0.0
3126
+
universalify: 0.1.2
3127
+
3128
+
fsevents@2.3.3:
3129
+
optional: true
3130
+
3131
+
function-bind@1.1.2: {}
3132
+
3133
+
function.prototype.name@1.1.8:
3134
+
dependencies:
3135
+
call-bind: 1.0.8
3136
+
call-bound: 1.0.3
3137
+
define-properties: 1.2.1
3138
+
functions-have-names: 1.2.3
3139
+
hasown: 2.0.2
3140
+
is-callable: 1.2.7
3141
+
3142
+
functions-have-names@1.2.3: {}
3143
+
3144
+
gensync@1.0.0-beta.2: {}
3145
+
3146
+
get-east-asian-width@1.3.0: {}
3147
+
3148
+
get-intrinsic@1.2.7:
3149
+
dependencies:
3150
+
call-bind-apply-helpers: 1.0.1
3151
+
es-define-property: 1.0.1
3152
+
es-errors: 1.3.0
3153
+
es-object-atoms: 1.1.1
3154
+
function-bind: 1.1.2
3155
+
get-proto: 1.0.1
3156
+
gopd: 1.2.0
3157
+
has-symbols: 1.1.0
3158
+
hasown: 2.0.2
3159
+
math-intrinsics: 1.1.0
3160
+
3161
+
get-proto@1.0.1:
3162
+
dependencies:
3163
+
dunder-proto: 1.0.1
3164
+
es-object-atoms: 1.1.1
3165
+
3166
+
get-stream@8.0.1: {}
3167
+
3168
+
get-symbol-description@1.1.0:
3169
+
dependencies:
3170
+
call-bound: 1.0.3
3171
+
es-errors: 1.3.0
3172
+
get-intrinsic: 1.2.7
3173
+
3174
+
glob-parent@5.1.2:
3175
+
dependencies:
3176
+
is-glob: 4.0.3
3177
+
3178
+
glob@11.0.1:
3179
+
dependencies:
3180
+
foreground-child: 3.3.0
3181
+
jackspeak: 4.0.2
3182
+
minimatch: 10.0.1
3183
+
minipass: 7.1.2
3184
+
package-json-from-dist: 1.0.1
3185
+
path-scurry: 2.0.0
3186
+
3187
+
globals@11.12.0: {}
3188
+
3189
+
globalthis@1.0.4:
3190
+
dependencies:
3191
+
define-properties: 1.2.1
3192
+
gopd: 1.2.0
3193
+
3194
+
globby@11.1.0:
3195
+
dependencies:
3196
+
array-union: 2.1.0
3197
+
dir-glob: 3.0.1
3198
+
fast-glob: 3.3.3
3199
+
ignore: 5.3.2
3200
+
merge2: 1.4.1
3201
+
slash: 3.0.0
3202
+
3203
+
gopd@1.2.0: {}
3204
+
3205
+
graceful-fs@4.2.11: {}
3206
+
3207
+
has-bigints@1.1.0: {}
3208
+
3209
+
has-flag@3.0.0: {}
3210
+
3211
+
has-property-descriptors@1.0.2:
3212
+
dependencies:
3213
+
es-define-property: 1.0.1
3214
+
3215
+
has-proto@1.2.0:
3216
+
dependencies:
3217
+
dunder-proto: 1.0.1
3218
+
3219
+
has-symbols@1.1.0: {}
3220
+
3221
+
has-tostringtag@1.0.2:
3222
+
dependencies:
3223
+
has-symbols: 1.1.0
3224
+
3225
+
hasown@2.0.2:
3226
+
dependencies:
3227
+
function-bind: 1.1.2
3228
+
3229
+
hosted-git-info@2.8.9: {}
3230
+
3231
+
human-id@1.0.2: {}
3232
+
3233
+
human-signals@5.0.0: {}
3234
+
3235
+
iconv-lite@0.4.24:
3236
+
dependencies:
3237
+
safer-buffer: 2.1.2
3238
+
3239
+
ignore@5.3.2: {}
3240
+
3241
+
internal-slot@1.1.0:
3242
+
dependencies:
3243
+
es-errors: 1.3.0
3244
+
hasown: 2.0.2
3245
+
side-channel: 1.1.0
3246
+
3247
+
is-array-buffer@3.0.5:
3248
+
dependencies:
3249
+
call-bind: 1.0.8
3250
+
call-bound: 1.0.3
3251
+
get-intrinsic: 1.2.7
3252
+
3253
+
is-arrayish@0.2.1: {}
3254
+
3255
+
is-async-function@2.1.1:
3256
+
dependencies:
3257
+
async-function: 1.0.0
3258
+
call-bound: 1.0.3
3259
+
get-proto: 1.0.1
3260
+
has-tostringtag: 1.0.2
3261
+
safe-regex-test: 1.1.0
3262
+
3263
+
is-bigint@1.1.0:
3264
+
dependencies:
3265
+
has-bigints: 1.1.0
3266
+
3267
+
is-boolean-object@1.2.1:
3268
+
dependencies:
3269
+
call-bound: 1.0.3
3270
+
has-tostringtag: 1.0.2
3271
+
3272
+
is-callable@1.2.7: {}
3273
+
3274
+
is-core-module@2.16.1:
3275
+
dependencies:
3276
+
hasown: 2.0.2
3277
+
3278
+
is-data-view@1.0.2:
3279
+
dependencies:
3280
+
call-bound: 1.0.3
3281
+
get-intrinsic: 1.2.7
3282
+
is-typed-array: 1.1.15
3283
+
3284
+
is-date-object@1.1.0:
3285
+
dependencies:
3286
+
call-bound: 1.0.3
3287
+
has-tostringtag: 1.0.2
3288
+
3289
+
is-extglob@2.1.1: {}
3290
+
3291
+
is-finalizationregistry@1.1.1:
3292
+
dependencies:
3293
+
call-bound: 1.0.3
3294
+
3295
+
is-fullwidth-code-point@3.0.0: {}
3296
+
3297
+
is-fullwidth-code-point@4.0.0: {}
3298
+
3299
+
is-fullwidth-code-point@5.0.0:
3300
+
dependencies:
3301
+
get-east-asian-width: 1.3.0
3302
+
3303
+
is-generator-function@1.1.0:
3304
+
dependencies:
3305
+
call-bound: 1.0.3
3306
+
get-proto: 1.0.1
3307
+
has-tostringtag: 1.0.2
3308
+
safe-regex-test: 1.1.0
3309
+
3310
+
is-glob@4.0.3:
3311
+
dependencies:
3312
+
is-extglob: 2.1.1
3313
+
3314
+
is-map@2.0.3: {}
3315
+
3316
+
is-module@1.0.0: {}
3317
+
3318
+
is-number-object@1.1.1:
3319
+
dependencies:
3320
+
call-bound: 1.0.3
3321
+
has-tostringtag: 1.0.2
3322
+
3323
+
is-number@7.0.0: {}
3324
+
3325
+
is-reference@1.2.1:
3326
+
dependencies:
3327
+
'@types/estree': 1.0.6
3328
+
3329
+
is-regex@1.2.1:
3330
+
dependencies:
3331
+
call-bound: 1.0.3
3332
+
gopd: 1.2.0
3333
+
has-tostringtag: 1.0.2
3334
+
hasown: 2.0.2
3335
+
3336
+
is-set@2.0.3: {}
3337
+
3338
+
is-shared-array-buffer@1.0.4:
3339
+
dependencies:
3340
+
call-bound: 1.0.3
3341
+
3342
+
is-stream@3.0.0: {}
3343
+
3344
+
is-string@1.1.1:
3345
+
dependencies:
3346
+
call-bound: 1.0.3
3347
+
has-tostringtag: 1.0.2
3348
+
3349
+
is-subdir@1.2.0:
3350
+
dependencies:
3351
+
better-path-resolve: 1.0.0
3352
+
3353
+
is-symbol@1.1.1:
3354
+
dependencies:
3355
+
call-bound: 1.0.3
3356
+
has-symbols: 1.1.0
3357
+
safe-regex-test: 1.1.0
3358
+
3359
+
is-typed-array@1.1.15:
3360
+
dependencies:
3361
+
which-typed-array: 1.1.18
3362
+
3363
+
is-weakmap@2.0.2: {}
3364
+
3365
+
is-weakref@1.1.0:
3366
+
dependencies:
3367
+
call-bound: 1.0.3
3368
+
3369
+
is-weakset@2.0.4:
3370
+
dependencies:
3371
+
call-bound: 1.0.3
3372
+
get-intrinsic: 1.2.7
3373
+
3374
+
is-windows@1.0.2: {}
3375
+
3376
+
isarray@2.0.5: {}
3377
+
3378
+
isexe@2.0.0: {}
3379
+
3380
+
jackspeak@4.0.2:
3381
+
dependencies:
3382
+
'@isaacs/cliui': 8.0.2
3383
+
3384
+
js-tokens@4.0.0: {}
3385
+
3386
+
js-yaml@3.14.1:
3387
+
dependencies:
3388
+
argparse: 1.0.10
3389
+
esprima: 4.0.1
3390
+
3391
+
jsesc@3.1.0: {}
3392
+
3393
+
json-parse-better-errors@1.0.2: {}
3394
+
3395
+
json5@2.2.3: {}
3396
+
3397
+
jsonfile@4.0.0:
3398
+
optionalDependencies:
3399
+
graceful-fs: 4.2.11
3400
+
3401
+
lilconfig@3.1.3: {}
3402
+
3403
+
lint-staged@15.4.3:
3404
+
dependencies:
3405
+
chalk: 5.4.1
3406
+
commander: 13.1.0
3407
+
debug: 4.4.0
3408
+
execa: 8.0.1
3409
+
lilconfig: 3.1.3
3410
+
listr2: 8.2.5
3411
+
micromatch: 4.0.8
3412
+
pidtree: 0.6.0
3413
+
string-argv: 0.3.2
3414
+
yaml: 2.7.0
3415
+
transitivePeerDependencies:
3416
+
- supports-color
3417
+
3418
+
listr2@8.2.5:
3419
+
dependencies:
3420
+
cli-truncate: 4.0.0
3421
+
colorette: 2.0.20
3422
+
eventemitter3: 5.0.1
3423
+
log-update: 6.1.0
3424
+
rfdc: 1.4.1
3425
+
wrap-ansi: 9.0.0
3426
+
3427
+
load-json-file@4.0.0:
3428
+
dependencies:
3429
+
graceful-fs: 4.2.11
3430
+
parse-json: 4.0.0
3431
+
pify: 3.0.0
3432
+
strip-bom: 3.0.0
3433
+
3434
+
locate-path@5.0.0:
3435
+
dependencies:
3436
+
p-locate: 4.1.0
3437
+
3438
+
lodash.startcase@4.4.0: {}
3439
+
3440
+
log-update@6.1.0:
3441
+
dependencies:
3442
+
ansi-escapes: 7.0.0
3443
+
cli-cursor: 5.0.0
3444
+
slice-ansi: 7.1.0
3445
+
strip-ansi: 7.1.0
3446
+
wrap-ansi: 9.0.0
3447
+
3448
+
loupe@3.1.3: {}
3449
+
3450
+
lru-cache@11.0.2: {}
3451
+
3452
+
lru-cache@5.1.1:
3453
+
dependencies:
3454
+
yallist: 3.1.1
3455
+
3456
+
magic-string@0.30.17:
3457
+
dependencies:
3458
+
'@jridgewell/sourcemap-codec': 1.5.0
3459
+
3460
+
math-intrinsics@1.1.0: {}
3461
+
3462
+
memorystream@0.3.1: {}
3463
+
3464
+
merge-stream@2.0.0: {}
3465
+
3466
+
merge2@1.4.1: {}
3467
+
3468
+
micromatch@4.0.8:
3469
+
dependencies:
3470
+
braces: 3.0.3
3471
+
picomatch: 2.3.1
3472
+
3473
+
mime-db@1.52.0: {}
3474
+
3475
+
mime-types@2.1.35:
3476
+
dependencies:
3477
+
mime-db: 1.52.0
3478
+
3479
+
mimic-fn@4.0.0: {}
3480
+
3481
+
mimic-function@5.0.1: {}
3482
+
3483
+
minimatch@10.0.1:
3484
+
dependencies:
3485
+
brace-expansion: 2.0.1
3486
+
3487
+
minimatch@3.1.2:
3488
+
dependencies:
3489
+
brace-expansion: 1.1.11
3490
+
3491
+
minipass@7.1.2: {}
3492
+
3493
+
mri@1.2.0: {}
3494
+
3495
+
ms@2.1.3: {}
3496
+
3497
+
nanoid@3.3.8: {}
3498
+
3499
+
nice-try@1.0.5: {}
3500
+
3501
+
node-fetch@2.7.0:
3502
+
dependencies:
3503
+
whatwg-url: 5.0.0
3504
+
3505
+
node-releases@2.0.19: {}
3506
+
3507
+
normalize-package-data@2.5.0:
3508
+
dependencies:
3509
+
hosted-git-info: 2.8.9
3510
+
resolve: 1.22.10
3511
+
semver: 5.7.2
3512
+
validate-npm-package-license: 3.0.4
3513
+
3514
+
npm-run-all@4.1.5:
3515
+
dependencies:
3516
+
ansi-styles: 3.2.1
3517
+
chalk: 2.4.2
3518
+
cross-spawn: 6.0.6
3519
+
memorystream: 0.3.1
3520
+
minimatch: 3.1.2
3521
+
pidtree: 0.3.1
3522
+
read-pkg: 3.0.0
3523
+
shell-quote: 1.8.2
3524
+
string.prototype.padend: 3.1.6
3525
+
3526
+
npm-run-path@5.3.0:
3527
+
dependencies:
3528
+
path-key: 4.0.0
3529
+
3530
+
object-inspect@1.13.3: {}
3531
+
3532
+
object-keys@1.1.1: {}
3533
+
3534
+
object.assign@4.1.7:
3535
+
dependencies:
3536
+
call-bind: 1.0.8
3537
+
call-bound: 1.0.3
3538
+
define-properties: 1.2.1
3539
+
es-object-atoms: 1.1.1
3540
+
has-symbols: 1.1.0
3541
+
object-keys: 1.1.1
3542
+
3543
+
onetime@6.0.0:
3544
+
dependencies:
3545
+
mimic-fn: 4.0.0
3546
+
3547
+
onetime@7.0.0:
3548
+
dependencies:
3549
+
mimic-function: 5.0.1
3550
+
3551
+
os-tmpdir@1.0.2: {}
3552
+
3553
+
outdent@0.5.0: {}
3554
+
3555
+
own-keys@1.0.1:
3556
+
dependencies:
3557
+
get-intrinsic: 1.2.7
3558
+
object-keys: 1.1.1
3559
+
safe-push-apply: 1.0.0
3560
+
3561
+
p-filter@2.1.0:
3562
+
dependencies:
3563
+
p-map: 2.1.0
3564
+
3565
+
p-limit@2.3.0:
3566
+
dependencies:
3567
+
p-try: 2.2.0
3568
+
3569
+
p-locate@4.1.0:
3570
+
dependencies:
3571
+
p-limit: 2.3.0
3572
+
3573
+
p-map@2.1.0: {}
3574
+
3575
+
p-try@2.2.0: {}
3576
+
3577
+
package-json-from-dist@1.0.1: {}
3578
+
3579
+
package-manager-detector@0.2.9: {}
3580
+
3581
+
parse-json@4.0.0:
3582
+
dependencies:
3583
+
error-ex: 1.3.2
3584
+
json-parse-better-errors: 1.0.2
3585
+
3586
+
path-exists@4.0.0: {}
3587
+
3588
+
path-key@2.0.1: {}
3589
+
3590
+
path-key@3.1.1: {}
3591
+
3592
+
path-key@4.0.0: {}
3593
+
3594
+
path-parse@1.0.7: {}
3595
+
3596
+
path-scurry@2.0.0:
3597
+
dependencies:
3598
+
lru-cache: 11.0.2
3599
+
minipass: 7.1.2
3600
+
3601
+
path-type@3.0.0:
3602
+
dependencies:
3603
+
pify: 3.0.0
3604
+
3605
+
path-type@4.0.0: {}
3606
+
3607
+
pathe@2.0.2: {}
3608
+
3609
+
pathval@2.0.0: {}
3610
+
3611
+
picocolors@1.1.1: {}
3612
+
3613
+
picomatch@2.3.1: {}
3614
+
3615
+
picomatch@4.0.2: {}
3616
+
3617
+
pidtree@0.3.1: {}
3618
+
3619
+
pidtree@0.6.0: {}
3620
+
3621
+
pify@3.0.0: {}
3622
+
3623
+
pify@4.0.1: {}
3624
+
3625
+
possible-typed-array-names@1.0.0: {}
3626
+
3627
+
postcss@8.5.1:
3628
+
dependencies:
3629
+
nanoid: 3.3.8
3630
+
picocolors: 1.1.1
3631
+
source-map-js: 1.2.1
3632
+
3633
+
prettier@2.8.8: {}
3634
+
3635
+
prettier@3.4.2: {}
3636
+
3637
+
queue-microtask@1.2.3: {}
3638
+
3639
+
randombytes@2.1.0:
3640
+
dependencies:
3641
+
safe-buffer: 5.2.1
3642
+
3643
+
read-pkg@3.0.0:
3644
+
dependencies:
3645
+
load-json-file: 4.0.0
3646
+
normalize-package-data: 2.5.0
3647
+
path-type: 3.0.0
3648
+
3649
+
read-yaml-file@1.1.0:
3650
+
dependencies:
3651
+
graceful-fs: 4.2.11
3652
+
js-yaml: 3.14.1
3653
+
pify: 4.0.1
3654
+
strip-bom: 3.0.0
3655
+
3656
+
reflect.getprototypeof@1.0.10:
3657
+
dependencies:
3658
+
call-bind: 1.0.8
3659
+
define-properties: 1.2.1
3660
+
es-abstract: 1.23.9
3661
+
es-errors: 1.3.0
3662
+
es-object-atoms: 1.1.1
3663
+
get-intrinsic: 1.2.7
3664
+
get-proto: 1.0.1
3665
+
which-builtin-type: 1.2.1
3666
+
3667
+
regenerator-runtime@0.14.1: {}
3668
+
3669
+
regexp.prototype.flags@1.5.4:
3670
+
dependencies:
3671
+
call-bind: 1.0.8
3672
+
define-properties: 1.2.1
3673
+
es-errors: 1.3.0
3674
+
get-proto: 1.0.1
3675
+
gopd: 1.2.0
3676
+
set-function-name: 2.0.2
3677
+
3678
+
resolve-from@5.0.0: {}
3679
+
3680
+
resolve@1.22.10:
3681
+
dependencies:
3682
+
is-core-module: 2.16.1
3683
+
path-parse: 1.0.7
3684
+
supports-preserve-symlinks-flag: 1.0.0
3685
+
3686
+
restore-cursor@5.1.0:
3687
+
dependencies:
3688
+
onetime: 7.0.0
3689
+
signal-exit: 4.1.0
3690
+
3691
+
reusify@1.0.4: {}
3692
+
3693
+
rfdc@1.4.1: {}
3694
+
3695
+
rimraf@6.0.1:
3696
+
dependencies:
3697
+
glob: 11.0.1
3698
+
package-json-from-dist: 1.0.1
3699
+
3700
+
rollup-plugin-cjs-check@1.0.3(rollup@4.32.1):
3701
+
dependencies:
3702
+
'@rollup/pluginutils': 5.1.4(rollup@4.32.1)
3703
+
cjs-module-lexer: 1.4.2
3704
+
rollup: 4.32.1
3705
+
3706
+
rollup-plugin-dts@6.1.1(rollup@4.32.1)(typescript@5.7.3):
3707
+
dependencies:
3708
+
magic-string: 0.30.17
3709
+
rollup: 4.32.1
3710
+
typescript: 5.7.3
3711
+
optionalDependencies:
3712
+
'@babel/code-frame': 7.26.2
3713
+
3714
+
rollup@4.32.1:
3715
+
dependencies:
3716
+
'@types/estree': 1.0.6
3717
+
optionalDependencies:
3718
+
'@rollup/rollup-android-arm-eabi': 4.32.1
3719
+
'@rollup/rollup-android-arm64': 4.32.1
3720
+
'@rollup/rollup-darwin-arm64': 4.32.1
3721
+
'@rollup/rollup-darwin-x64': 4.32.1
3722
+
'@rollup/rollup-freebsd-arm64': 4.32.1
3723
+
'@rollup/rollup-freebsd-x64': 4.32.1
3724
+
'@rollup/rollup-linux-arm-gnueabihf': 4.32.1
3725
+
'@rollup/rollup-linux-arm-musleabihf': 4.32.1
3726
+
'@rollup/rollup-linux-arm64-gnu': 4.32.1
3727
+
'@rollup/rollup-linux-arm64-musl': 4.32.1
3728
+
'@rollup/rollup-linux-loongarch64-gnu': 4.32.1
3729
+
'@rollup/rollup-linux-powerpc64le-gnu': 4.32.1
3730
+
'@rollup/rollup-linux-riscv64-gnu': 4.32.1
3731
+
'@rollup/rollup-linux-s390x-gnu': 4.32.1
3732
+
'@rollup/rollup-linux-x64-gnu': 4.32.1
3733
+
'@rollup/rollup-linux-x64-musl': 4.32.1
3734
+
'@rollup/rollup-win32-arm64-msvc': 4.32.1
3735
+
'@rollup/rollup-win32-ia32-msvc': 4.32.1
3736
+
'@rollup/rollup-win32-x64-msvc': 4.32.1
3737
+
fsevents: 2.3.3
3738
+
3739
+
run-parallel@1.2.0:
3740
+
dependencies:
3741
+
queue-microtask: 1.2.3
3742
+
3743
+
safe-array-concat@1.1.3:
3744
+
dependencies:
3745
+
call-bind: 1.0.8
3746
+
call-bound: 1.0.3
3747
+
get-intrinsic: 1.2.7
3748
+
has-symbols: 1.1.0
3749
+
isarray: 2.0.5
3750
+
3751
+
safe-buffer@5.2.1: {}
3752
+
3753
+
safe-push-apply@1.0.0:
3754
+
dependencies:
3755
+
es-errors: 1.3.0
3756
+
isarray: 2.0.5
3757
+
3758
+
safe-regex-test@1.1.0:
3759
+
dependencies:
3760
+
call-bound: 1.0.3
3761
+
es-errors: 1.3.0
3762
+
is-regex: 1.2.1
3763
+
3764
+
safer-buffer@2.1.2: {}
3765
+
3766
+
semver@5.7.2: {}
3767
+
3768
+
semver@6.3.1: {}
3769
+
3770
+
semver@7.7.0: {}
3771
+
3772
+
serialize-javascript@6.0.2:
3773
+
dependencies:
3774
+
randombytes: 2.1.0
3775
+
3776
+
set-function-length@1.2.2:
3777
+
dependencies:
3778
+
define-data-property: 1.1.4
3779
+
es-errors: 1.3.0
3780
+
function-bind: 1.1.2
3781
+
get-intrinsic: 1.2.7
3782
+
gopd: 1.2.0
3783
+
has-property-descriptors: 1.0.2
3784
+
3785
+
set-function-name@2.0.2:
3786
+
dependencies:
3787
+
define-data-property: 1.1.4
3788
+
es-errors: 1.3.0
3789
+
functions-have-names: 1.2.3
3790
+
has-property-descriptors: 1.0.2
3791
+
3792
+
set-proto@1.0.0:
3793
+
dependencies:
3794
+
dunder-proto: 1.0.1
3795
+
es-errors: 1.3.0
3796
+
es-object-atoms: 1.1.1
3797
+
3798
+
shebang-command@1.2.0:
3799
+
dependencies:
3800
+
shebang-regex: 1.0.0
3801
+
3802
+
shebang-command@2.0.0:
3803
+
dependencies:
3804
+
shebang-regex: 3.0.0
3805
+
3806
+
shebang-regex@1.0.0: {}
3807
+
3808
+
shebang-regex@3.0.0: {}
3809
+
3810
+
shell-quote@1.8.2: {}
3811
+
3812
+
side-channel-list@1.0.0:
3813
+
dependencies:
3814
+
es-errors: 1.3.0
3815
+
object-inspect: 1.13.3
3816
+
3817
+
side-channel-map@1.0.1:
3818
+
dependencies:
3819
+
call-bound: 1.0.3
3820
+
es-errors: 1.3.0
3821
+
get-intrinsic: 1.2.7
3822
+
object-inspect: 1.13.3
3823
+
3824
+
side-channel-weakmap@1.0.2:
3825
+
dependencies:
3826
+
call-bound: 1.0.3
3827
+
es-errors: 1.3.0
3828
+
get-intrinsic: 1.2.7
3829
+
object-inspect: 1.13.3
3830
+
side-channel-map: 1.0.1
3831
+
3832
+
side-channel@1.1.0:
3833
+
dependencies:
3834
+
es-errors: 1.3.0
3835
+
object-inspect: 1.13.3
3836
+
side-channel-list: 1.0.0
3837
+
side-channel-map: 1.0.1
3838
+
side-channel-weakmap: 1.0.2
3839
+
3840
+
siginfo@2.0.0: {}
3841
+
3842
+
signal-exit@4.1.0: {}
3843
+
3844
+
slash@3.0.0: {}
3845
+
3846
+
slice-ansi@5.0.0:
3847
+
dependencies:
3848
+
ansi-styles: 6.2.1
3849
+
is-fullwidth-code-point: 4.0.0
3850
+
3851
+
slice-ansi@7.1.0:
3852
+
dependencies:
3853
+
ansi-styles: 6.2.1
3854
+
is-fullwidth-code-point: 5.0.0
3855
+
3856
+
smob@1.5.0: {}
3857
+
3858
+
source-map-js@1.2.1: {}
3859
+
3860
+
source-map-support@0.5.21:
3861
+
dependencies:
3862
+
buffer-from: 1.1.2
3863
+
source-map: 0.6.1
3864
+
3865
+
source-map@0.6.1: {}
3866
+
3867
+
spawndamnit@3.0.1:
3868
+
dependencies:
3869
+
cross-spawn: 7.0.6
3870
+
signal-exit: 4.1.0
3871
+
3872
+
spdx-correct@3.2.0:
3873
+
dependencies:
3874
+
spdx-expression-parse: 3.0.1
3875
+
spdx-license-ids: 3.0.21
3876
+
3877
+
spdx-exceptions@2.5.0: {}
3878
+
3879
+
spdx-expression-parse@3.0.1:
3880
+
dependencies:
3881
+
spdx-exceptions: 2.5.0
3882
+
spdx-license-ids: 3.0.21
3883
+
3884
+
spdx-license-ids@3.0.21: {}
3885
+
3886
+
sprintf-js@1.0.3: {}
3887
+
3888
+
stackback@0.0.2: {}
3889
+
3890
+
std-env@3.8.0: {}
3891
+
3892
+
streamsearch@0.1.2: {}
3893
+
3894
+
string-argv@0.3.2: {}
3895
+
3896
+
string-width@4.2.3:
3897
+
dependencies:
3898
+
emoji-regex: 8.0.0
3899
+
is-fullwidth-code-point: 3.0.0
3900
+
strip-ansi: 6.0.1
3901
+
3902
+
string-width@5.1.2:
3903
+
dependencies:
3904
+
eastasianwidth: 0.2.0
3905
+
emoji-regex: 9.2.2
3906
+
strip-ansi: 7.1.0
3907
+
3908
+
string-width@7.2.0:
3909
+
dependencies:
3910
+
emoji-regex: 10.4.0
3911
+
get-east-asian-width: 1.3.0
3912
+
strip-ansi: 7.1.0
3913
+
3914
+
string.prototype.padend@3.1.6:
3915
+
dependencies:
3916
+
call-bind: 1.0.8
3917
+
define-properties: 1.2.1
3918
+
es-abstract: 1.23.9
3919
+
es-object-atoms: 1.1.1
3920
+
3921
+
string.prototype.trim@1.2.10:
3922
+
dependencies:
3923
+
call-bind: 1.0.8
3924
+
call-bound: 1.0.3
3925
+
define-data-property: 1.1.4
3926
+
define-properties: 1.2.1
3927
+
es-abstract: 1.23.9
3928
+
es-object-atoms: 1.1.1
3929
+
has-property-descriptors: 1.0.2
3930
+
3931
+
string.prototype.trimend@1.0.9:
3932
+
dependencies:
3933
+
call-bind: 1.0.8
3934
+
call-bound: 1.0.3
3935
+
define-properties: 1.2.1
3936
+
es-object-atoms: 1.1.1
3937
+
3938
+
string.prototype.trimstart@1.0.8:
3939
+
dependencies:
3940
+
call-bind: 1.0.8
3941
+
define-properties: 1.2.1
3942
+
es-object-atoms: 1.1.1
3943
+
3944
+
strip-ansi@6.0.1:
3945
+
dependencies:
3946
+
ansi-regex: 5.0.1
3947
+
3948
+
strip-ansi@7.1.0:
3949
+
dependencies:
3950
+
ansi-regex: 6.1.0
3951
+
3952
+
strip-bom@3.0.0: {}
3953
+
3954
+
strip-final-newline@3.0.0: {}
3955
+
3956
+
supports-color@5.5.0:
3957
+
dependencies:
3958
+
has-flag: 3.0.0
3959
+
3960
+
supports-preserve-symlinks-flag@1.0.0: {}
3961
+
3962
+
term-size@2.2.1: {}
3963
+
3964
+
terser@5.37.0:
3965
+
dependencies:
3966
+
'@jridgewell/source-map': 0.3.6
3967
+
acorn: 8.14.0
3968
+
commander: 2.20.3
3969
+
source-map-support: 0.5.21
3970
+
3971
+
tinybench@2.9.0: {}
3972
+
3973
+
tinyexec@0.3.2: {}
3974
+
3975
+
tinypool@1.0.2: {}
3976
+
3977
+
tinyrainbow@2.0.0: {}
3978
+
3979
+
tinyspy@3.0.2: {}
3980
+
3981
+
tmp@0.0.33:
3982
+
dependencies:
3983
+
os-tmpdir: 1.0.2
3984
+
3985
+
to-regex-range@5.0.1:
3986
+
dependencies:
3987
+
is-number: 7.0.0
3988
+
3989
+
tr46@0.0.3: {}
3990
+
3991
+
typed-array-buffer@1.0.3:
3992
+
dependencies:
3993
+
call-bound: 1.0.3
3994
+
es-errors: 1.3.0
3995
+
is-typed-array: 1.1.15
3996
+
3997
+
typed-array-byte-length@1.0.3:
3998
+
dependencies:
3999
+
call-bind: 1.0.8
4000
+
for-each: 0.3.4
4001
+
gopd: 1.2.0
4002
+
has-proto: 1.2.0
4003
+
is-typed-array: 1.1.15
4004
+
4005
+
typed-array-byte-offset@1.0.4:
4006
+
dependencies:
4007
+
available-typed-arrays: 1.0.7
4008
+
call-bind: 1.0.8
4009
+
for-each: 0.3.4
4010
+
gopd: 1.2.0
4011
+
has-proto: 1.2.0
4012
+
is-typed-array: 1.1.15
4013
+
reflect.getprototypeof: 1.0.10
4014
+
4015
+
typed-array-length@1.0.7:
4016
+
dependencies:
4017
+
call-bind: 1.0.8
4018
+
for-each: 0.3.4
4019
+
gopd: 1.2.0
4020
+
is-typed-array: 1.1.15
4021
+
possible-typed-array-names: 1.0.0
4022
+
reflect.getprototypeof: 1.0.10
4023
+
4024
+
typescript@5.7.3: {}
4025
+
4026
+
unbox-primitive@1.1.0:
4027
+
dependencies:
4028
+
call-bound: 1.0.3
4029
+
has-bigints: 1.1.0
4030
+
has-symbols: 1.1.0
4031
+
which-boxed-primitive: 1.1.1
4032
+
4033
+
undici-types@6.20.0: {}
4034
+
4035
+
undici-types@7.3.0: {}
4036
+
4037
+
universalify@0.1.2: {}
4038
+
4039
+
update-browserslist-db@1.1.2(browserslist@4.24.4):
4040
+
dependencies:
4041
+
browserslist: 4.24.4
4042
+
escalade: 3.2.0
4043
+
picocolors: 1.1.1
4044
+
4045
+
validate-npm-package-license@3.0.4:
4046
+
dependencies:
4047
+
spdx-correct: 3.2.0
4048
+
spdx-expression-parse: 3.0.1
4049
+
4050
+
vite-node@3.0.4(@types/node@22.12.0)(terser@5.37.0)(yaml@2.7.0):
4051
+
dependencies:
4052
+
cac: 6.7.14
4053
+
debug: 4.4.0
4054
+
es-module-lexer: 1.6.0
4055
+
pathe: 2.0.2
4056
+
vite: 6.0.11(@types/node@22.12.0)(terser@5.37.0)(yaml@2.7.0)
4057
+
transitivePeerDependencies:
4058
+
- '@types/node'
4059
+
- jiti
4060
+
- less
4061
+
- lightningcss
4062
+
- sass
4063
+
- sass-embedded
4064
+
- stylus
4065
+
- sugarss
4066
+
- supports-color
4067
+
- terser
4068
+
- tsx
4069
+
- yaml
4070
+
4071
+
vite@6.0.11(@types/node@22.12.0)(terser@5.37.0)(yaml@2.7.0):
4072
+
dependencies:
4073
+
esbuild: 0.24.2
4074
+
postcss: 8.5.1
4075
+
rollup: 4.32.1
4076
+
optionalDependencies:
4077
+
'@types/node': 22.12.0
4078
+
fsevents: 2.3.3
4079
+
terser: 5.37.0
4080
+
yaml: 2.7.0
4081
+
4082
+
vitest@3.0.4(@types/node@22.12.0)(terser@5.37.0)(yaml@2.7.0):
4083
+
dependencies:
4084
+
'@vitest/expect': 3.0.4
4085
+
'@vitest/mocker': 3.0.4(vite@6.0.11(@types/node@22.12.0)(terser@5.37.0)(yaml@2.7.0))
4086
+
'@vitest/pretty-format': 3.0.4
4087
+
'@vitest/runner': 3.0.4
4088
+
'@vitest/snapshot': 3.0.4
4089
+
'@vitest/spy': 3.0.4
4090
+
'@vitest/utils': 3.0.4
4091
+
chai: 5.1.2
4092
+
debug: 4.4.0
4093
+
expect-type: 1.1.0
4094
+
magic-string: 0.30.17
4095
+
pathe: 2.0.2
4096
+
std-env: 3.8.0
4097
+
tinybench: 2.9.0
4098
+
tinyexec: 0.3.2
4099
+
tinypool: 1.0.2
4100
+
tinyrainbow: 2.0.0
4101
+
vite: 6.0.11(@types/node@22.12.0)(terser@5.37.0)(yaml@2.7.0)
4102
+
vite-node: 3.0.4(@types/node@22.12.0)(terser@5.37.0)(yaml@2.7.0)
4103
+
why-is-node-running: 2.3.0
4104
+
optionalDependencies:
4105
+
'@types/node': 22.12.0
4106
+
transitivePeerDependencies:
4107
+
- jiti
4108
+
- less
4109
+
- lightningcss
4110
+
- msw
4111
+
- sass
4112
+
- sass-embedded
4113
+
- stylus
4114
+
- sugarss
4115
+
- supports-color
4116
+
- terser
4117
+
- tsx
4118
+
- yaml
4119
+
4120
+
webidl-conversions@3.0.1: {}
4121
+
4122
+
whatwg-url@5.0.0:
4123
+
dependencies:
4124
+
tr46: 0.0.3
4125
+
webidl-conversions: 3.0.1
4126
+
4127
+
which-boxed-primitive@1.1.1:
4128
+
dependencies:
4129
+
is-bigint: 1.1.0
4130
+
is-boolean-object: 1.2.1
4131
+
is-number-object: 1.1.1
4132
+
is-string: 1.1.1
4133
+
is-symbol: 1.1.1
4134
+
4135
+
which-builtin-type@1.2.1:
4136
+
dependencies:
4137
+
call-bound: 1.0.3
4138
+
function.prototype.name: 1.1.8
4139
+
has-tostringtag: 1.0.2
4140
+
is-async-function: 2.1.1
4141
+
is-date-object: 1.1.0
4142
+
is-finalizationregistry: 1.1.1
4143
+
is-generator-function: 1.1.0
4144
+
is-regex: 1.2.1
4145
+
is-weakref: 1.1.0
4146
+
isarray: 2.0.5
4147
+
which-boxed-primitive: 1.1.1
4148
+
which-collection: 1.0.2
4149
+
which-typed-array: 1.1.18
4150
+
4151
+
which-collection@1.0.2:
4152
+
dependencies:
4153
+
is-map: 2.0.3
4154
+
is-set: 2.0.3
4155
+
is-weakmap: 2.0.2
4156
+
is-weakset: 2.0.4
4157
+
4158
+
which-typed-array@1.1.18:
4159
+
dependencies:
4160
+
available-typed-arrays: 1.0.7
4161
+
call-bind: 1.0.8
4162
+
call-bound: 1.0.3
4163
+
for-each: 0.3.4
4164
+
gopd: 1.2.0
4165
+
has-tostringtag: 1.0.2
4166
+
4167
+
which@1.3.1:
4168
+
dependencies:
4169
+
isexe: 2.0.0
4170
+
4171
+
which@2.0.2:
4172
+
dependencies:
4173
+
isexe: 2.0.0
4174
+
4175
+
why-is-node-running@2.3.0:
4176
+
dependencies:
4177
+
siginfo: 2.0.0
4178
+
stackback: 0.0.2
4179
+
4180
+
wrap-ansi@7.0.0:
4181
+
dependencies:
4182
+
ansi-styles: 4.3.0
4183
+
string-width: 4.2.3
4184
+
strip-ansi: 6.0.1
4185
+
4186
+
wrap-ansi@8.1.0:
4187
+
dependencies:
4188
+
ansi-styles: 6.2.1
4189
+
string-width: 5.1.2
4190
+
strip-ansi: 7.1.0
4191
+
4192
+
wrap-ansi@9.0.0:
4193
+
dependencies:
4194
+
ansi-styles: 6.2.1
4195
+
string-width: 7.2.0
4196
+
strip-ansi: 7.1.0
4197
+
4198
+
yallist@3.1.1: {}
4199
+
4200
+
yaml@2.7.0: {}
+125
scripts/changelog.js
+125
scripts/changelog.js
···
1
+
const { config } = require('dotenv');
2
+
const { getInfo } = require('@changesets/get-github-info');
3
+
4
+
config();
5
+
6
+
const REPO = 'kitten/fetch-nodeshim';
7
+
const SEE_LINE = /^See:\s*(.*)/i;
8
+
const TRAILING_CHAR = /[.;:]$/g;
9
+
const listFormatter = new Intl.ListFormat('en-US');
10
+
11
+
const getSummaryLines = cs => {
12
+
let lines = cs.summary.trim().split(/\r?\n/);
13
+
if (!lines.some(line => /```/.test(line))) {
14
+
lines = lines.map(l => l.trim()).filter(Boolean);
15
+
const size = lines.length;
16
+
if (size > 0) {
17
+
lines[size - 1] = lines[size - 1].replace(TRAILING_CHAR, '');
18
+
}
19
+
}
20
+
return lines;
21
+
};
22
+
23
+
/** Creates a "(See X)" string from a template */
24
+
const templateSeeRef = links => {
25
+
const humanReadableLinks = links.filter(Boolean).map(link => {
26
+
if (typeof link === 'string') return link;
27
+
return link.pull || link.commit;
28
+
});
29
+
30
+
const size = humanReadableLinks.length;
31
+
if (size === 0) return '';
32
+
33
+
const str = listFormatter.format(humanReadableLinks);
34
+
return `(See ${str})`;
35
+
};
36
+
37
+
const changelogFunctions = {
38
+
getDependencyReleaseLine: async (changesets, dependenciesUpdated) => {
39
+
if (dependenciesUpdated.length === 0) return '';
40
+
41
+
const dependenciesLinks = await Promise.all(
42
+
changesets.map(async cs => {
43
+
if (!cs.commit) return undefined;
44
+
45
+
const lines = getSummaryLines(cs);
46
+
const prLine = lines.find(line => SEE_LINE.test(line));
47
+
if (prLine) {
48
+
const match = prLine.match(SEE_LINE);
49
+
return (match && match[1].trim()) || undefined;
50
+
}
51
+
52
+
const { links } = await getInfo({
53
+
repo: REPO,
54
+
commit: cs.commit,
55
+
});
56
+
57
+
return links;
58
+
})
59
+
);
60
+
61
+
let changesetLink = '- Updated dependencies';
62
+
63
+
const seeRef = templateSeeRef(dependenciesLinks);
64
+
if (seeRef) changesetLink += ` ${seeRef}`;
65
+
66
+
const detailsLinks = dependenciesUpdated.map(dep => {
67
+
return ` - ${dep.name}@${dep.newVersion}`;
68
+
});
69
+
70
+
return [changesetLink, ...detailsLinks].join('\n');
71
+
},
72
+
getReleaseLine: async (changeset, type) => {
73
+
let pull, commit, user;
74
+
75
+
const lines = getSummaryLines(changeset);
76
+
const prLineIndex = lines.findIndex(line => SEE_LINE.test(line));
77
+
if (prLineIndex > -1) {
78
+
const match = lines[prLineIndex].match(SEE_LINE);
79
+
pull = (match && match[1].trim()) || undefined;
80
+
lines.splice(prLineIndex, 1);
81
+
}
82
+
83
+
const [firstLine, ...futureLines] = lines;
84
+
85
+
if (changeset.commit && !pull) {
86
+
const { links } = await getInfo({
87
+
repo: REPO,
88
+
commit: changeset.commit,
89
+
});
90
+
91
+
pull = links.pull || undefined;
92
+
commit = links.commit || undefined;
93
+
user = links.user || undefined;
94
+
}
95
+
96
+
let annotation = '';
97
+
if (type === 'patch' && /^\s*fix/i.test(firstLine)) {
98
+
annotation = '⚠️ ';
99
+
}
100
+
101
+
let str = `- ${annotation}${firstLine}`;
102
+
if (futureLines.length > 0) {
103
+
str += `\n${futureLines.map(l => ` ${l}`).join('\n')}`;
104
+
}
105
+
106
+
const endsWithParagraph = /(?<=(?:[!;?.]|```) *)$/g;
107
+
if (user && !endsWithParagraph) {
108
+
str += `, by ${user}`;
109
+
} else {
110
+
str += `\nSubmitted by ${user}`;
111
+
}
112
+
113
+
if (pull || commit) {
114
+
const seeRef = templateSeeRef([pull || commit]);
115
+
if (seeRef) str += ` ${seeRef}`;
116
+
}
117
+
118
+
return str;
119
+
},
120
+
};
121
+
122
+
module.exports = {
123
+
...changelogFunctions,
124
+
default: changelogFunctions,
125
+
};
+12
scripts/prepare.js
+12
scripts/prepare.js
···
1
+
const path = require('path');
2
+
const fs = require('fs');
3
+
4
+
const precommit = path.resolve(__dirname, '../.git/hooks/pre-commit');
5
+
6
+
const hook = `
7
+
#!/bin/sh
8
+
pnpm exec lint-staged --quiet --relative
9
+
`.trim();
10
+
11
+
fs.writeFileSync(precommit, hook);
12
+
fs.chmodSync(precommit, '755');
+300
scripts/rollup.config.mjs
+300
scripts/rollup.config.mjs
···
1
+
import fs from 'node:fs/promises';
2
+
import path from 'node:path/posix';
3
+
import { fileURLToPath } from 'node:url';
4
+
import { readFileSync } from 'node:fs';
5
+
import { createRequire, isBuiltin } from 'node:module';
6
+
7
+
import * as prettier from 'prettier';
8
+
import commonjs from '@rollup/plugin-commonjs';
9
+
import resolve from '@rollup/plugin-node-resolve';
10
+
import babel from '@rollup/plugin-babel';
11
+
import terser from '@rollup/plugin-terser';
12
+
import cjsCheck from 'rollup-plugin-cjs-check';
13
+
import dts from 'rollup-plugin-dts';
14
+
15
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
16
+
17
+
const normalize = name => []
18
+
.concat(name)
19
+
.join(' ')
20
+
.replace(/[@\s/.]+/g, ' ')
21
+
.trim()
22
+
.replace(/\s+/, '-')
23
+
.toLowerCase();
24
+
25
+
const extension = name => {
26
+
if (/\.d.ts$/.test(name)) {
27
+
return '.d.ts';
28
+
} else {
29
+
return path.extname(name);
30
+
}
31
+
};
32
+
33
+
const meta = JSON.parse(readFileSync('package.json'));
34
+
const name = normalize(meta.name);
35
+
36
+
const externalModules = [
37
+
...Object.keys(meta.dependencies || {}),
38
+
...Object.keys(meta.peerDependencies || {}),
39
+
];
40
+
41
+
const moduleRe = /^(?!node:|[.{1,2}\/])(@[\w.-]+\/)?[\w.-]+/;
42
+
const externalRe = new RegExp(`^(${externalModules.join('|')})($|/)`);
43
+
44
+
const exports = {};
45
+
for (const key in meta.exports) {
46
+
const entry = meta.exports[key];
47
+
if (typeof entry === 'object' && !!entry.source) {
48
+
const entryPath = normalize(key);
49
+
const entryName = normalize([name, entryPath]);
50
+
exports[entryName] = {
51
+
path: entryPath,
52
+
...entry,
53
+
};
54
+
}
55
+
}
56
+
57
+
const externals = new Set();
58
+
59
+
const commonConfig = {
60
+
input: Object.entries(exports).reduce((input, [exportName, entry]) => {
61
+
input[exportName] = entry.source;
62
+
return input;
63
+
}, {}),
64
+
onwarn: () => {},
65
+
external(id) {
66
+
const isExternal = isBuiltin(id) || (externalModules.length && externalRe.test(id));
67
+
if (!isExternal && moduleRe.test(id))
68
+
externals.add(id);
69
+
return isExternal;
70
+
},
71
+
treeshake: {
72
+
unknownGlobalSideEffects: false,
73
+
tryCatchDeoptimization: false,
74
+
moduleSideEffects: false,
75
+
},
76
+
};
77
+
78
+
const commonPlugins = [
79
+
resolve({
80
+
extensions: ['.mjs', '.js', '.ts'],
81
+
mainFields: ['module', 'jsnext', 'main'],
82
+
preferBuiltins: false,
83
+
browser: true,
84
+
}),
85
+
86
+
commonjs({
87
+
ignoreGlobal: true,
88
+
include: /\/node_modules\//,
89
+
}),
90
+
];
91
+
92
+
const commonOutput = {
93
+
dir: './',
94
+
exports: 'auto',
95
+
sourcemap: true,
96
+
sourcemapExcludeSources: false,
97
+
hoistTransitiveImports: false,
98
+
indent: false,
99
+
freeze: false,
100
+
strict: false,
101
+
generatedCode: {
102
+
preset: 'es5',
103
+
reservedNamesAsProps: false,
104
+
objectShorthand: false,
105
+
constBindings: false,
106
+
},
107
+
};
108
+
109
+
const outputPlugins = [
110
+
{
111
+
name: 'outputPackageJsons',
112
+
async writeBundle() {
113
+
for (const key in exports) {
114
+
const entry = exports[key];
115
+
if (entry.path) {
116
+
const output = path.relative(entry.path, process.cwd());
117
+
const json = JSON.stringify({
118
+
name: key,
119
+
private: true,
120
+
version: '0.0.0',
121
+
main: path.join(output, entry.require),
122
+
module: path.join(output, entry.import),
123
+
types: path.join(output, entry.types),
124
+
source: path.join(output, entry.source),
125
+
exports: {
126
+
'.': {
127
+
types: path.join(output, entry.types),
128
+
import: path.join(output, entry.import),
129
+
require: path.join(output, entry.require),
130
+
source: path.join(output, entry.source),
131
+
},
132
+
},
133
+
}, null, 2);
134
+
135
+
await fs.mkdir(entry.path, { recursive: true });
136
+
await fs.writeFile(path.join(entry.path, 'package.json'), json);
137
+
}
138
+
}
139
+
},
140
+
},
141
+
142
+
{
143
+
name: 'outputBundledLicenses',
144
+
async writeBundle() {
145
+
const require = createRequire(import.meta.url);
146
+
const rootLicense = path.join(__dirname, '../LICENSE.md');
147
+
const outputLicense = path.resolve('LICENSE.md');
148
+
if (rootLicense === outputLicense) return;
149
+
const licenses = new Map();
150
+
for (const packageName of [...externals].sort()) {
151
+
let license;
152
+
let metaPath;
153
+
let meta;
154
+
try {
155
+
metaPath = require.resolve(path.join(packageName, '/package.json'));
156
+
meta = require(metaPath);
157
+
} catch (_error) {
158
+
continue;
159
+
}
160
+
const packagePath = path.dirname(metaPath);
161
+
let licenseName = (await fs.readdir(packagePath).catch(() => []))
162
+
.find((name) => /^licen[sc]e/i.test(name));
163
+
if (!licenseName) {
164
+
const match = /^SEE LICENSE IN (.*)/i.exec(meta.license || '');
165
+
licenseName = match ? match[1] : meta.license;
166
+
}
167
+
try {
168
+
license = await fs.readFile(path.join(packagePath, licenseName), 'utf8');
169
+
} catch (_error) {
170
+
license = meta.author
171
+
? `${licenseName}, Copyright (c) ${meta.author.name || meta.author}`
172
+
: `${licenseName}, See license at: ${meta.repository.url || meta.repository}`;
173
+
}
174
+
licenses.set(packageName, license);
175
+
}
176
+
let output = (await fs.readFile(rootLicense, 'utf8')).trim();
177
+
for (const [packageName, licenseText] of licenses)
178
+
output += `\n\n## ${packageName}\n\n${licenseText.trim()}`;
179
+
await fs.writeFile(outputLicense, output);
180
+
},
181
+
},
182
+
183
+
cjsCheck(),
184
+
185
+
terser({
186
+
warnings: true,
187
+
ecma: 2015,
188
+
keep_fnames: true,
189
+
ie8: false,
190
+
compress: {
191
+
pure_getters: true,
192
+
toplevel: true,
193
+
booleans_as_integers: false,
194
+
keep_fnames: true,
195
+
keep_fargs: true,
196
+
if_return: false,
197
+
ie8: false,
198
+
sequences: false,
199
+
loops: false,
200
+
conditionals: false,
201
+
join_vars: false,
202
+
},
203
+
mangle: {
204
+
module: true,
205
+
keep_fnames: true,
206
+
},
207
+
output: {
208
+
beautify: true,
209
+
braces: true,
210
+
indent_level: 2,
211
+
},
212
+
}),
213
+
];
214
+
215
+
export default [
216
+
{
217
+
...commonConfig,
218
+
plugins: [
219
+
...commonPlugins,
220
+
babel({
221
+
babelrc: false,
222
+
babelHelpers: 'bundled',
223
+
extensions: ['mjs', 'js', 'jsx', 'ts', 'tsx'],
224
+
exclude: 'node_modules/**',
225
+
presets: [],
226
+
plugins: [
227
+
'@babel/plugin-transform-typescript',
228
+
'@babel/plugin-transform-block-scoping',
229
+
],
230
+
}),
231
+
],
232
+
output: [
233
+
{
234
+
...commonOutput,
235
+
format: 'esm',
236
+
chunkFileNames(chunk) {
237
+
return `dist/chunks/[name]-chunk${extension(chunk.name) || '.mjs'}`;
238
+
},
239
+
entryFileNames(chunk) {
240
+
return chunk.isEntry
241
+
? path.normalize(exports[chunk.name].import)
242
+
: `dist/[name].mjs`;
243
+
},
244
+
plugins: outputPlugins,
245
+
},
246
+
{
247
+
...commonOutput,
248
+
format: 'cjs',
249
+
esModule: true,
250
+
externalLiveBindings: true,
251
+
chunkFileNames(chunk) {
252
+
return `dist/chunks/[name]-chunk${extension(chunk.name) || '.js'}`;
253
+
},
254
+
entryFileNames(chunk) {
255
+
return chunk.isEntry
256
+
? path.normalize(exports[chunk.name].require)
257
+
: `dist/[name].js`;
258
+
},
259
+
plugins: outputPlugins,
260
+
},
261
+
],
262
+
},
263
+
264
+
{
265
+
...commonConfig,
266
+
plugins: [
267
+
...commonPlugins,
268
+
dts(),
269
+
],
270
+
output: {
271
+
...commonOutput,
272
+
sourcemap: false,
273
+
format: 'dts',
274
+
chunkFileNames(chunk) {
275
+
return `dist/chunks/[name]-chunk${extension(chunk.name) || '.d.ts'}`;
276
+
},
277
+
entryFileNames(chunk) {
278
+
return chunk.isEntry
279
+
? path.normalize(exports[chunk.name].types)
280
+
: `dist/[name].d.ts`;
281
+
},
282
+
plugins: [
283
+
{
284
+
renderChunk(code, chunk) {
285
+
if (chunk.fileName.endsWith('d.ts')) {
286
+
return prettier.format(code, {
287
+
filepath: chunk.fileName,
288
+
parser: 'typescript',
289
+
singleQuote: true,
290
+
tabWidth: 2,
291
+
printWidth: 100,
292
+
trailingComma: 'es5',
293
+
});
294
+
}
295
+
},
296
+
},
297
+
],
298
+
},
299
+
},
300
+
];
+1159
src/__tests__/fetch.test.ts
+1159
src/__tests__/fetch.test.ts
···
1
+
// Source: https://github.com/remix-run/web-std-io/blob/7a8596e/packages/fetch/test/main.js
2
+
3
+
import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';
4
+
5
+
import FormDataPolyfill from 'form-data';
6
+
import { ReadableStream } from 'node:stream/web';
7
+
import stream from 'node:stream';
8
+
import vm from 'node:vm';
9
+
10
+
import TestServer from './utils/server.js';
11
+
import { fetch } from '../fetch';
12
+
13
+
const { Uint8Array: VMUint8Array } = vm.runInNewContext('this');
14
+
15
+
async function streamToPromise<T>(
16
+
stream: ReadableStream<T>,
17
+
dataHandler: (data: T) => void
18
+
) {
19
+
for await (const chunk of stream) {
20
+
dataHandler(chunk);
21
+
}
22
+
}
23
+
24
+
async function collectStream<T>(stream: ReadableStream<T>): Promise<T[]> {
25
+
const chunks: T[] = [];
26
+
for await (const chunk of stream) chunks.push(chunk);
27
+
return chunks;
28
+
}
29
+
30
+
describe(fetch, () => {
31
+
const local = new TestServer();
32
+
let baseURL: string;
33
+
34
+
beforeEach(async () => {
35
+
await local.start();
36
+
baseURL = `http://${local.hostname}:${local.port}/`;
37
+
});
38
+
39
+
afterEach(async () => {
40
+
await local.stop();
41
+
});
42
+
43
+
it('should reject with error if url is protocol relative', async () => {
44
+
// [Type Error: Invalid URL]
45
+
await expect(() =>
46
+
fetch('//example.com/')
47
+
).rejects.toThrowErrorMatchingInlineSnapshot(`[TypeError: Invalid URL]`);
48
+
});
49
+
50
+
it('should reject with error if url is relative path', async () => {
51
+
// [Type Error: Invalid URL]
52
+
await expect(() =>
53
+
fetch('/some/path')
54
+
).rejects.toThrowErrorMatchingInlineSnapshot(`[TypeError: Invalid URL]`);
55
+
});
56
+
57
+
it('should reject with error if protocol is unsupported', async () => {
58
+
// URL scheme 'ftp' is not supported
59
+
await expect(
60
+
fetch('ftp://example.com/')
61
+
).rejects.toThrowErrorMatchingInlineSnapshot(
62
+
`[TypeError: URL scheme "ftp:" is not supported.]`
63
+
);
64
+
});
65
+
66
+
it('should reject with error on network failure', async () => {
67
+
await expect(() => fetch('http://localhost:50000/')).rejects.toThrow();
68
+
}, 1_000);
69
+
70
+
it('should resolve into response', async () => {
71
+
const response = await fetch(new URL('hello', baseURL));
72
+
expect(response.url).toBe(`${baseURL}hello`);
73
+
expect(response).toBeInstanceOf(Response);
74
+
expect(response).toMatchObject({
75
+
headers: expect.any(Headers),
76
+
body: expect.any(ReadableStream),
77
+
bodyUsed: false,
78
+
ok: true,
79
+
status: 200,
80
+
statusText: 'OK',
81
+
});
82
+
});
83
+
84
+
it('should support https request', async () => {
85
+
const response = await fetch('https://github.com/', { method: 'HEAD' });
86
+
expect(response.status).toBe(200);
87
+
}, 5000);
88
+
89
+
describe('response methods', () => {
90
+
it('should accept plain text response', async () => {
91
+
const response = await fetch(new URL('plain', baseURL));
92
+
expect(response.headers.get('content-type')).toBe('text/plain');
93
+
const text = await response.text();
94
+
expect(response.bodyUsed).toBe(true);
95
+
expect(text).toBe('text');
96
+
});
97
+
98
+
it('should accept html response (like plain text)', async () => {
99
+
const response = await fetch(new URL('html', baseURL));
100
+
expect(response.headers.get('content-type')).toBe('text/html');
101
+
const text = await response.text();
102
+
expect(response.bodyUsed).toBe(true);
103
+
expect(text).toBe('<html></html>');
104
+
});
105
+
106
+
it('should accept json response', async () => {
107
+
const response = await fetch(new URL('json', baseURL));
108
+
expect(response.headers.get('content-type')).toBe('application/json');
109
+
const text = await response.json();
110
+
expect(response.bodyUsed).toBe(true);
111
+
expect(text).toEqual({ name: 'value' });
112
+
});
113
+
});
114
+
115
+
describe('request headers', () => {
116
+
it('should send request with custom headers', async () => {
117
+
const response = await fetch(new URL('inspect', baseURL), {
118
+
headers: { 'x-custom-header': 'abc' },
119
+
});
120
+
expect(await response.json()).toMatchObject({
121
+
headers: expect.objectContaining({ 'x-custom-header': 'abc' }),
122
+
});
123
+
});
124
+
125
+
it('should prefer init headers when Request is passed', async () => {
126
+
const request = new Request(new URL('inspect', baseURL), {
127
+
headers: { 'x-custom-header': 'abc' },
128
+
});
129
+
const response = await fetch(request, {
130
+
headers: { 'x-custom-header': 'def' },
131
+
});
132
+
expect(await response.json()).toMatchObject({
133
+
headers: expect.objectContaining({ 'x-custom-header': 'def' }),
134
+
});
135
+
});
136
+
137
+
it('should send request with custom User-Agent', async () => {
138
+
const response = await fetch(new URL('inspect', baseURL), {
139
+
headers: { 'user-agent': 'faked' },
140
+
});
141
+
expect(await response.json()).toMatchObject({
142
+
headers: expect.objectContaining({ 'user-agent': 'faked' }),
143
+
});
144
+
});
145
+
146
+
it('should set default Accept header', async () => {
147
+
const response = await fetch(new URL('inspect', baseURL));
148
+
expect(await response.json()).toMatchObject({
149
+
headers: expect.objectContaining({ accept: '*/*' }),
150
+
});
151
+
});
152
+
153
+
it('should send custom Accept header', async () => {
154
+
const response = await fetch(new URL('inspect', baseURL), {
155
+
headers: { accept: 'application/json' },
156
+
});
157
+
expect(await response.json()).toMatchObject({
158
+
headers: expect.objectContaining({ accept: 'application/json' }),
159
+
});
160
+
});
161
+
162
+
it('should accept headers instance', async () => {
163
+
const response = await fetch(new URL('inspect', baseURL), {
164
+
headers: new Headers({ 'x-custom-header': 'abc' }),
165
+
});
166
+
expect(await response.json()).toMatchObject({
167
+
headers: expect.objectContaining({ 'x-custom-header': 'abc' }),
168
+
});
169
+
});
170
+
171
+
it('should accept custom "host" header', async () => {
172
+
const response = await fetch(new URL('inspect', baseURL), {
173
+
headers: { host: 'example.com' },
174
+
});
175
+
expect(await response.json()).toMatchObject({
176
+
headers: expect.objectContaining({ host: 'example.com' }),
177
+
});
178
+
});
179
+
180
+
it('should accept custom "HoSt" header', async () => {
181
+
const response = await fetch(new URL('inspect', baseURL), {
182
+
headers: { HoSt: 'example.com' },
183
+
});
184
+
expect(await response.json()).toMatchObject({
185
+
headers: expect.objectContaining({ host: 'example.com' }),
186
+
});
187
+
});
188
+
});
189
+
190
+
describe('redirects', () => {
191
+
it.each([[301], [302], [303], [307], [308]])(
192
+
'should follow redirect code %d',
193
+
async status => {
194
+
const response = await fetch(new URL(`redirect/${status}`, baseURL));
195
+
expect(response.headers.get('X-Inspect')).toBe('inspect');
196
+
}
197
+
);
198
+
199
+
it('should follow redirect chain', async () => {
200
+
const response = await fetch(new URL('redirect/chain', baseURL));
201
+
expect(response.headers.get('X-Inspect')).toBe('inspect');
202
+
});
203
+
204
+
it.each([
205
+
['POST', 301, 'GET'],
206
+
['PUT', 301, 'PUT'],
207
+
['POST', 302, 'GET'],
208
+
['PATCH', 302, 'PATCH'],
209
+
['PUT', 303, 'GET'],
210
+
['PATCH', 307, 'PATCH'],
211
+
])(
212
+
'should follow %s request redirect code %d with %s',
213
+
async (inputMethod, code, outputMethod) => {
214
+
const response = await fetch(new URL(`redirect/${code}`, baseURL), {
215
+
method: inputMethod,
216
+
body: 'a=1',
217
+
});
218
+
expect(response.headers.get('X-Inspect')).toBe('inspect');
219
+
expect(response.url).toBe(`${baseURL}inspect`);
220
+
expect(await response.json()).toMatchObject({
221
+
method: outputMethod,
222
+
body: outputMethod === 'GET' ? '' : 'a=1',
223
+
});
224
+
}
225
+
);
226
+
227
+
it('should not follow non-GET redirect if body is a readable stream', async () => {
228
+
await expect(() =>
229
+
fetch(new URL('redirect/307', baseURL), {
230
+
method: 'POST',
231
+
body: stream.Readable.from('tada'),
232
+
})
233
+
).rejects.toThrowErrorMatchingInlineSnapshot(
234
+
`[Error: Cannot follow redirect with a streamed body]`
235
+
);
236
+
});
237
+
238
+
it('should not follow non HTTP(s) redirect', async () => {
239
+
await expect(() =>
240
+
fetch(new URL('redirect/301/file', baseURL))
241
+
).rejects.toThrowErrorMatchingInlineSnapshot(
242
+
`[Error: URL scheme must be a HTTP(S) scheme]`
243
+
);
244
+
});
245
+
246
+
it('should support redirect mode, manual flag', async () => {
247
+
const response = await fetch(new URL('redirect/301', baseURL), {
248
+
redirect: 'manual',
249
+
});
250
+
expect(response.status).toBe(301);
251
+
expect(response.headers.get('location')).toBe(`${baseURL}inspect`);
252
+
});
253
+
254
+
it('should support redirect mode, manual flag, broken Location header', async () => {
255
+
const response = await fetch(new URL('redirect/bad-location', baseURL), {
256
+
redirect: 'manual',
257
+
});
258
+
expect(response.status).toBe(301);
259
+
expect(response.headers.get('location')).toBe(
260
+
`${baseURL}redirect/%C3%A2%C2%98%C2%83`
261
+
);
262
+
});
263
+
264
+
it('should support redirect mode, error flag', async () => {
265
+
await expect(() =>
266
+
fetch(new URL('redirect/301', baseURL), {
267
+
redirect: 'error',
268
+
})
269
+
).rejects.toThrowErrorMatchingInlineSnapshot(
270
+
`[Error: URI requested responds with a redirect, redirect mode is set to error]`
271
+
);
272
+
});
273
+
274
+
it('should support redirect mode, manual flag when there is no redirect', async () => {
275
+
const response = await fetch(new URL('hello', baseURL), {
276
+
redirect: 'manual',
277
+
});
278
+
expect(response.status).toBe(200);
279
+
expect(response.headers.has('location')).toBe(false);
280
+
});
281
+
282
+
it('should follow redirect code 301 and keep existing headers', async () => {
283
+
const response = await fetch(new URL('inspect', baseURL), {
284
+
headers: new Headers({ 'x-custom-header': 'abc' }),
285
+
});
286
+
expect(await response.json()).toMatchObject({
287
+
headers: expect.objectContaining({
288
+
'x-custom-header': 'abc',
289
+
}),
290
+
});
291
+
});
292
+
293
+
it.each([['follow'], ['manual']] as const)(
294
+
'should treat broken redirect as ordinary response (%s)',
295
+
async redirect => {
296
+
const response = await fetch(new URL('redirect/no-location', baseURL), {
297
+
redirect,
298
+
});
299
+
expect(response.status).toBe(301);
300
+
expect(response.headers.has('location')).toBe(false);
301
+
}
302
+
);
303
+
304
+
it('should throw a TypeError on an invalid redirect option', async () => {
305
+
await expect(() =>
306
+
fetch(new URL('redirect/no-location', baseURL), {
307
+
// @ts-ignore: Intentionally invalid
308
+
redirect: 'foobar',
309
+
})
310
+
).rejects.toThrowErrorMatchingInlineSnapshot(
311
+
`[TypeError: Request constructor: foobar is not an accepted type. Expected one of follow, manual, error.]`
312
+
);
313
+
});
314
+
315
+
it('should set redirected property on response when redirect', async () => {
316
+
const response = await fetch(new URL('redirect/301', baseURL));
317
+
expect(response.redirected).toBe(true);
318
+
});
319
+
320
+
it('should not set redirected property on response without redirect', async () => {
321
+
const response = await fetch(new URL('hello', baseURL));
322
+
expect(response.redirected).toBe(false);
323
+
});
324
+
325
+
it('should follow redirect after empty chunked transfer-encoding', async () => {
326
+
const response = await fetch(new URL('redirect/chunked', baseURL));
327
+
expect(response.status).toBe(200);
328
+
expect(response.ok).toBe(true);
329
+
});
330
+
});
331
+
332
+
describe('error handling', () => {
333
+
it('should handle client-error response', async () => {
334
+
const response = await fetch(new URL('error/400', baseURL));
335
+
expect(response.headers.get('content-type')).toBe('text/plain');
336
+
expect(response.status).toBe(400);
337
+
expect(response.statusText).toBe('Bad Request');
338
+
expect(response.ok).toBe(false);
339
+
expect(await response.text()).toBe('client error');
340
+
});
341
+
342
+
it('should handle server-error response', async () => {
343
+
const response = await fetch(new URL('error/500', baseURL));
344
+
expect(response.headers.get('content-type')).toBe('text/plain');
345
+
expect(response.status).toBe(500);
346
+
expect(response.statusText).toBe('Internal Server Error');
347
+
expect(response.ok).toBe(false);
348
+
expect(await response.text()).toBe('server error');
349
+
});
350
+
351
+
it('should handle network-error response', async () => {
352
+
await expect(() =>
353
+
fetch(new URL('error/reset', baseURL))
354
+
).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: socket hang up]`);
355
+
});
356
+
357
+
it('should handle premature close properly', async () => {
358
+
const response = await fetch(new URL('redirect/301/rn', baseURL));
359
+
expect(response.status).toBe(403);
360
+
});
361
+
362
+
it('should handle network-error partial response', async () => {
363
+
const response = await fetch(new URL('error/premature', baseURL));
364
+
expect(response.status).toBe(200);
365
+
expect(response.ok).toBe(true);
366
+
await expect(() =>
367
+
response.text()
368
+
).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: aborted]`);
369
+
});
370
+
371
+
it('should handle network-error in chunked response', async () => {
372
+
const response = await fetch(new URL('error/premature/chunked', baseURL));
373
+
expect(response.status).toBe(200);
374
+
expect(response.ok).toBe(true);
375
+
await expect(() =>
376
+
collectStream(response.body!)
377
+
).rejects.toMatchInlineSnapshot(`[Error: aborted]`);
378
+
});
379
+
380
+
it('should handle network-error in chunked response in consumeBody', async () => {
381
+
const response = await fetch(new URL('error/premature/chunked', baseURL));
382
+
expect(response.status).toBe(200);
383
+
expect(response.ok).toBe(true);
384
+
await expect(() =>
385
+
response.text()
386
+
).rejects.toThrowErrorMatchingInlineSnapshot(`[Error: aborted]`);
387
+
});
388
+
});
389
+
390
+
describe('responses', () => {
391
+
it('should handle chunked response with more than 1 chunk in the final packet', async () => {
392
+
const response = await fetch(new URL('chunked/multiple-ending', baseURL));
393
+
expect(response.ok).toBe(true);
394
+
expect(await response.text()).toBe('foobar');
395
+
});
396
+
397
+
it('should handle chunked response with final chunk and EOM in separate packets', async () => {
398
+
const response = await fetch(new URL('chunked/split-ending', baseURL));
399
+
expect(response.ok).toBe(true);
400
+
expect(await response.text()).toBe('foobar');
401
+
});
402
+
403
+
it('should reject invalid json response', async () => {
404
+
const response = await fetch(new URL('error/json', baseURL));
405
+
expect(response.headers.get('content-type')).toBe('application/json');
406
+
await expect(() => response.json()).rejects.toThrow(/Unexpected token/);
407
+
});
408
+
409
+
it('should reject decoding body twice', async () => {
410
+
const response = await fetch(new URL('plain', baseURL));
411
+
expect(response.headers.get('Content-Type')).toBe('text/plain');
412
+
await response.text();
413
+
expect(response.bodyUsed).toBe(true);
414
+
await expect(() => response.text()).rejects.toThrow(/Body is unusable/);
415
+
});
416
+
417
+
it('should handle response with no status text', async () => {
418
+
const response = await fetch(new URL('no-status-text', baseURL));
419
+
expect(response.statusText).toBe('');
420
+
});
421
+
422
+
it('should allow piping response body as stream', async () => {
423
+
const response = await fetch(new URL('hello', baseURL));
424
+
const onResult = vi.fn(data => {
425
+
expect(Buffer.from(data).toString()).toBe('world');
426
+
});
427
+
await streamToPromise(response.body!, onResult);
428
+
expect(onResult).toHaveBeenCalledOnce();
429
+
});
430
+
431
+
it('should allow cloning response body to two streams', async () => {
432
+
const response = await fetch(new URL('hello', baseURL));
433
+
const clone = response.clone();
434
+
const onResult = vi.fn(data => {
435
+
expect(Buffer.from(data).toString()).toBe('world');
436
+
});
437
+
await Promise.all([
438
+
streamToPromise(response.body!, onResult),
439
+
streamToPromise(clone.body!, onResult),
440
+
]);
441
+
expect(onResult).toHaveBeenCalledTimes(2);
442
+
});
443
+
444
+
describe('no content', () => {
445
+
it('should handle no content response', async () => {
446
+
const response = await fetch(new URL('no-content', baseURL));
447
+
expect(response.status).toBe(204);
448
+
expect(response.statusText).toBe('No Content');
449
+
expect(response.ok).toBe(true);
450
+
expect(await response.text()).toBe('');
451
+
});
452
+
453
+
it('should reject when trying to parse no content response as json', async () => {
454
+
const response = await fetch(new URL('no-content', baseURL));
455
+
expect(response.status).toBe(204);
456
+
expect(response.statusText).toBe('No Content');
457
+
expect(response.ok).toBe(true);
458
+
await expect(() =>
459
+
response.json()
460
+
).rejects.toThrowErrorMatchingInlineSnapshot(
461
+
`[SyntaxError: Unexpected end of JSON input]`
462
+
);
463
+
});
464
+
465
+
it('should handle no content response with gzip encoding', async () => {
466
+
const response = await fetch(new URL('no-content/gzip', baseURL));
467
+
expect(response.status).toBe(204);
468
+
expect(response.statusText).toBe('No Content');
469
+
expect(response.headers.get('Content-Encoding')).toBe('gzip');
470
+
expect(response.ok).toBe(true);
471
+
expect(await response.text()).toBe('');
472
+
});
473
+
474
+
it('should handle 304 response', async () => {
475
+
const response = await fetch(new URL('not-modified', baseURL));
476
+
expect(response.status).toBe(304);
477
+
expect(response.statusText).toBe('Not Modified');
478
+
expect(response.ok).toBe(false);
479
+
expect(await response.text()).toBe('');
480
+
});
481
+
482
+
it('should handle 304 response with gzip encoding', async () => {
483
+
const response = await fetch(new URL('not-modified/gzip', baseURL));
484
+
expect(response.status).toBe(304);
485
+
expect(response.statusText).toBe('Not Modified');
486
+
expect(response.headers.get('Content-Encoding')).toBe('gzip');
487
+
expect(response.ok).toBe(false);
488
+
expect(await response.text()).toBe('');
489
+
});
490
+
});
491
+
});
492
+
493
+
describe('content encoding', () => {
494
+
it('should decompress gzip response', async () => {
495
+
const response = await fetch(new URL('gzip', baseURL));
496
+
expect(response.headers.get('content-type')).toBe('text/plain');
497
+
expect(response.headers.get('content-encoding')).toBe('gzip');
498
+
expect(await response.text()).toBe('hello world');
499
+
});
500
+
501
+
it('should decompress slightly invalid gzip response', async () => {
502
+
const response = await fetch(new URL('gzip-truncated', baseURL));
503
+
expect(response.headers.get('content-type')).toBe('text/plain');
504
+
expect(response.headers.get('content-encoding')).toBe('gzip');
505
+
expect(await response.text()).toBe('hello world');
506
+
});
507
+
508
+
it('should make capitalised Content-Encoding lowercase', async () => {
509
+
const response = await fetch(new URL('gzip-capital', baseURL));
510
+
expect(response.headers.get('content-type')).toBe('text/plain');
511
+
expect(response.headers.get('content-encoding')).toBe('gzip');
512
+
expect(await response.text()).toBe('hello world');
513
+
});
514
+
515
+
it('should decompress deflate response', async () => {
516
+
const response = await fetch(new URL('deflate', baseURL));
517
+
expect(response.headers.get('content-type')).toBe('text/plain');
518
+
expect(response.headers.get('content-encoding')).toBe('deflate');
519
+
expect(await response.text()).toBe('hello world');
520
+
});
521
+
522
+
it('should decompress deflate raw response from old apache server', async () => {
523
+
const response = await fetch(new URL('deflate-raw', baseURL));
524
+
expect(response.headers.get('content-type')).toBe('text/plain');
525
+
expect(response.headers.get('content-encoding')).toBe('deflate');
526
+
expect(await response.text()).toBe('hello world');
527
+
});
528
+
529
+
it('should decompress brotli response', async () => {
530
+
const response = await fetch(new URL('brotli', baseURL));
531
+
expect(response.headers.get('content-type')).toBe('text/plain');
532
+
expect(response.headers.get('content-encoding')).toBe('br');
533
+
expect(await response.text()).toBe('hello world');
534
+
});
535
+
536
+
it('should skip decompression if unsupported', async () => {
537
+
const response = await fetch(new URL('sdch', baseURL));
538
+
expect(response.headers.get('content-type')).toBe('text/plain');
539
+
expect(response.headers.get('content-encoding')).toBe('sdch');
540
+
expect(await response.text()).toBe('fake sdch string');
541
+
});
542
+
543
+
it('should reject if response compression is invalid', async () => {
544
+
const response = await fetch(
545
+
new URL('invalid-content-encoding', baseURL)
546
+
);
547
+
expect(response.headers.get('content-type')).toBe('text/plain');
548
+
expect(response.headers.get('content-encoding')).toBe('gzip');
549
+
await expect(() =>
550
+
response.text()
551
+
).rejects.toThrowErrorMatchingInlineSnapshot(
552
+
`[Error: incorrect header check]`
553
+
);
554
+
});
555
+
556
+
it('should handle errors on invalid body stream even if it is not used', async () => {
557
+
const response = await fetch(
558
+
new URL('invalid-content-encoding', baseURL)
559
+
);
560
+
expect(response.headers.get('content-type')).toBe('text/plain');
561
+
expect(response.headers.get('content-encoding')).toBe('gzip');
562
+
await new Promise(resolve => setTimeout(resolve, 20));
563
+
});
564
+
565
+
it('should reject when invalid body stream is used later', async () => {
566
+
const response = await fetch(
567
+
new URL('invalid-content-encoding', baseURL)
568
+
);
569
+
expect(response.headers.get('content-type')).toBe('text/plain');
570
+
expect(response.headers.get('content-encoding')).toBe('gzip');
571
+
await new Promise(resolve => setTimeout(resolve, 20));
572
+
await expect(() =>
573
+
response.text()
574
+
).rejects.toThrowErrorMatchingInlineSnapshot(
575
+
`[Error: incorrect header check]`
576
+
);
577
+
});
578
+
});
579
+
580
+
describe('AbortController', () => {
581
+
let controller: AbortController;
582
+
583
+
beforeEach(() => {
584
+
controller = new AbortController();
585
+
});
586
+
587
+
it('should support request cancellation with signal', async () => {
588
+
const response$ = fetch(new URL('timeout', baseURL), {
589
+
method: 'POST',
590
+
signal: controller.signal,
591
+
headers: {
592
+
'Content-Type': 'application/json',
593
+
body: JSON.stringify({ hello: 'world' }),
594
+
},
595
+
});
596
+
setTimeout(() => controller.abort(), 100);
597
+
await expect(response$).rejects.toThrowErrorMatchingInlineSnapshot(
598
+
`[AbortError: The operation was aborted]`
599
+
);
600
+
});
601
+
602
+
it('should support multiple request cancellation with signal', async () => {
603
+
const fetches = [
604
+
fetch(new URL('timeout', baseURL), { signal: controller.signal }),
605
+
fetch(new URL('timeout', baseURL), {
606
+
method: 'POST',
607
+
signal: controller.signal,
608
+
headers: {
609
+
'Content-Type': 'application/json',
610
+
body: JSON.stringify({ hello: 'world' }),
611
+
},
612
+
}),
613
+
];
614
+
setTimeout(() => controller.abort(), 100);
615
+
await expect(fetches[0]).rejects.toThrowErrorMatchingInlineSnapshot(
616
+
`[AbortError: The operation was aborted]`
617
+
);
618
+
await expect(fetches[1]).rejects.toThrowErrorMatchingInlineSnapshot(
619
+
`[AbortError: The operation was aborted]`
620
+
);
621
+
});
622
+
623
+
it('should reject immediately if signal has already been aborted', async () => {
624
+
controller.abort();
625
+
await expect(() => {
626
+
return fetch(new URL('timeout', baseURL), {
627
+
signal: controller.signal,
628
+
});
629
+
}).rejects.toThrowErrorMatchingInlineSnapshot(
630
+
`[AbortError: The operation was aborted]`
631
+
);
632
+
});
633
+
634
+
it('should allow redirects to be aborted', async () => {
635
+
const request = new Request(new URL('redirect/slow', baseURL), {
636
+
signal: controller.signal,
637
+
});
638
+
setTimeout(() => controller.abort(), 20);
639
+
await expect(() =>
640
+
fetch(request)
641
+
).rejects.toThrowErrorMatchingInlineSnapshot(
642
+
`[AbortError: The operation was aborted]`
643
+
);
644
+
});
645
+
646
+
it('should allow redirected response body to be aborted', async () => {
647
+
const response = await fetch(new URL('redirect/slow-stream', baseURL), {
648
+
signal: controller.signal,
649
+
});
650
+
expect(response.headers.get('content-type')).toBe('text/plain');
651
+
const text$ = response.text();
652
+
controller.abort();
653
+
await expect(text$).rejects.toThrowErrorMatchingInlineSnapshot(
654
+
`[AbortError: This operation was aborted]`
655
+
);
656
+
});
657
+
658
+
it('should reject response body when aborted before stream completes', async () => {
659
+
const response = await fetch(new URL('slow', baseURL), {
660
+
signal: controller.signal,
661
+
});
662
+
const text$ = response.text();
663
+
controller.abort();
664
+
await expect(text$).rejects.toThrowErrorMatchingInlineSnapshot(
665
+
`[AbortError: This operation was aborted]`
666
+
);
667
+
});
668
+
669
+
it('should reject response body methods immediately with AbortError when aborted before stream is disturbed', async () => {
670
+
const response$ = fetch(new URL('slow', baseURL), {
671
+
signal: controller.signal,
672
+
});
673
+
controller.abort();
674
+
await expect(response$).rejects.toThrowErrorMatchingInlineSnapshot(
675
+
`[AbortError: The operation was aborted]`
676
+
);
677
+
});
678
+
679
+
it('should emit error event to response body with an AbortError when aborted before underlying stream is closed', async () => {
680
+
const response = await fetch(new URL('slow', baseURL), {
681
+
signal: controller.signal,
682
+
});
683
+
const done$ = expect(() =>
684
+
response.arrayBuffer()
685
+
).rejects.toThrowErrorMatchingInlineSnapshot(
686
+
`[AbortError: This operation was aborted]`
687
+
);
688
+
controller.abort();
689
+
await done$;
690
+
});
691
+
692
+
it('should cancel request body of type Stream with AbortError when aborted', async () => {
693
+
const body = new stream.Readable({ objectMode: true });
694
+
body._read = () => {};
695
+
const response$ = fetch(new URL('slow', baseURL), {
696
+
signal: controller.signal,
697
+
method: 'POST',
698
+
body,
699
+
});
700
+
const bodyError$ = new Promise(resolve => {
701
+
body.on('error', error => {
702
+
expect(error).toMatchInlineSnapshot(
703
+
`[AbortError: The operation was aborted]`
704
+
);
705
+
resolve(null);
706
+
});
707
+
});
708
+
controller.abort();
709
+
await bodyError$;
710
+
await expect(response$).rejects.toMatchInlineSnapshot(
711
+
`[AbortError: The operation was aborted]`
712
+
);
713
+
});
714
+
715
+
it('should throw a TypeError if a signal is not of type AbortSignal or EventTarget', async () => {
716
+
const url = new URL('inspect', baseURL);
717
+
await Promise.all([
718
+
expect(() =>
719
+
fetch(url, { signal: {} as any })
720
+
).rejects.toThrowErrorMatchingInlineSnapshot(
721
+
`[TypeError: The "signal" argument must be an instance of AbortSignal. Received an instance of Object]`
722
+
),
723
+
expect(() =>
724
+
fetch(url, { signal: Object.create(null) as any })
725
+
).rejects.toThrowErrorMatchingInlineSnapshot(
726
+
`[TypeError: The "signal" argument must be an instance of AbortSignal. Received [Object: null prototype] {}]`
727
+
),
728
+
]);
729
+
});
730
+
731
+
it('should gracefully handle a nullish signal', async () => {
732
+
const url = new URL('inspect', baseURL);
733
+
await Promise.all([
734
+
expect(fetch(url, { signal: null })).resolves.toMatchObject({
735
+
ok: true,
736
+
}),
737
+
expect(fetch(url, { signal: undefined })).resolves.toMatchObject({
738
+
ok: true,
739
+
}),
740
+
]);
741
+
});
742
+
});
743
+
744
+
describe('request body', () => {
745
+
it('should allow POST request with empty body', async () => {
746
+
const response = await fetch(new URL('inspect', baseURL), {
747
+
method: 'POST',
748
+
});
749
+
const inspect = await response.json();
750
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
751
+
expect(inspect).not.toHaveProperty('headers.content-type');
752
+
expect(inspect).toMatchObject({
753
+
method: 'POST',
754
+
headers: {
755
+
'content-length': '0',
756
+
},
757
+
});
758
+
});
759
+
760
+
it('should allow POST request with string body', async () => {
761
+
const response = await fetch(new URL('inspect', baseURL), {
762
+
method: 'POST',
763
+
body: 'a=1',
764
+
});
765
+
const inspect = await response.json();
766
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
767
+
expect(inspect).toMatchObject({
768
+
method: 'POST',
769
+
body: 'a=1',
770
+
headers: {
771
+
'content-type': 'text/plain;charset=UTF-8',
772
+
'content-length': '3',
773
+
},
774
+
});
775
+
});
776
+
777
+
it('should allow POST request with Buffer body', async () => {
778
+
const response = await fetch(new URL('inspect', baseURL), {
779
+
method: 'POST',
780
+
body: Buffer.from('a=1', 'utf8'),
781
+
});
782
+
const inspect = await response.json();
783
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
784
+
expect(inspect).not.toHaveProperty('headers.content-type');
785
+
expect(inspect).toMatchObject({
786
+
method: 'POST',
787
+
body: 'a=1',
788
+
headers: {
789
+
'content-length': '3',
790
+
},
791
+
});
792
+
});
793
+
794
+
it('should allow POST request with ArrayBuffer body', async () => {
795
+
const response = await fetch(new URL('inspect', baseURL), {
796
+
method: 'POST',
797
+
body: new TextEncoder().encode('Hello, world!\n').buffer,
798
+
});
799
+
const inspect = await response.json();
800
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
801
+
expect(inspect).not.toHaveProperty('headers.content-type');
802
+
expect(inspect).toMatchObject({
803
+
method: 'POST',
804
+
body: 'Hello, world!\n',
805
+
headers: {
806
+
'content-length': '14',
807
+
},
808
+
});
809
+
});
810
+
811
+
it('should allow POST request with ArrayBuffer body from a VM context', async () => {
812
+
const response = await fetch(new URL('inspect', baseURL), {
813
+
method: 'POST',
814
+
body: new VMUint8Array(Buffer.from('Hello, world!\n')).buffer,
815
+
});
816
+
const inspect = await response.json();
817
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
818
+
expect(inspect).not.toHaveProperty('headers.content-type');
819
+
expect(inspect).toMatchObject({
820
+
method: 'POST',
821
+
body: 'Hello, world!\n',
822
+
headers: {
823
+
'content-length': '14',
824
+
},
825
+
});
826
+
});
827
+
828
+
it('should allow POST request with ArrayBufferView (Uint8Array) body', async () => {
829
+
const response = await fetch(new URL('inspect', baseURL), {
830
+
method: 'POST',
831
+
body: new TextEncoder().encode('Hello, world!\n'),
832
+
});
833
+
const inspect = await response.json();
834
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
835
+
expect(inspect).not.toHaveProperty('headers.content-type');
836
+
expect(inspect).toMatchObject({
837
+
method: 'POST',
838
+
body: 'Hello, world!\n',
839
+
headers: {
840
+
'content-length': '14',
841
+
},
842
+
});
843
+
});
844
+
845
+
it('should allow POST request with ArrayBufferView (DataView) body', async () => {
846
+
const response = await fetch(new URL('inspect', baseURL), {
847
+
method: 'POST',
848
+
body: new DataView(new TextEncoder().encode('Hello, world!\n').buffer),
849
+
});
850
+
const inspect = await response.json();
851
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
852
+
expect(inspect).not.toHaveProperty('headers.content-type');
853
+
expect(inspect).toMatchObject({
854
+
method: 'POST',
855
+
body: 'Hello, world!\n',
856
+
headers: {
857
+
'content-length': '14',
858
+
},
859
+
});
860
+
});
861
+
862
+
it('should allow POST request with ArrayBufferView (Uint8Array) body from a VM context', async () => {
863
+
const response = await fetch(new URL('inspect', baseURL), {
864
+
method: 'POST',
865
+
body: new VMUint8Array(new TextEncoder().encode('Hello, world!\n')),
866
+
});
867
+
const inspect = await response.json();
868
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
869
+
expect(inspect).not.toHaveProperty('headers.content-type');
870
+
expect(inspect).toMatchObject({
871
+
method: 'POST',
872
+
body: 'Hello, world!\n',
873
+
headers: {
874
+
'content-length': '14',
875
+
},
876
+
});
877
+
});
878
+
879
+
it('should allow POST request with ArrayBufferView (Uint8Array, offset, length) body', async () => {
880
+
const response = await fetch(new URL('inspect', baseURL), {
881
+
method: 'POST',
882
+
body: new TextEncoder().encode('Hello, world!\n').subarray(7, 13),
883
+
});
884
+
const inspect = await response.json();
885
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
886
+
expect(inspect).not.toHaveProperty('headers.content-type');
887
+
expect(inspect).toMatchObject({
888
+
method: 'POST',
889
+
body: 'world!',
890
+
headers: {
891
+
'content-length': '6',
892
+
},
893
+
});
894
+
});
895
+
896
+
it('should allow POST request with blob body without type', async () => {
897
+
const response = await fetch(new URL('inspect', baseURL), {
898
+
method: 'POST',
899
+
body: new Blob(['a=1']),
900
+
});
901
+
const inspect = await response.json();
902
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
903
+
expect(inspect).not.toHaveProperty('headers.content-type');
904
+
expect(inspect).toMatchObject({
905
+
method: 'POST',
906
+
body: 'a=1',
907
+
headers: {
908
+
'content-length': '3',
909
+
},
910
+
});
911
+
});
912
+
913
+
it('should allow POST request with blob body with type', async () => {
914
+
const response = await fetch(new URL('inspect', baseURL), {
915
+
method: 'POST',
916
+
body: new Blob(['a=1'], {
917
+
type: 'text/plain;charset=utf-8',
918
+
}),
919
+
});
920
+
const inspect = await response.json();
921
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
922
+
expect(inspect).toMatchObject({
923
+
method: 'POST',
924
+
body: 'a=1',
925
+
headers: {
926
+
'content-type': 'text/plain;charset=utf-8',
927
+
'content-length': '3',
928
+
},
929
+
});
930
+
});
931
+
932
+
it('should preserve blob body on roundtrip', async () => {
933
+
const body = new Blob(['a=1']);
934
+
let response = await fetch(new URL('inspect', baseURL), {
935
+
method: 'POST',
936
+
body,
937
+
});
938
+
expect(await response.json()).toMatchObject({ body: 'a=1' });
939
+
response = await fetch(new URL('inspect', baseURL), {
940
+
method: 'POST',
941
+
body: new Blob(['a=1']),
942
+
});
943
+
expect(await response.json()).toMatchObject({ body: 'a=1' });
944
+
});
945
+
946
+
it('should allow POST request with readable stream as body', async () => {
947
+
const response = await fetch(new URL('inspect', baseURL), {
948
+
method: 'POST',
949
+
body: stream.Readable.from('a=1'),
950
+
});
951
+
const inspect = await response.json();
952
+
expect(inspect).not.toHaveProperty('headers.content-type');
953
+
expect(inspect).not.toHaveProperty('headers.content-length');
954
+
expect(inspect).toMatchObject({
955
+
method: 'POST',
956
+
body: 'a=1',
957
+
headers: {
958
+
'transfer-encoding': 'chunked',
959
+
},
960
+
});
961
+
});
962
+
963
+
it('should allow POST request with FormData as body', async () => {
964
+
const form = new FormData();
965
+
form.append('a', '1');
966
+
967
+
const response = await fetch(new URL('multipart', baseURL), {
968
+
method: 'POST',
969
+
body: form,
970
+
});
971
+
const inspect = await response.json();
972
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
973
+
expect(inspect).toMatchObject({
974
+
method: 'POST',
975
+
body: 'a=1',
976
+
headers: {
977
+
'content-type': expect.stringMatching(
978
+
/^multipart\/form-data; boundary=/
979
+
),
980
+
'content-length': '109',
981
+
},
982
+
});
983
+
});
984
+
985
+
it('should allow POST request with form-data using stream as body', async () => {
986
+
const form = new FormDataPolyfill();
987
+
form.append('my_field', stream.Readable.from('dummy'));
988
+
989
+
const response = await fetch(new URL('multipart', baseURL), {
990
+
method: 'POST',
991
+
body: form,
992
+
});
993
+
const inspect = await response.json();
994
+
expect(inspect).not.toHaveProperty('headers.content-length');
995
+
expect(inspect).toMatchObject({
996
+
method: 'POST',
997
+
body: 'my_field=undefined',
998
+
headers: {
999
+
'transfer-encoding': 'chunked',
1000
+
'content-type': expect.stringMatching(
1001
+
/^multipart\/form-data; boundary=/
1002
+
),
1003
+
},
1004
+
});
1005
+
});
1006
+
1007
+
it('should allow POST request with URLSearchParams as body', async () => {
1008
+
const params = new URLSearchParams();
1009
+
params.set('key1', 'value1');
1010
+
params.set('key2', 'value2');
1011
+
1012
+
const response = await fetch(new URL('multipart', baseURL), {
1013
+
method: 'POST',
1014
+
body: params,
1015
+
});
1016
+
const inspect = await response.json();
1017
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
1018
+
expect(inspect).toMatchObject({
1019
+
method: 'POST',
1020
+
body: 'key1=value1key2=value2',
1021
+
headers: {
1022
+
'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
1023
+
'content-length': '23',
1024
+
},
1025
+
});
1026
+
});
1027
+
1028
+
it('should allow POST request with extended URLSearchParams as body', async () => {
1029
+
class CustomSearchParameters extends URLSearchParams {}
1030
+
const params = new CustomSearchParameters();
1031
+
params.set('key1', 'value1');
1032
+
params.set('key2', 'value2');
1033
+
1034
+
const response = await fetch(new URL('multipart', baseURL), {
1035
+
method: 'POST',
1036
+
body: params,
1037
+
});
1038
+
const inspect = await response.json();
1039
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
1040
+
expect(inspect).toMatchObject({
1041
+
method: 'POST',
1042
+
body: 'key1=value1key2=value2',
1043
+
headers: {
1044
+
'content-type': 'application/x-www-form-urlencoded;charset=UTF-8',
1045
+
'content-length': '23',
1046
+
},
1047
+
});
1048
+
});
1049
+
1050
+
it('should allow POST request with invalid body', async () => {
1051
+
const response = await fetch(new URL('inspect', baseURL), {
1052
+
method: 'POST',
1053
+
body: { a: 1 } as any,
1054
+
});
1055
+
const inspect = await response.json();
1056
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
1057
+
expect(inspect).toMatchObject({
1058
+
method: 'POST',
1059
+
body: '[object Object]',
1060
+
headers: {
1061
+
'content-type': 'text/plain;charset=UTF-8',
1062
+
'content-length': expect.any(String),
1063
+
},
1064
+
});
1065
+
});
1066
+
1067
+
it('should overwrite Content-Length if possible', async () => {
1068
+
const response = await fetch(new URL('inspect', baseURL), {
1069
+
method: 'POST',
1070
+
body: new Blob(['a=1']),
1071
+
headers: {
1072
+
'Content-Length': '1000',
1073
+
},
1074
+
});
1075
+
const inspect = await response.json();
1076
+
expect(inspect).not.toHaveProperty('headers.transfer-encoding');
1077
+
expect(inspect).not.toHaveProperty('headers.content-type');
1078
+
expect(inspect).toMatchObject({
1079
+
method: 'POST',
1080
+
body: 'a=1',
1081
+
headers: {
1082
+
'content-length': '3',
1083
+
},
1084
+
});
1085
+
});
1086
+
1087
+
it.each([['PUT'], ['DELETE'], ['PATCH']])(
1088
+
'should allow %s request',
1089
+
async method => {
1090
+
const response = await fetch(new URL('inspect', baseURL), {
1091
+
method,
1092
+
body: 'a=1',
1093
+
});
1094
+
const inspect = await response.json();
1095
+
expect(inspect).toMatchObject({
1096
+
method,
1097
+
body: 'a=1',
1098
+
});
1099
+
}
1100
+
);
1101
+
1102
+
it('should allow HEAD requests', async () => {
1103
+
const response = await fetch(new URL('inspect', baseURL), {
1104
+
method: 'HEAD',
1105
+
});
1106
+
expect(response.status).toBe(200);
1107
+
expect(await response.text()).toBe('');
1108
+
});
1109
+
1110
+
it('should allow HEAD requests with Content-Encoding header', async () => {
1111
+
const response = await fetch(new URL('error/404', baseURL), {
1112
+
method: 'HEAD',
1113
+
});
1114
+
expect(response.status).toBe(404);
1115
+
expect(response.headers.get('Content-Encoding')).toBe('gzip');
1116
+
expect(await response.text()).toBe('');
1117
+
});
1118
+
1119
+
it('should allow OPTIONS request', async () => {
1120
+
const response = await fetch(new URL('options', baseURL), {
1121
+
method: 'OPTIONS',
1122
+
});
1123
+
expect(response.status).toBe(200);
1124
+
expect(response.headers.get('Allow')).toBe('GET, HEAD, OPTIONS');
1125
+
expect(await response.text()).toBe('hello world');
1126
+
});
1127
+
1128
+
it('should support fetch with Request instance', async () => {
1129
+
const request = new Request(new URL('hello', baseURL));
1130
+
const response = await fetch(request);
1131
+
expect(response.url).toBe(request.url);
1132
+
expect(response.ok).toBe(true);
1133
+
expect(response.status).toBe(200);
1134
+
});
1135
+
});
1136
+
1137
+
describe('request URL', () => {
1138
+
it('should keep `?` sign in URL when no params are given', async () => {
1139
+
const response = await fetch(new URL('question?', baseURL));
1140
+
expect(response.url).toBe(`${baseURL}question?`);
1141
+
});
1142
+
1143
+
it('if params are given, do not modify anything', async () => {
1144
+
const response = await fetch(new URL('question?a=1', baseURL));
1145
+
expect(response.url).toBe(`${baseURL}question?a=1`);
1146
+
});
1147
+
1148
+
it('should preserve the hash (#) symbol', async () => {
1149
+
const response = await fetch(new URL('question?#', baseURL));
1150
+
expect(response.url).toBe(`${baseURL}question?#`);
1151
+
});
1152
+
1153
+
it('should encode URLs as UTF-8', async () => {
1154
+
const url = new URL('möbius', baseURL);
1155
+
const res = await fetch(url);
1156
+
expect(res.url).to.equal(`${baseURL}m%C3%B6bius`);
1157
+
});
1158
+
});
1159
+
});
+480
src/__tests__/utils/server.js
+480
src/__tests__/utils/server.js
···
1
+
// See: https://github.com/remix-run/web-std-io/blob/7a8596e/packages/fetch/test/utils/server.js
2
+
3
+
import http from 'http';
4
+
import zlib from 'zlib';
5
+
import Busboy from 'busboy';
6
+
import {once} from 'events';
7
+
8
+
export default class TestServer {
9
+
constructor() {
10
+
this.server = http.createServer(this.router);
11
+
// Node 8 default keepalive timeout is 5000ms
12
+
// make it shorter here as we want to close server quickly at the end of tests
13
+
this.server.keepAliveTimeout = 1000;
14
+
this.server.on('error', err => {
15
+
console.log(err.stack);
16
+
});
17
+
this.server.on('connection', socket => {
18
+
socket.setTimeout(1500);
19
+
});
20
+
}
21
+
22
+
async start() {
23
+
this.server.listen(0, 'localhost');
24
+
return once(this.server, 'listening');
25
+
}
26
+
27
+
async stop() {
28
+
this.server.close();
29
+
return once(this.server, 'close');
30
+
}
31
+
32
+
get port() {
33
+
return this.server.address().port;
34
+
}
35
+
36
+
get hostname() {
37
+
return 'localhost';
38
+
}
39
+
40
+
mockResponse(responseHandler) {
41
+
this.server.nextResponseHandler = responseHandler;
42
+
return `http://${this.hostname}:${this.port}/mocked`;
43
+
}
44
+
45
+
router(request, res) {
46
+
const p = request.url;
47
+
48
+
if (p === '/mocked') {
49
+
if (this.nextResponseHandler) {
50
+
this.nextResponseHandler(res);
51
+
this.nextResponseHandler = undefined;
52
+
} else {
53
+
throw new Error('No mocked response. Use ’TestServer.mockResponse()’.');
54
+
}
55
+
}
56
+
57
+
if (p === '/hello') {
58
+
res.statusCode = 200;
59
+
res.setHeader('Content-Type', 'text/plain');
60
+
res.end('world');
61
+
}
62
+
63
+
if (p.includes('question')) {
64
+
res.statusCode = 200;
65
+
res.setHeader('Content-Type', 'text/plain');
66
+
res.end('ok');
67
+
}
68
+
69
+
if (p === '/plain') {
70
+
res.statusCode = 200;
71
+
res.setHeader('Content-Type', 'text/plain');
72
+
res.end('text');
73
+
}
74
+
75
+
if (p === '/no-status-text') {
76
+
res.writeHead(200, '', {}).end();
77
+
}
78
+
79
+
if (p === '/options') {
80
+
res.statusCode = 200;
81
+
res.setHeader('Allow', 'GET, HEAD, OPTIONS');
82
+
res.end('hello world');
83
+
}
84
+
85
+
if (p === '/html') {
86
+
res.statusCode = 200;
87
+
res.setHeader('Content-Type', 'text/html');
88
+
res.end('<html></html>');
89
+
}
90
+
91
+
if (p === '/json') {
92
+
res.statusCode = 200;
93
+
res.setHeader('Content-Type', 'application/json');
94
+
res.end(JSON.stringify({
95
+
name: 'value'
96
+
}));
97
+
}
98
+
99
+
if (p === '/gzip') {
100
+
res.statusCode = 200;
101
+
res.setHeader('Content-Type', 'text/plain');
102
+
res.setHeader('Content-Encoding', 'gzip');
103
+
zlib.gzip('hello world', (err, buffer) => {
104
+
if (err) {
105
+
throw err;
106
+
}
107
+
108
+
res.end(buffer);
109
+
});
110
+
}
111
+
112
+
if (p === '/gzip-truncated') {
113
+
res.statusCode = 200;
114
+
res.setHeader('Content-Type', 'text/plain');
115
+
res.setHeader('Content-Encoding', 'gzip');
116
+
zlib.gzip('hello world', (err, buffer) => {
117
+
if (err) {
118
+
throw err;
119
+
}
120
+
121
+
// Truncate the CRC checksum and size check at the end of the stream
122
+
res.end(buffer.slice(0, -8));
123
+
});
124
+
}
125
+
126
+
if (p === '/gzip-capital') {
127
+
res.statusCode = 200;
128
+
res.setHeader('Content-Type', 'text/plain');
129
+
res.setHeader('Content-Encoding', 'GZip');
130
+
zlib.gzip('hello world', (err, buffer) => {
131
+
if (err) {
132
+
throw err;
133
+
}
134
+
135
+
res.end(buffer);
136
+
});
137
+
}
138
+
139
+
if (p === '/deflate') {
140
+
res.statusCode = 200;
141
+
res.setHeader('Content-Type', 'text/plain');
142
+
res.setHeader('Content-Encoding', 'deflate');
143
+
zlib.deflate('hello world', (err, buffer) => {
144
+
if (err) {
145
+
throw err;
146
+
}
147
+
148
+
res.end(buffer);
149
+
});
150
+
}
151
+
152
+
if (p === '/brotli') {
153
+
res.statusCode = 200;
154
+
res.setHeader('Content-Type', 'text/plain');
155
+
if (typeof zlib.createBrotliDecompress === 'function') {
156
+
res.setHeader('Content-Encoding', 'br');
157
+
zlib.brotliCompress('hello world', (err, buffer) => {
158
+
if (err) {
159
+
throw err;
160
+
}
161
+
162
+
res.end(buffer);
163
+
});
164
+
}
165
+
}
166
+
167
+
if (p === '/deflate-raw') {
168
+
res.statusCode = 200;
169
+
res.setHeader('Content-Type', 'text/plain');
170
+
res.setHeader('Content-Encoding', 'deflate');
171
+
zlib.deflateRaw('hello world', (err, buffer) => {
172
+
if (err) {
173
+
throw err;
174
+
}
175
+
176
+
res.end(buffer);
177
+
});
178
+
}
179
+
180
+
if (p === '/sdch') {
181
+
res.statusCode = 200;
182
+
res.setHeader('Content-Type', 'text/plain');
183
+
res.setHeader('Content-Encoding', 'sdch');
184
+
res.end('fake sdch string');
185
+
}
186
+
187
+
if (p === '/invalid-content-encoding') {
188
+
res.statusCode = 200;
189
+
res.setHeader('Content-Type', 'text/plain');
190
+
res.setHeader('Content-Encoding', 'gzip');
191
+
res.end('fake gzip string');
192
+
}
193
+
194
+
if (p === '/timeout') {
195
+
setTimeout(() => {
196
+
res.statusCode = 200;
197
+
res.setHeader('Content-Type', 'text/plain');
198
+
res.end('text');
199
+
}, 1000);
200
+
}
201
+
202
+
if (p === '/slow') {
203
+
res.statusCode = 200;
204
+
res.setHeader('Content-Type', 'text/plain');
205
+
res.write('test');
206
+
setTimeout(() => {
207
+
res.end('test');
208
+
}, 1000);
209
+
}
210
+
211
+
if (p === '/cookie') {
212
+
res.statusCode = 200;
213
+
res.setHeader('Set-Cookie', ['a=1', 'b=1']);
214
+
res.end('cookie');
215
+
}
216
+
217
+
if (p === '/size/chunk') {
218
+
res.statusCode = 200;
219
+
res.setHeader('Content-Type', 'text/plain');
220
+
setTimeout(() => {
221
+
res.write('test');
222
+
}, 10);
223
+
setTimeout(() => {
224
+
res.end('test');
225
+
}, 20);
226
+
}
227
+
228
+
if (p === '/size/long') {
229
+
res.statusCode = 200;
230
+
res.setHeader('Content-Type', 'text/plain');
231
+
res.end('testtest');
232
+
}
233
+
234
+
if (p === '/redirect/301') {
235
+
res.statusCode = 301;
236
+
res.setHeader('Location', '/inspect');
237
+
res.end();
238
+
}
239
+
240
+
if (p === '/redirect/301/file') {
241
+
res.statusCode = 301;
242
+
res.setHeader('Location', 'file://inspect');
243
+
res.end();
244
+
}
245
+
246
+
if (p === '/redirect/301/rn') {
247
+
res.statusCode = 301
248
+
res.setHeader('Location', '/403')
249
+
res.write('301 Permanently moved.\r\n');
250
+
res.end();
251
+
}
252
+
253
+
if (p === '/403') {
254
+
res.statusCode = 403;
255
+
res.write('403 Forbidden');
256
+
res.end();
257
+
}
258
+
259
+
if (p === '/redirect/302') {
260
+
res.statusCode = 302;
261
+
res.setHeader('Location', '/inspect');
262
+
res.end();
263
+
}
264
+
265
+
if (p === '/redirect/303') {
266
+
res.statusCode = 303;
267
+
res.setHeader('Location', '/inspect');
268
+
res.end();
269
+
}
270
+
271
+
if (p === '/redirect/307') {
272
+
res.statusCode = 307;
273
+
res.setHeader('Location', '/inspect');
274
+
res.end();
275
+
}
276
+
277
+
if (p === '/redirect/308') {
278
+
res.statusCode = 308;
279
+
res.setHeader('Location', '/inspect');
280
+
res.end();
281
+
}
282
+
283
+
if (p === '/redirect/chain') {
284
+
res.statusCode = 301;
285
+
res.setHeader('Location', '/redirect/301');
286
+
res.end();
287
+
}
288
+
289
+
if (p === '/redirect/no-location') {
290
+
res.statusCode = 301;
291
+
res.end();
292
+
}
293
+
294
+
if (p === '/redirect/slow') {
295
+
res.statusCode = 301;
296
+
res.setHeader('Location', '/redirect/301');
297
+
setTimeout(() => {
298
+
res.end();
299
+
}, 1000);
300
+
}
301
+
302
+
if (p === '/redirect/slow-chain') {
303
+
res.statusCode = 301;
304
+
res.setHeader('Location', '/redirect/slow');
305
+
setTimeout(() => {
306
+
res.end();
307
+
}, 10);
308
+
}
309
+
310
+
if (p === '/redirect/slow-stream') {
311
+
res.statusCode = 301;
312
+
res.setHeader('Location', '/slow');
313
+
res.end();
314
+
}
315
+
316
+
if (p === '/redirect/bad-location') {
317
+
res.socket.write('HTTP/1.1 301\r\nLocation: ☃\r\nContent-Length: 0\r\n');
318
+
res.socket.end('\r\n');
319
+
}
320
+
321
+
if (p === '/redirect/chunked') {
322
+
res.writeHead(301, {
323
+
Location: '/inspect',
324
+
'Transfer-Encoding': 'chunked'
325
+
});
326
+
setTimeout(() => res.end(), 10);
327
+
}
328
+
329
+
if (p === '/error/400') {
330
+
res.statusCode = 400;
331
+
res.setHeader('Content-Type', 'text/plain');
332
+
res.end('client error');
333
+
}
334
+
335
+
if (p === '/error/404') {
336
+
res.statusCode = 404;
337
+
res.setHeader('Content-Encoding', 'gzip');
338
+
res.end();
339
+
}
340
+
341
+
if (p === '/error/500') {
342
+
res.statusCode = 500;
343
+
res.setHeader('Content-Type', 'text/plain');
344
+
res.end('server error');
345
+
}
346
+
347
+
if (p === '/error/reset') {
348
+
res.destroy();
349
+
}
350
+
351
+
if (p === '/error/premature') {
352
+
res.writeHead(200, {'content-length': 50});
353
+
res.write('foo');
354
+
setTimeout(() => {
355
+
res.destroy();
356
+
}, 100);
357
+
}
358
+
359
+
if (p === '/error/premature/chunked') {
360
+
res.writeHead(200, {
361
+
'Content-Type': 'application/json',
362
+
'Transfer-Encoding': 'chunked'
363
+
});
364
+
365
+
res.write(`${JSON.stringify({data: 'hi'})}\n`);
366
+
367
+
setTimeout(() => {
368
+
res.write(`${JSON.stringify({data: 'bye'})}\n`);
369
+
}, 50);
370
+
371
+
setTimeout(() => {
372
+
res.destroy();
373
+
}, 100);
374
+
}
375
+
376
+
if (p === '/chunked/split-ending') {
377
+
res.socket.write('HTTP/1.1 200\r\nTransfer-Encoding: chunked\r\n\r\n');
378
+
res.socket.write('3\r\nfoo\r\n3\r\nbar\r\n');
379
+
380
+
setTimeout(() => {
381
+
res.socket.write('0\r\n');
382
+
}, 10);
383
+
384
+
setTimeout(() => {
385
+
res.socket.end('\r\n');
386
+
}, 20);
387
+
}
388
+
389
+
if (p === '/chunked/multiple-ending') {
390
+
res.socket.write('HTTP/1.1 200\r\nTransfer-Encoding: chunked\r\n\r\n');
391
+
res.socket.write('3\r\nfoo\r\n3\r\nbar\r\n0\r\n\r\n');
392
+
res.end();
393
+
}
394
+
395
+
if (p === '/error/json') {
396
+
res.statusCode = 200;
397
+
res.setHeader('Content-Type', 'application/json');
398
+
res.end('invalid json');
399
+
}
400
+
401
+
if (p === '/no-content') {
402
+
res.statusCode = 204;
403
+
res.end();
404
+
}
405
+
406
+
if (p === '/no-content/gzip') {
407
+
res.statusCode = 204;
408
+
res.setHeader('Content-Encoding', 'gzip');
409
+
res.end();
410
+
}
411
+
412
+
if (p === '/no-content/brotli') {
413
+
res.statusCode = 204;
414
+
res.setHeader('Content-Encoding', 'br');
415
+
res.end();
416
+
}
417
+
418
+
if (p === '/not-modified') {
419
+
res.statusCode = 304;
420
+
res.end();
421
+
}
422
+
423
+
if (p === '/not-modified/gzip') {
424
+
res.statusCode = 304;
425
+
res.setHeader('Content-Encoding', 'gzip');
426
+
res.end();
427
+
}
428
+
429
+
if (p === '/inspect') {
430
+
res.statusCode = 200;
431
+
res.setHeader('Content-Type', 'application/json');
432
+
res.setHeader('X-Inspect', 'inspect');
433
+
let body = '';
434
+
request.on('data', c => {
435
+
body += c;
436
+
});
437
+
request.on('end', () => {
438
+
res.end(JSON.stringify({
439
+
inspect: true,
440
+
method: request.method,
441
+
url: request.url,
442
+
headers: request.headers,
443
+
body
444
+
}));
445
+
});
446
+
}
447
+
448
+
if (p === '/multipart') {
449
+
res.statusCode = 200;
450
+
res.setHeader('Content-Type', 'application/json');
451
+
const busboy = new Busboy({headers: request.headers});
452
+
let body = '';
453
+
busboy.on('file', async (fieldName, file, fileName) => {
454
+
body += `${fieldName}=${fileName}`;
455
+
// consume file data
456
+
// eslint-disable-next-line no-empty, no-unused-vars
457
+
for await (const c of file) { }
458
+
});
459
+
460
+
busboy.on('field', (fieldName, value) => {
461
+
body += `${fieldName}=${value}`;
462
+
});
463
+
busboy.on('finish', () => {
464
+
res.end(JSON.stringify({
465
+
method: request.method,
466
+
url: request.url,
467
+
headers: request.headers,
468
+
body
469
+
}));
470
+
});
471
+
request.pipe(busboy);
472
+
}
473
+
474
+
if (p === '/m%C3%B6bius') {
475
+
res.statusCode = 200;
476
+
res.setHeader('Content-Type', 'text/plain');
477
+
res.end('ok');
478
+
}
479
+
}
480
+
}
+197
src/body.ts
+197
src/body.ts
···
1
+
import { Readable } from 'node:stream';
2
+
import { isAnyArrayBuffer } from 'node:util/types';
3
+
import { randomBytes } from 'node:crypto';
4
+
5
+
export type BodyInit =
6
+
| Exclude<RequestInit['body'], undefined | null>
7
+
| FormDataPolyfill
8
+
| Readable;
9
+
10
+
export interface BodyState {
11
+
contentLength: number | null;
12
+
contentType: string | null;
13
+
body: Readable | ReadableStream | Uint8Array | null;
14
+
}
15
+
16
+
interface FormDataPolyfill extends Readable {
17
+
getBoundary(): string;
18
+
getLengthSync(): number;
19
+
hasKnownLength(): number;
20
+
}
21
+
22
+
const CRLF = '\r\n';
23
+
const CRLF_LENGTH = 2;
24
+
const BOUNDARY = '-'.repeat(2);
25
+
26
+
const isReadable = (object: any): object is Readable =>
27
+
Readable.isReadable(object);
28
+
29
+
const isIterable = (
30
+
object: any
31
+
): object is AsyncIterable<any> | Iterable<any> =>
32
+
typeof object[Symbol.asyncIterator] === 'function' ||
33
+
typeof object[Symbol.iterator] === 'function';
34
+
35
+
const isMultipartFormDataStream = (object: any): object is FormDataPolyfill =>
36
+
typeof object.getBoundary === 'function' &&
37
+
typeof object.hasKnownLength === 'function' &&
38
+
typeof object.getLengthSync === 'function' &&
39
+
Readable.isReadable(object);
40
+
41
+
const isFormData = (object: any): object is FormData =>
42
+
typeof object === 'object' &&
43
+
typeof object.append === 'function' &&
44
+
typeof object.set === 'function' &&
45
+
typeof object.get === 'function' &&
46
+
typeof object.getAll === 'function' &&
47
+
typeof object.delete === 'function' &&
48
+
typeof object.keys === 'function' &&
49
+
typeof object.values === 'function' &&
50
+
typeof object.entries === 'function' &&
51
+
typeof object.constructor === 'function' &&
52
+
object[Symbol.toStringTag] === 'FormData';
53
+
54
+
const isURLSearchParameters = (object: any): object is URLSearchParams =>
55
+
typeof object === 'object' &&
56
+
typeof object.append === 'function' &&
57
+
typeof object.delete === 'function' &&
58
+
typeof object.get === 'function' &&
59
+
typeof object.getAll === 'function' &&
60
+
typeof object.has === 'function' &&
61
+
typeof object.set === 'function' &&
62
+
typeof object.sort === 'function' &&
63
+
object[Symbol.toStringTag] === 'URLSearchParams';
64
+
65
+
const isReadableStream = (object: any): object is ReadableStream =>
66
+
typeof object === 'object' &&
67
+
typeof object.getReader === 'function' &&
68
+
typeof object.cancel === 'function' &&
69
+
typeof object.tee === 'function';
70
+
71
+
const isBlob = (object: any): object is Blob => {
72
+
if (
73
+
typeof object === 'object' &&
74
+
typeof object.arrayBuffer === 'function' &&
75
+
typeof object.type === 'string' &&
76
+
typeof object.stream === 'function' &&
77
+
typeof object.constructor === 'function'
78
+
) {
79
+
const tag = object[Symbol.toStringTag];
80
+
return tag.startsWith('Blob') || tag.startsWith('File');
81
+
} else {
82
+
return false;
83
+
}
84
+
};
85
+
86
+
const makeFormBoundary = (): string =>
87
+
`formdata-${randomBytes(8).toString('hex')}`;
88
+
89
+
const getFormHeader = (
90
+
boundary: string,
91
+
name: string,
92
+
field: File | Blob | string
93
+
): string => {
94
+
let header = `${BOUNDARY}${boundary}${CRLF}`;
95
+
header += `Content-Disposition: form-data; name="${name}"`;
96
+
if (isBlob(field)) {
97
+
header += `; filename="${(field as File).name ?? 'blob'}"${CRLF}`;
98
+
header += `Content-Type: ${field.type || 'application/octet-stream'}`;
99
+
}
100
+
return `${header}${CRLF}${CRLF}`;
101
+
};
102
+
103
+
const getFormFooter = (boundary: string) =>
104
+
`${BOUNDARY}${boundary}${BOUNDARY}${CRLF}${CRLF}`;
105
+
106
+
export const getFormDataLength = (form: FormData, boundary: string) => {
107
+
let length = Buffer.byteLength(getFormFooter(boundary));
108
+
for (const [name, value] of form)
109
+
length +=
110
+
Buffer.byteLength(getFormHeader(boundary, name, value)) +
111
+
(isBlob(value) ? value.size : Buffer.byteLength(`${value}`)) +
112
+
CRLF_LENGTH;
113
+
return length;
114
+
};
115
+
116
+
async function* generatorOfFormData(
117
+
form: FormData,
118
+
boundary: string
119
+
): AsyncGenerator<ArrayBufferLike> {
120
+
const encoder = new TextEncoder();
121
+
for (const [name, value] of form) {
122
+
if (isBlob(value)) {
123
+
yield encoder.encode(getFormHeader(boundary, name, value));
124
+
yield* value.stream();
125
+
yield encoder.encode(CRLF);
126
+
} else {
127
+
yield encoder.encode(getFormHeader(boundary, name, value) + value + CRLF);
128
+
}
129
+
}
130
+
yield encoder.encode(getFormFooter(boundary));
131
+
}
132
+
133
+
const encoder = new TextEncoder();
134
+
135
+
export const extractBody = (object: BodyInit | null): BodyState => {
136
+
let type: string | null = null;
137
+
let body: Readable | ReadableStream | Uint8Array | null;
138
+
let size: number | null = null;
139
+
if (object == null) {
140
+
body = null;
141
+
size = 0;
142
+
} else if (typeof object === 'string') {
143
+
const bytes = encoder.encode(`${object}`);
144
+
type = 'text/plain;charset=UTF-8';
145
+
size = bytes.byteLength;
146
+
body = bytes;
147
+
} else if (isURLSearchParameters(object)) {
148
+
const bytes = encoder.encode(object.toString());
149
+
body = bytes;
150
+
size = bytes.byteLength;
151
+
type = 'application/x-www-form-urlencoded;charset=UTF-8';
152
+
} else if (isBlob(object)) {
153
+
size = object.size;
154
+
type = object.type || null;
155
+
body = object.stream();
156
+
} else if (object instanceof Uint8Array) {
157
+
body = object;
158
+
size = object.byteLength;
159
+
} else if (isAnyArrayBuffer(object)) {
160
+
const bytes = new Uint8Array(object);
161
+
body = bytes;
162
+
size = bytes.byteLength;
163
+
} else if (ArrayBuffer.isView(object)) {
164
+
const bytes = new Uint8Array(
165
+
object.buffer,
166
+
object.byteOffset,
167
+
object.byteLength
168
+
);
169
+
body = bytes;
170
+
size = bytes.byteLength;
171
+
} else if (isReadableStream(object)) {
172
+
body = object;
173
+
} else if (isFormData(object)) {
174
+
const boundary = makeFormBoundary();
175
+
type = `multipart/form-data; boundary=${boundary}`;
176
+
size = getFormDataLength(object, boundary);
177
+
body = Readable.from(generatorOfFormData(object, boundary));
178
+
} else if (isMultipartFormDataStream(object)) {
179
+
type = `multipart/form-data; boundary=${object.getBoundary()}`;
180
+
size = object.hasKnownLength() ? object.getLengthSync() : null;
181
+
body = object as Readable;
182
+
} else if (isReadable(object)) {
183
+
body = object as Readable;
184
+
} else if (isIterable(object)) {
185
+
body = Readable.from(object);
186
+
} else {
187
+
const bytes = encoder.encode(`${object}`);
188
+
type = 'text/plain;charset=UTF-8';
189
+
body = bytes;
190
+
size = bytes.byteLength;
191
+
}
192
+
return {
193
+
contentLength: size,
194
+
contentType: type,
195
+
body,
196
+
};
197
+
};
+70
src/encoding.ts
+70
src/encoding.ts
···
1
+
import { PassThrough, Transform, TransformCallback } from 'node:stream';
2
+
import * as zlib from 'node:zlib';
3
+
4
+
/** @see https://www.rfc-editor.org/rfc/rfc9112.html#section-7.2 */
5
+
type Encoding = 'gzip' | 'x-gzip' | 'deflate' | 'x-deflate' | 'br' | {};
6
+
7
+
/** @see https://github.com/nodejs/undici/pull/2650 */
8
+
class InflateStream extends Transform {
9
+
_opts?: zlib.ZlibOptions;
10
+
_inflate?: Transform;
11
+
12
+
constructor(opts?: zlib.ZlibOptions) {
13
+
super();
14
+
this._opts = opts;
15
+
}
16
+
17
+
_transform(
18
+
chunk: Buffer,
19
+
encoding: BufferEncoding,
20
+
callback: TransformCallback
21
+
) {
22
+
if (!this._inflate) {
23
+
if (chunk.length === 0) {
24
+
callback();
25
+
return;
26
+
}
27
+
this._inflate =
28
+
(chunk[0] & 0x0f) === 0x08
29
+
? zlib.createInflate(this._opts)
30
+
: zlib.createInflateRaw(this._opts);
31
+
this._inflate.on('data', this.push.bind(this));
32
+
this._inflate.on('end', () => this.push(null));
33
+
this._inflate.on('error', err => this.destroy(err));
34
+
}
35
+
this._inflate.write(chunk, encoding, callback);
36
+
}
37
+
38
+
_final(callback: TransformCallback) {
39
+
if (this._inflate) {
40
+
this._inflate.end();
41
+
this._inflate = undefined;
42
+
}
43
+
callback();
44
+
}
45
+
}
46
+
47
+
export const createContentDecoder = (encoding: Encoding | {}) => {
48
+
// See: https://github.com/nodejs/undici/blob/008187b/lib/web/fetch/index.js#L2138-L2160
49
+
switch (encoding) {
50
+
case 'br':
51
+
return zlib.createBrotliDecompress({
52
+
flush: zlib.constants.BROTLI_OPERATION_FLUSH,
53
+
finishFlush: zlib.constants.BROTLI_OPERATION_FLUSH,
54
+
});
55
+
case 'gzip':
56
+
case 'x-gzip':
57
+
return zlib.createGunzip({
58
+
flush: zlib.constants.Z_SYNC_FLUSH,
59
+
finishFlush: zlib.constants.Z_SYNC_FLUSH,
60
+
});
61
+
case 'deflate':
62
+
case 'x-deflate':
63
+
return new InflateStream({
64
+
flush: zlib.constants.Z_SYNC_FLUSH,
65
+
finishFlush: zlib.constants.Z_SYNC_FLUSH,
66
+
});
67
+
default:
68
+
return new PassThrough();
69
+
}
70
+
};
+262
src/fetch.ts
+262
src/fetch.ts
···
1
+
import { Stream, Readable, pipeline } from 'node:stream';
2
+
import * as https from 'node:https';
3
+
import * as http from 'node:http';
4
+
import * as url from 'node:url';
5
+
6
+
import { extractBody } from './body';
7
+
import { createContentDecoder } from './encoding';
8
+
9
+
/** Maximum allowed redirects (matching Chromium's limit) */
10
+
const MAX_REDIRECTS = 20;
11
+
12
+
/** Convert Node.js raw headers array to Headers */
13
+
const headersOfRawHeaders = (rawHeaders: readonly string[]): Headers => {
14
+
const headers = new Headers();
15
+
for (let i = 0; i < rawHeaders.length; i += 2)
16
+
headers.set(rawHeaders[i], rawHeaders[i + 1]);
17
+
return headers;
18
+
};
19
+
20
+
/** Assign Headers to a Node.js OutgoingMessage (request) */
21
+
const assignOutgoingMessageHeaders = (
22
+
outgoing: http.OutgoingMessage,
23
+
headers: Headers
24
+
) => {
25
+
if (typeof outgoing.setHeaders === 'function') {
26
+
outgoing.setHeaders(headers);
27
+
} else {
28
+
for (const [key, value] of headers) outgoing.setHeader(key, value);
29
+
}
30
+
};
31
+
32
+
/** Normalize methods and disallow special methods */
33
+
const toRedirectOption = (
34
+
redirect: string | undefined
35
+
): 'follow' | 'manual' | 'error' => {
36
+
switch (redirect) {
37
+
case 'follow':
38
+
case 'manual':
39
+
case 'error':
40
+
return redirect;
41
+
case undefined:
42
+
return 'follow';
43
+
default:
44
+
throw new TypeError(
45
+
`Request constructor: ${redirect} is not an accepted type. Expected one of follow, manual, error.`
46
+
);
47
+
}
48
+
};
49
+
50
+
/** Normalize methods and disallow special methods */
51
+
const methodToHttpOption = (method: string | undefined): string => {
52
+
switch (method) {
53
+
case 'CONNECT':
54
+
case 'TRACE':
55
+
case 'TRACK':
56
+
throw new TypeError(
57
+
`Failed to construct 'Request': '${method}' HTTP method is unsupported.`
58
+
);
59
+
default:
60
+
return method ? method.toUpperCase() : 'GET';
61
+
}
62
+
};
63
+
64
+
/** Convert URL to Node.js HTTP request options and disallow unsupported protocols */
65
+
const urlToHttpOptions = (input: URL) => {
66
+
const _url = new URL(input);
67
+
switch (_url.protocol) {
68
+
// TODO: 'file:' and 'data:' support
69
+
case 'http:':
70
+
case 'https:':
71
+
return url.urlToHttpOptions(_url);
72
+
default:
73
+
throw new TypeError(`URL scheme "${_url.protocol}" is not supported.`);
74
+
}
75
+
};
76
+
77
+
/** Returns if `input` is a Request object */
78
+
const isRequest = (input: any): input is Request =>
79
+
input != null && typeof input === 'object' && 'body' in input;
80
+
81
+
/** Returns if status `code` is a redirect code */
82
+
const isRedirectCode = (
83
+
code: number | undefined
84
+
): code is 301 | 302 | 303 | 307 | 308 =>
85
+
code === 301 || code === 302 || code === 303 || code === 307 || code === 308;
86
+
87
+
function createResponse(
88
+
body: ConstructorParameters<typeof Response>[0] | null,
89
+
init: ResponseInit,
90
+
params: {
91
+
url: string;
92
+
redirected: boolean;
93
+
type: 'basic' | 'cors' | 'default' | 'error' | 'opaque' | 'opaqueredirect';
94
+
}
95
+
) {
96
+
const response = new Response(body, init);
97
+
Object.defineProperty(response, 'url', { value: params.url });
98
+
if (params.type !== 'default')
99
+
Object.defineProperty(response, 'type', { value: params.type });
100
+
if (params.redirected)
101
+
Object.defineProperty(response, 'redirected', { value: params.redirected });
102
+
return response;
103
+
}
104
+
105
+
export async function fetch(
106
+
input: string | URL | Request,
107
+
requestInit?: RequestInit
108
+
): Promise<Response> {
109
+
const initFromRequest = isRequest(input);
110
+
const initUrl = initFromRequest ? input.url : input;
111
+
const initBody = initFromRequest ? input.body : requestInit?.body || null;
112
+
const signal = initFromRequest
113
+
? input.signal
114
+
: requestInit?.signal || undefined;
115
+
const redirect = toRedirectOption(
116
+
initFromRequest ? input.redirect : requestInit?.redirect
117
+
);
118
+
119
+
let requestUrl = new URL(initUrl);
120
+
let requestBody = extractBody(initBody);
121
+
let redirects = 0;
122
+
123
+
const requestHeaders = new Headers(
124
+
requestInit?.headers || (initFromRequest ? input.headers : undefined)
125
+
);
126
+
const requestOptions = {
127
+
...urlToHttpOptions(requestUrl),
128
+
method: methodToHttpOption(
129
+
initFromRequest ? input.method : requestInit?.method
130
+
),
131
+
signal,
132
+
} satisfies http.RequestOptions;
133
+
134
+
function _fetch(
135
+
resolve: (response: Response | Promise<Response>) => void,
136
+
reject: (reason?: any) => void
137
+
) {
138
+
const method = requestOptions.method;
139
+
const protocol = requestOptions.protocol === 'https:' ? https : http;
140
+
const outgoing = protocol.request(requestOptions);
141
+
142
+
outgoing.on('response', incoming => {
143
+
incoming.setTimeout(0); // Forcefully disable timeout
144
+
145
+
const init = {
146
+
status: incoming.statusCode,
147
+
statusText: incoming.statusMessage,
148
+
headers: headersOfRawHeaders(incoming.rawHeaders),
149
+
} satisfies ResponseInit;
150
+
151
+
if (isRedirectCode(init.status)) {
152
+
const location = init.headers.get('Location');
153
+
const locationURL =
154
+
location != null ? new URL(location, requestUrl) : null;
155
+
if (redirect === 'error') {
156
+
// TODO: do we need a special Error instance here?
157
+
reject(
158
+
new Error(
159
+
'URI requested responds with a redirect, redirect mode is set to error'
160
+
)
161
+
);
162
+
return;
163
+
} else if (redirect === 'manual' && locationURL !== null) {
164
+
init.headers.set('Location', locationURL.toString());
165
+
} else if (redirect === 'follow' && locationURL !== null) {
166
+
if (++redirects > MAX_REDIRECTS) {
167
+
reject(new Error(`maximum redirect reached at: ${requestUrl}`));
168
+
return;
169
+
} else if (
170
+
locationURL.protocol !== 'http:' &&
171
+
locationURL.protocol !== 'https:'
172
+
) {
173
+
// TODO: do we need a special Error instance here?
174
+
reject(new Error('URL scheme must be a HTTP(S) scheme'));
175
+
return;
176
+
}
177
+
178
+
if (
179
+
init.status === 303 ||
180
+
((init.status === 301 || init.status === 302) && method === 'POST')
181
+
) {
182
+
requestBody = extractBody(null);
183
+
requestOptions.method = 'GET';
184
+
requestHeaders.delete('Content-Length');
185
+
} else if (
186
+
requestBody.body != null &&
187
+
requestBody.contentLength == null
188
+
) {
189
+
reject(new Error('Cannot follow redirect with a streamed body'));
190
+
return;
191
+
} else {
192
+
requestBody = extractBody(initBody);
193
+
}
194
+
195
+
Object.assign(
196
+
requestOptions,
197
+
urlToHttpOptions((requestUrl = locationURL))
198
+
);
199
+
return _fetch(resolve, reject);
200
+
}
201
+
}
202
+
203
+
const destroy = (reason?: any) => {
204
+
signal?.removeEventListener('abort', destroy);
205
+
if (reason) {
206
+
incoming.destroy(signal?.aborted ? signal.reason : reason);
207
+
reject(signal?.aborted ? signal.reason : reason);
208
+
}
209
+
};
210
+
211
+
signal?.addEventListener('abort', destroy);
212
+
213
+
let body: Readable | null = incoming;
214
+
const encoding = init.headers.get('Content-Encoding')?.toLowerCase();
215
+
if (method === 'HEAD' || init.status === 204 || init.status === 304) {
216
+
body = null;
217
+
} else if (encoding != null) {
218
+
init.headers.set('Content-Encoding', encoding);
219
+
body = pipeline(body, createContentDecoder(encoding), destroy);
220
+
}
221
+
222
+
resolve(
223
+
createResponse(body, init, {
224
+
type: 'default',
225
+
url: requestUrl.toString(),
226
+
redirected: redirects > 0,
227
+
})
228
+
);
229
+
});
230
+
231
+
outgoing.on('error', reject);
232
+
233
+
if (!requestHeaders.has('Accept')) requestHeaders.set('Accept', '*/*');
234
+
if (requestBody.contentType)
235
+
requestHeaders.set('Content-Type', requestBody.contentType);
236
+
237
+
if (requestBody.body == null && (method === 'POST' || method === 'PUT')) {
238
+
requestHeaders.set('Content-Length', '0');
239
+
} else if (requestBody.body != null && requestBody.contentLength != null) {
240
+
requestHeaders.set('Content-Length', `${requestBody.contentLength}`);
241
+
}
242
+
243
+
assignOutgoingMessageHeaders(outgoing, requestHeaders);
244
+
245
+
if (requestBody.body == null) {
246
+
outgoing.end();
247
+
} else if (requestBody.body instanceof Uint8Array) {
248
+
outgoing.write(requestBody.body);
249
+
outgoing.end();
250
+
} else {
251
+
const body =
252
+
requestBody.body instanceof Stream
253
+
? requestBody.body
254
+
: Readable.fromWeb(requestBody.body);
255
+
pipeline(body, outgoing, error => {
256
+
if (error) reject(error);
257
+
});
258
+
}
259
+
}
260
+
261
+
return await new Promise(_fetch);
262
+
}
+1
src/index.ts
+1
src/index.ts
···
1
+
export { fetch, fetch as default } from './fetch';
+24
tsconfig.json
+24
tsconfig.json
···
1
+
{
2
+
"compilerOptions": {
3
+
"baseUrl": "./",
4
+
"rootDir": ".",
5
+
"forceConsistentCasingInFileNames": true,
6
+
"importsNotUsedAsValues": "remove",
7
+
"noEmit": true,
8
+
"esModuleInterop": true,
9
+
"noUnusedLocals": true,
10
+
"allowJs": true,
11
+
"lib": ["es2016"],
12
+
"jsx": "react-jsx",
13
+
"module": "es2022",
14
+
"moduleResolution": "node",
15
+
"resolveJsonModule": true,
16
+
"target": "esnext",
17
+
"strict": true,
18
+
"noImplicitAny": false,
19
+
"noUnusedParameters": true,
20
+
"skipLibCheck": true,
21
+
"isolatedModules": true
22
+
},
23
+
"include": ["src", "packages"]
24
+
}