├── .github ├── renovate.json5 └── workflows │ ├── release.yml │ └── test.yml ├── .gitignore ├── .vscode ├── extensions.json └── settings.json ├── LICENSE ├── README.md ├── biome.json ├── package.json ├── playground ├── package.json ├── rsbuild.config.ts └── src │ └── index.js ├── playwright.config.ts ├── pnpm-lock.yaml ├── rslib.config.ts ├── rstest.config.ts ├── src ├── ProtocolImportsPlugin.ts ├── index.ts └── libs.ts ├── test ├── e2e │ ├── index.test.ts │ ├── rsbuild.config.ts │ └── src │ │ └── index.js └── unit │ └── index.test.ts └── tsconfig.json /.github/renovate.json5: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://docs.renovatebot.com/renovate-schema.json", 3 | "extends": ["config:base", "schedule:monthly", "group:allNonMajor"], 4 | "rangeStrategy": "bump", 5 | "packageRules": [{ "depTypeList": ["peerDependencies"], "enabled": false }] 6 | } 7 | -------------------------------------------------------------------------------- /.github/workflows/release.yml: -------------------------------------------------------------------------------- 1 | # This action will publish the package to npm and create a GitHub release. 2 | name: Release 3 | 4 | on: 5 | # Run `npm run bump` to bump the version and create a git tag. 6 | push: 7 | tags: 8 | - "v*" 9 | 10 | workflow_dispatch: 11 | 12 | permissions: 13 | contents: write 14 | id-token: write 15 | 16 | jobs: 17 | publish: 18 | runs-on: ubuntu-latest 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@v4 22 | 23 | - name: Install Pnpm 24 | run: npm i -g corepack@latest --force && corepack enable 25 | 26 | - name: Setup Node.js 27 | uses: actions/setup-node@v4 28 | with: 29 | node-version: 22 30 | cache: "pnpm" 31 | 32 | - name: Install Dependencies 33 | run: pnpm install 34 | 35 | - name: Publish 36 | uses: JS-DevTools/npm-publish@v3 37 | with: 38 | token: ${{ secrets.RSBUILD_PLUGIN_NPM_TOKEN }} 39 | 40 | - name: Create GitHub Release 41 | uses: ncipollo/release-action@v1 42 | with: 43 | generateReleaseNotes: "true" 44 | -------------------------------------------------------------------------------- /.github/workflows/test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | 3 | # Controls when the action will run. 4 | on: 5 | # Triggers the workflow on pull request events but only for the main branch 6 | pull_request: 7 | branches: [main] 8 | push: 9 | branches: [main] 10 | # Allows you to run this workflow manually from the Actions tab 11 | workflow_dispatch: 12 | 13 | # A workflow run is made up of one or more jobs that can run sequentially or in parallel 14 | jobs: 15 | test: 16 | runs-on: ${{ matrix.os }} 17 | strategy: 18 | matrix: 19 | os: [ubuntu-latest, windows-latest] 20 | 21 | # Steps represent a sequence of tasks that will be executed as part of the job 22 | steps: 23 | - name: Checkout 24 | uses: actions/checkout@v4 25 | 26 | - name: Install Pnpm 27 | run: npm i -g corepack@latest --force && corepack enable 28 | 29 | - name: Setup Node.js 30 | uses: actions/setup-node@v4 31 | with: 32 | node-version: 22 33 | cache: "pnpm" 34 | 35 | - name: Install Dependencies 36 | run: pnpm install && npx playwright install 37 | 38 | - name: Run Test 39 | run: pnpm run test 40 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Local 2 | .DS_Store 3 | *.local 4 | *.log* 5 | 6 | # Dist 7 | node_modules 8 | dist/ 9 | test-results 10 | 11 | # IDE 12 | .vscode/* 13 | !.vscode/settings.json 14 | !.vscode/extensions.json 15 | .idea 16 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["biomejs.biome"] 3 | } 4 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "search.useIgnoreFiles": true, 3 | "[json]": { 4 | "editor.defaultFormatter": "biomejs.biome" 5 | }, 6 | "[typescript]": { 7 | "editor.defaultFormatter": "biomejs.biome" 8 | }, 9 | "[javascript]": { 10 | "editor.defaultFormatter": "biomejs.biome" 11 | }, 12 | "[javascriptreact]": { 13 | "editor.defaultFormatter": "biomejs.biome" 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Rspack Contrib 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # @rsbuild/plugin-node-polyfill 2 | 3 | An Rsbuild plugin to automatically inject polyfills for [Node.js builtin modules](https://nodejs.org/api/modules.html#built-in-modules) into the browser side. 4 | 5 |

6 | 7 | npm version 8 | 9 | license 10 | downloads 11 |

12 | 13 | ## When to use 14 | 15 | Normally, we don't need to use Node builtin modules on the browser side. However, it is possible to use some Node builtin modules when the code will run on both the Node side and the browser side, and this plugin provides browser versions of polyfills for these Node builtin modules. 16 | 17 | By using the Node Polyfill plugin, polyfills for Node builtin modules are automatically injected into the browser-side, allowing you to use these modules on the browser side with confidence. 18 | 19 | ## Usage 20 | 21 | Install: 22 | 23 | ```bash 24 | npm add @rsbuild/plugin-node-polyfill -D 25 | ``` 26 | 27 | Add plugin to your `rsbuild.config.ts`: 28 | 29 | ```ts 30 | // rsbuild.config.ts 31 | import { pluginNodePolyfill } from "@rsbuild/plugin-node-polyfill"; 32 | 33 | export default { 34 | plugins: [pluginNodePolyfill()], 35 | }; 36 | ``` 37 | 38 | ## Node Polyfills 39 | 40 | ### Globals 41 | 42 | - `Buffer` 43 | - `process` 44 | 45 | When you use the above global variables in your code, the corresponding polyfill will be automatically injected. 46 | 47 | For instance, the following code would inject the `Buffer` polyfill: 48 | 49 | ```ts 50 | const bufferData = Buffer.from("abc"); 51 | ``` 52 | 53 | You can disable this behavior through the `globals` option of the plugin: 54 | 55 | ```ts 56 | pluginNodePolyfill({ 57 | globals: { 58 | Buffer: false, 59 | process: false, 60 | }, 61 | }); 62 | ``` 63 | 64 | ### Modules 65 | 66 | - `assert` 67 | - `buffer` 68 | - `console` 69 | - `constants` 70 | - `crypto` 71 | - `domain` 72 | - `events` 73 | - `http` 74 | - `https` 75 | - `os` 76 | - `path` 77 | - `punycode` 78 | - `process` 79 | - `querystring` 80 | - `stream` 81 | - `_stream_duplex` 82 | - `_stream_passthrough` 83 | - `_stream_readable` 84 | - `_stream_transform` 85 | - `_stream_writable` 86 | - `string_decoder` 87 | - `sys` 88 | - `timers` 89 | - `tty` 90 | - `url` 91 | - `util` 92 | - `vm` 93 | - `zlib` 94 | 95 | When the above module is referenced in code via import / require syntax, the corresponding polyfill will be injected. 96 | 97 | ```ts 98 | import { Buffer } from "buffer"; 99 | 100 | const bufferData = Buffer.from("abc"); 101 | ``` 102 | 103 | ### Fallbacks 104 | 105 | - `child_process` 106 | - `cluster` 107 | - `dgram` 108 | - `dns` 109 | - `fs` 110 | - `module` 111 | - `net` 112 | - `readline` 113 | - `repl` 114 | - `tls` 115 | 116 | Currently there is no polyfill for the above modules on the browser side, so when you import the above modules, it will automatically fallback to an empty object. 117 | 118 | ```ts 119 | import fs from "fs"; 120 | 121 | console.log(fs); // -> {} 122 | ``` 123 | 124 | ## Options 125 | 126 | ### globals 127 | 128 | Used to specify whether to inject polyfills for global variables. 129 | 130 | - **Type:** 131 | 132 | ```ts 133 | type Globals = { 134 | process?: boolean; 135 | Buffer?: boolean; 136 | }; 137 | ``` 138 | 139 | - **Default:** 140 | 141 | ```ts 142 | const defaultGlobals = { 143 | Buffer: true, 144 | process: true, 145 | }; 146 | ``` 147 | 148 | ### protocolImports 149 | 150 | Whether to polyfill Node.js builtin modules starting with `node:`. 151 | 152 | - **Type:** `boolean` 153 | - **Default:** `true` 154 | 155 | For example, if you disable `protocolImports`, modules such as `node:path`, `node:http`, etc. will not be polyfilled. 156 | 157 | ```ts 158 | pluginNodePolyfill({ 159 | protocolImports: false, 160 | }); 161 | ``` 162 | 163 | ### include 164 | 165 | Specify an array of modules for which polyfills should be injected. If this option is set, only the specified modules will be polyfilled. `include` is mutually exclusive with [`exclude`](#exclude). 166 | 167 | - **Type:** `string[]` 168 | - **Default:** `undefined` 169 | 170 | ```ts 171 | pluginNodePolyfill({ 172 | include: ["buffer", "crypto"], // Only "buffer" and "crypto" modules will be polyfilled. 173 | }); 174 | ``` 175 | 176 | ### exclude 177 | 178 | Specify an array of modules for which polyfills should not be injected from the default. If this option is set, the specified modules will be excluded from polyfilled. `exclude` is mutually exclusive with [`include`](#include). 179 | 180 | - **Type:** `string[]` 181 | - **Default:** `undefined` 182 | 183 | ```ts 184 | pluginNodePolyfill({ 185 | exclude: ["http", "https"], // All modules except "http" and "https" will be polyfilled. 186 | }); 187 | ``` 188 | 189 | ### overrides 190 | 191 | Override the default polyfills for specific modules. 192 | 193 | - **Type:** `Record` 194 | - **Default:** `{}` 195 | 196 | ```ts 197 | pluginNodePolyfill({ 198 | overrides: { 199 | fs: "memfs", 200 | }, 201 | }); 202 | ``` 203 | 204 | ### force 205 | 206 | By default, the plugin only polyfills the browser-side code. If you want to polyfill the server-side code as well (when `output.target` is `node`), you can set the `force` option to `true`. 207 | 208 | - **Type:** `boolean` 209 | - **Default:** `false` 210 | 211 | ```ts 212 | pluginNodePolyfill({ 213 | force: true, 214 | }); 215 | ``` 216 | 217 | ## Exported variables 218 | 219 | - `builtinMappingResolved`: A map of Node.js builtin modules to their resolved corresponding polyfills modules. 220 | - `resolvedPolyfillToModules`: A map of resolved polyfill modules to the polyfill modules before resolving. 221 | 222 | ## License 223 | 224 | [MIT](./LICENSE). 225 | -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json", 3 | "organizeImports": { 4 | "enabled": true 5 | }, 6 | "vcs": { 7 | "enabled": true, 8 | "defaultBranch": "main", 9 | "clientKind": "git", 10 | "useIgnoreFile": true 11 | }, 12 | "javascript": { 13 | "formatter": { 14 | "quoteStyle": "single" 15 | } 16 | }, 17 | "linter": { 18 | "enabled": true, 19 | "rules": { 20 | "recommended": true 21 | } 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@rsbuild/plugin-node-polyfill", 3 | "version": "1.3.0", 4 | "repository": "https://github.com/rspack-contrib/rsbuild-plugin-node-polyfill", 5 | "license": "MIT", 6 | "type": "module", 7 | "exports": { 8 | ".": { 9 | "types": "./dist/index.d.ts", 10 | "import": "./dist/index.js", 11 | "require": "./dist/index.cjs" 12 | } 13 | }, 14 | "main": "./dist/index.js", 15 | "module": "./dist/index.mjs", 16 | "types": "./dist/index.d.ts", 17 | "files": ["dist"], 18 | "scripts": { 19 | "build": "rslib build", 20 | "dev": "rslib build --watch", 21 | "lint": "biome check .", 22 | "lint:write": "biome check . --write", 23 | "prepare": "simple-git-hooks && npm run build", 24 | "test": "pnpm run /^test:/", 25 | "test:e2e": "playwright test", 26 | "test:unit": "rstest run", 27 | "bump": "npx bumpp" 28 | }, 29 | "simple-git-hooks": { 30 | "pre-commit": "npx nano-staged" 31 | }, 32 | "nano-staged": { 33 | "*.{js,jsx,ts,tsx,mjs,cjs}": [ 34 | "biome check --write --no-errors-on-unmatched" 35 | ] 36 | }, 37 | "dependencies": { 38 | "assert": "^2.1.0", 39 | "browserify-zlib": "^0.2.0", 40 | "buffer": "^5.7.1", 41 | "console-browserify": "^1.2.0", 42 | "constants-browserify": "^1.0.0", 43 | "crypto-browserify": "^3.12.1", 44 | "domain-browser": "^5.7.0", 45 | "events": "^3.3.0", 46 | "https-browserify": "^1.0.0", 47 | "os-browserify": "^0.3.0", 48 | "path-browserify": "^1.0.1", 49 | "process": "^0.11.10", 50 | "punycode": "^2.3.1", 51 | "querystring-es3": "^0.2.1", 52 | "readable-stream": "^4.7.0", 53 | "stream-browserify": "^3.0.0", 54 | "stream-http": "^3.2.0", 55 | "string_decoder": "^1.3.0", 56 | "timers-browserify": "^2.0.12", 57 | "tty-browserify": "^0.0.1", 58 | "url": "^0.11.4", 59 | "util": "^0.12.5", 60 | "vm-browserify": "^1.1.2" 61 | }, 62 | "devDependencies": { 63 | "@biomejs/biome": "^1.9.4", 64 | "@playwright/test": "^1.52.0", 65 | "@rsbuild/core": "^1.3.22", 66 | "@rslib/core": "^0.9.1", 67 | "@rstest/core": "https://pkg.pr.new/web-infra-dev/rstest/@rstest/core@1b40438", 68 | "@types/node": "^22.15.29", 69 | "nano-staged": "^0.8.0", 70 | "playwright": "^1.52.0", 71 | "simple-git-hooks": "^2.13.0", 72 | "tsx": "^4.19.4", 73 | "typescript": "^5.8.3" 74 | }, 75 | "peerDependencies": { 76 | "@rsbuild/core": "1.x" 77 | }, 78 | "peerDependenciesMeta": { 79 | "@rsbuild/core": { 80 | "optional": true 81 | } 82 | }, 83 | "packageManager": "pnpm@10.11.0", 84 | "publishConfig": { 85 | "access": "public", 86 | "registry": "https://registry.npmjs.org/" 87 | } 88 | } 89 | -------------------------------------------------------------------------------- /playground/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "playground", 3 | "private": true, 4 | "version": "0.0.0", 5 | "scripts": { 6 | "dev": "npx rsbuild dev", 7 | "build": "npx rsbuild build" 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /playground/rsbuild.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from '@rsbuild/core'; 2 | import { pluginNodePolyfill } from '../src'; 3 | 4 | export default defineConfig({ 5 | plugins: [pluginNodePolyfill()], 6 | }); 7 | -------------------------------------------------------------------------------- /playground/src/index.js: -------------------------------------------------------------------------------- 1 | import path from 'node:path'; 2 | // biome-ignore lint: test non-import protocol 3 | import querystring from 'querystring'; 4 | 5 | const bufferData = Buffer.from('abc'); 6 | 7 | const qsRes = querystring.stringify({ 8 | foo: 'bar', 9 | }); 10 | 11 | document.querySelector('#root').innerHTML = ` 12 |
13 |
${bufferData.join('')}
14 |
${qsRes}
15 |
${path.join('foo', 'bar')}
16 |
Hello Rsbuild!
17 |
18 | `; 19 | -------------------------------------------------------------------------------- /playwright.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from '@playwright/test'; 2 | 3 | export default defineConfig({ 4 | testMatch: '*test/e2e/*.test.ts', 5 | }); 6 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | assert: 12 | specifier: ^2.1.0 13 | version: 2.1.0 14 | browserify-zlib: 15 | specifier: ^0.2.0 16 | version: 0.2.0 17 | buffer: 18 | specifier: ^5.7.1 19 | version: 5.7.1 20 | console-browserify: 21 | specifier: ^1.2.0 22 | version: 1.2.0 23 | constants-browserify: 24 | specifier: ^1.0.0 25 | version: 1.0.0 26 | crypto-browserify: 27 | specifier: ^3.12.1 28 | version: 3.12.1 29 | domain-browser: 30 | specifier: ^5.7.0 31 | version: 5.7.0 32 | events: 33 | specifier: ^3.3.0 34 | version: 3.3.0 35 | https-browserify: 36 | specifier: ^1.0.0 37 | version: 1.0.0 38 | os-browserify: 39 | specifier: ^0.3.0 40 | version: 0.3.0 41 | path-browserify: 42 | specifier: ^1.0.1 43 | version: 1.0.1 44 | process: 45 | specifier: ^0.11.10 46 | version: 0.11.10 47 | punycode: 48 | specifier: ^2.3.1 49 | version: 2.3.1 50 | querystring-es3: 51 | specifier: ^0.2.1 52 | version: 0.2.1 53 | readable-stream: 54 | specifier: ^4.7.0 55 | version: 4.7.0 56 | stream-browserify: 57 | specifier: ^3.0.0 58 | version: 3.0.0 59 | stream-http: 60 | specifier: ^3.2.0 61 | version: 3.2.0 62 | string_decoder: 63 | specifier: ^1.3.0 64 | version: 1.3.0 65 | timers-browserify: 66 | specifier: ^2.0.12 67 | version: 2.0.12 68 | tty-browserify: 69 | specifier: ^0.0.1 70 | version: 0.0.1 71 | url: 72 | specifier: ^0.11.4 73 | version: 0.11.4 74 | util: 75 | specifier: ^0.12.5 76 | version: 0.12.5 77 | vm-browserify: 78 | specifier: ^1.1.2 79 | version: 1.1.2 80 | devDependencies: 81 | '@biomejs/biome': 82 | specifier: ^1.9.4 83 | version: 1.9.4 84 | '@playwright/test': 85 | specifier: ^1.52.0 86 | version: 1.52.0 87 | '@rsbuild/core': 88 | specifier: ^1.3.22 89 | version: 1.3.22 90 | '@rslib/core': 91 | specifier: ^0.9.1 92 | version: 0.9.1(typescript@5.8.3) 93 | '@rstest/core': 94 | specifier: https://pkg.pr.new/web-infra-dev/rstest/@rstest/core@1b40438 95 | version: https://pkg.pr.new/web-infra-dev/rstest/@rstest/core@1b40438 96 | '@types/node': 97 | specifier: ^22.15.29 98 | version: 22.15.29 99 | nano-staged: 100 | specifier: ^0.8.0 101 | version: 0.8.0 102 | playwright: 103 | specifier: ^1.52.0 104 | version: 1.52.0 105 | simple-git-hooks: 106 | specifier: ^2.13.0 107 | version: 2.13.0 108 | tsx: 109 | specifier: ^4.19.4 110 | version: 4.19.4 111 | typescript: 112 | specifier: ^5.8.3 113 | version: 5.8.3 114 | 115 | packages: 116 | 117 | '@ast-grep/napi-darwin-arm64@0.37.0': 118 | resolution: {integrity: sha512-QAiIiaAbLvMEg/yBbyKn+p1gX2/FuaC0SMf7D7capm/oG4xGMzdeaQIcSosF4TCxxV+hIH4Bz9e4/u7w6Bnk3Q==} 119 | engines: {node: '>= 10'} 120 | cpu: [arm64] 121 | os: [darwin] 122 | 123 | '@ast-grep/napi-darwin-x64@0.37.0': 124 | resolution: {integrity: sha512-zvcvdgekd4ySV3zUbUp8HF5nk5zqwiMXTuVzTUdl/w08O7JjM6XPOIVT+d2o/MqwM9rsXdzdergY5oY2RdhSPA==} 125 | engines: {node: '>= 10'} 126 | cpu: [x64] 127 | os: [darwin] 128 | 129 | '@ast-grep/napi-linux-arm64-gnu@0.37.0': 130 | resolution: {integrity: sha512-L7Sj0lXy8X+BqSMgr1LB8cCoWk0rericdeu+dC8/c8zpsav5Oo2IQKY1PmiZ7H8IHoFBbURLf8iklY9wsD+cyA==} 131 | engines: {node: '>= 10'} 132 | cpu: [arm64] 133 | os: [linux] 134 | 135 | '@ast-grep/napi-linux-arm64-musl@0.37.0': 136 | resolution: {integrity: sha512-LF9sAvYy6es/OdyJDO3RwkX3I82Vkfsng1sqUBcoWC1jVb1wX5YVzHtpQox9JrEhGl+bNp7FYxB4Qba9OdA5GA==} 137 | engines: {node: '>= 10'} 138 | cpu: [arm64] 139 | os: [linux] 140 | 141 | '@ast-grep/napi-linux-x64-gnu@0.37.0': 142 | resolution: {integrity: sha512-TViz5/klqre6aSmJzswEIjApnGjJzstG/SE8VDWsrftMBMYt2PTu3MeluZVwzSqDao8doT/P+6U11dU05UOgxw==} 143 | engines: {node: '>= 10'} 144 | cpu: [x64] 145 | os: [linux] 146 | 147 | '@ast-grep/napi-linux-x64-musl@0.37.0': 148 | resolution: {integrity: sha512-/BcCH33S9E3ovOAEoxYngUNXgb+JLg991sdyiNP2bSoYd30a9RHrG7CYwW6fMgua3ijQ474eV6cq9yZO1bCpXg==} 149 | engines: {node: '>= 10'} 150 | cpu: [x64] 151 | os: [linux] 152 | 153 | '@ast-grep/napi-win32-arm64-msvc@0.37.0': 154 | resolution: {integrity: sha512-TjQA4cFoIEW2bgjLkaL9yqT4XWuuLa5MCNd0VCDhGRDMNQ9+rhwi9eLOWRaap3xzT7g+nlbcEHL3AkVCD2+b3A==} 155 | engines: {node: '>= 10'} 156 | cpu: [arm64] 157 | os: [win32] 158 | 159 | '@ast-grep/napi-win32-ia32-msvc@0.37.0': 160 | resolution: {integrity: sha512-uNmVka8fJCdYsyOlF9aZqQMLTatEYBynjChVTzUfFMDfmZ0bihs/YTqJVbkSm8TZM7CUX82apvn50z/dX5iWRA==} 161 | engines: {node: '>= 10'} 162 | cpu: [ia32] 163 | os: [win32] 164 | 165 | '@ast-grep/napi-win32-x64-msvc@0.37.0': 166 | resolution: {integrity: sha512-vCiFOT3hSCQuHHfZ933GAwnPzmL0G04JxQEsBRfqONywyT8bSdDc/ECpAfr3S9VcS4JZ9/F6tkePKW/Om2Dq2g==} 167 | engines: {node: '>= 10'} 168 | cpu: [x64] 169 | os: [win32] 170 | 171 | '@ast-grep/napi@0.37.0': 172 | resolution: {integrity: sha512-Hb4o6h1Pf6yRUAX07DR4JVY7dmQw+RVQMW5/m55GoiAT/VRoKCWBtIUPPOnqDVhbx1Cjfil9b6EDrgJsUAujEQ==} 173 | engines: {node: '>= 10'} 174 | 175 | '@biomejs/biome@1.9.4': 176 | resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} 177 | engines: {node: '>=14.21.3'} 178 | hasBin: true 179 | 180 | '@biomejs/cli-darwin-arm64@1.9.4': 181 | resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} 182 | engines: {node: '>=14.21.3'} 183 | cpu: [arm64] 184 | os: [darwin] 185 | 186 | '@biomejs/cli-darwin-x64@1.9.4': 187 | resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} 188 | engines: {node: '>=14.21.3'} 189 | cpu: [x64] 190 | os: [darwin] 191 | 192 | '@biomejs/cli-linux-arm64-musl@1.9.4': 193 | resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} 194 | engines: {node: '>=14.21.3'} 195 | cpu: [arm64] 196 | os: [linux] 197 | 198 | '@biomejs/cli-linux-arm64@1.9.4': 199 | resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} 200 | engines: {node: '>=14.21.3'} 201 | cpu: [arm64] 202 | os: [linux] 203 | 204 | '@biomejs/cli-linux-x64-musl@1.9.4': 205 | resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} 206 | engines: {node: '>=14.21.3'} 207 | cpu: [x64] 208 | os: [linux] 209 | 210 | '@biomejs/cli-linux-x64@1.9.4': 211 | resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} 212 | engines: {node: '>=14.21.3'} 213 | cpu: [x64] 214 | os: [linux] 215 | 216 | '@biomejs/cli-win32-arm64@1.9.4': 217 | resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} 218 | engines: {node: '>=14.21.3'} 219 | cpu: [arm64] 220 | os: [win32] 221 | 222 | '@biomejs/cli-win32-x64@1.9.4': 223 | resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} 224 | engines: {node: '>=14.21.3'} 225 | cpu: [x64] 226 | os: [win32] 227 | 228 | '@esbuild/aix-ppc64@0.25.0': 229 | resolution: {integrity: sha512-O7vun9Sf8DFjH2UtqK8Ku3LkquL9SZL8OLY1T5NZkA34+wG3OQF7cl4Ql8vdNzM6fzBbYfLaiRLIOZ+2FOCgBQ==} 230 | engines: {node: '>=18'} 231 | cpu: [ppc64] 232 | os: [aix] 233 | 234 | '@esbuild/android-arm64@0.25.0': 235 | resolution: {integrity: sha512-grvv8WncGjDSyUBjN9yHXNt+cq0snxXbDxy5pJtzMKGmmpPxeAmAhWxXI+01lU5rwZomDgD3kJwulEnhTRUd6g==} 236 | engines: {node: '>=18'} 237 | cpu: [arm64] 238 | os: [android] 239 | 240 | '@esbuild/android-arm@0.25.0': 241 | resolution: {integrity: sha512-PTyWCYYiU0+1eJKmw21lWtC+d08JDZPQ5g+kFyxP0V+es6VPPSUhM6zk8iImp2jbV6GwjX4pap0JFbUQN65X1g==} 242 | engines: {node: '>=18'} 243 | cpu: [arm] 244 | os: [android] 245 | 246 | '@esbuild/android-x64@0.25.0': 247 | resolution: {integrity: sha512-m/ix7SfKG5buCnxasr52+LI78SQ+wgdENi9CqyCXwjVR2X4Jkz+BpC3le3AoBPYTC9NHklwngVXvbJ9/Akhrfg==} 248 | engines: {node: '>=18'} 249 | cpu: [x64] 250 | os: [android] 251 | 252 | '@esbuild/darwin-arm64@0.25.0': 253 | resolution: {integrity: sha512-mVwdUb5SRkPayVadIOI78K7aAnPamoeFR2bT5nszFUZ9P8UpK4ratOdYbZZXYSqPKMHfS1wdHCJk1P1EZpRdvw==} 254 | engines: {node: '>=18'} 255 | cpu: [arm64] 256 | os: [darwin] 257 | 258 | '@esbuild/darwin-x64@0.25.0': 259 | resolution: {integrity: sha512-DgDaYsPWFTS4S3nWpFcMn/33ZZwAAeAFKNHNa1QN0rI4pUjgqf0f7ONmXf6d22tqTY+H9FNdgeaAa+YIFUn2Rg==} 260 | engines: {node: '>=18'} 261 | cpu: [x64] 262 | os: [darwin] 263 | 264 | '@esbuild/freebsd-arm64@0.25.0': 265 | resolution: {integrity: sha512-VN4ocxy6dxefN1MepBx/iD1dH5K8qNtNe227I0mnTRjry8tj5MRk4zprLEdG8WPyAPb93/e4pSgi1SoHdgOa4w==} 266 | engines: {node: '>=18'} 267 | cpu: [arm64] 268 | os: [freebsd] 269 | 270 | '@esbuild/freebsd-x64@0.25.0': 271 | resolution: {integrity: sha512-mrSgt7lCh07FY+hDD1TxiTyIHyttn6vnjesnPoVDNmDfOmggTLXRv8Id5fNZey1gl/V2dyVK1VXXqVsQIiAk+A==} 272 | engines: {node: '>=18'} 273 | cpu: [x64] 274 | os: [freebsd] 275 | 276 | '@esbuild/linux-arm64@0.25.0': 277 | resolution: {integrity: sha512-9QAQjTWNDM/Vk2bgBl17yWuZxZNQIF0OUUuPZRKoDtqF2k4EtYbpyiG5/Dk7nqeK6kIJWPYldkOcBqjXjrUlmg==} 278 | engines: {node: '>=18'} 279 | cpu: [arm64] 280 | os: [linux] 281 | 282 | '@esbuild/linux-arm@0.25.0': 283 | resolution: {integrity: sha512-vkB3IYj2IDo3g9xX7HqhPYxVkNQe8qTK55fraQyTzTX/fxaDtXiEnavv9geOsonh2Fd2RMB+i5cbhu2zMNWJwg==} 284 | engines: {node: '>=18'} 285 | cpu: [arm] 286 | os: [linux] 287 | 288 | '@esbuild/linux-ia32@0.25.0': 289 | resolution: {integrity: sha512-43ET5bHbphBegyeqLb7I1eYn2P/JYGNmzzdidq/w0T8E2SsYL1U6un2NFROFRg1JZLTzdCoRomg8Rvf9M6W6Gg==} 290 | engines: {node: '>=18'} 291 | cpu: [ia32] 292 | os: [linux] 293 | 294 | '@esbuild/linux-loong64@0.25.0': 295 | resolution: {integrity: sha512-fC95c/xyNFueMhClxJmeRIj2yrSMdDfmqJnyOY4ZqsALkDrrKJfIg5NTMSzVBr5YW1jf+l7/cndBfP3MSDpoHw==} 296 | engines: {node: '>=18'} 297 | cpu: [loong64] 298 | os: [linux] 299 | 300 | '@esbuild/linux-mips64el@0.25.0': 301 | resolution: {integrity: sha512-nkAMFju7KDW73T1DdH7glcyIptm95a7Le8irTQNO/qtkoyypZAnjchQgooFUDQhNAy4iu08N79W4T4pMBwhPwQ==} 302 | engines: {node: '>=18'} 303 | cpu: [mips64el] 304 | os: [linux] 305 | 306 | '@esbuild/linux-ppc64@0.25.0': 307 | resolution: {integrity: sha512-NhyOejdhRGS8Iwv+KKR2zTq2PpysF9XqY+Zk77vQHqNbo/PwZCzB5/h7VGuREZm1fixhs4Q/qWRSi5zmAiO4Fw==} 308 | engines: {node: '>=18'} 309 | cpu: [ppc64] 310 | os: [linux] 311 | 312 | '@esbuild/linux-riscv64@0.25.0': 313 | resolution: {integrity: sha512-5S/rbP5OY+GHLC5qXp1y/Mx//e92L1YDqkiBbO9TQOvuFXM+iDqUNG5XopAnXoRH3FjIUDkeGcY1cgNvnXp/kA==} 314 | engines: {node: '>=18'} 315 | cpu: [riscv64] 316 | os: [linux] 317 | 318 | '@esbuild/linux-s390x@0.25.0': 319 | resolution: {integrity: sha512-XM2BFsEBz0Fw37V0zU4CXfcfuACMrppsMFKdYY2WuTS3yi8O1nFOhil/xhKTmE1nPmVyvQJjJivgDT+xh8pXJA==} 320 | engines: {node: '>=18'} 321 | cpu: [s390x] 322 | os: [linux] 323 | 324 | '@esbuild/linux-x64@0.25.0': 325 | resolution: {integrity: sha512-9yl91rHw/cpwMCNytUDxwj2XjFpxML0y9HAOH9pNVQDpQrBxHy01Dx+vaMu0N1CKa/RzBD2hB4u//nfc+Sd3Cw==} 326 | engines: {node: '>=18'} 327 | cpu: [x64] 328 | os: [linux] 329 | 330 | '@esbuild/netbsd-arm64@0.25.0': 331 | resolution: {integrity: sha512-RuG4PSMPFfrkH6UwCAqBzauBWTygTvb1nxWasEJooGSJ/NwRw7b2HOwyRTQIU97Hq37l3npXoZGYMy3b3xYvPw==} 332 | engines: {node: '>=18'} 333 | cpu: [arm64] 334 | os: [netbsd] 335 | 336 | '@esbuild/netbsd-x64@0.25.0': 337 | resolution: {integrity: sha512-jl+qisSB5jk01N5f7sPCsBENCOlPiS/xptD5yxOx2oqQfyourJwIKLRA2yqWdifj3owQZCL2sn6o08dBzZGQzA==} 338 | engines: {node: '>=18'} 339 | cpu: [x64] 340 | os: [netbsd] 341 | 342 | '@esbuild/openbsd-arm64@0.25.0': 343 | resolution: {integrity: sha512-21sUNbq2r84YE+SJDfaQRvdgznTD8Xc0oc3p3iW/a1EVWeNj/SdUCbm5U0itZPQYRuRTW20fPMWMpcrciH2EJw==} 344 | engines: {node: '>=18'} 345 | cpu: [arm64] 346 | os: [openbsd] 347 | 348 | '@esbuild/openbsd-x64@0.25.0': 349 | resolution: {integrity: sha512-2gwwriSMPcCFRlPlKx3zLQhfN/2WjJ2NSlg5TKLQOJdV0mSxIcYNTMhk3H3ulL/cak+Xj0lY1Ym9ysDV1igceg==} 350 | engines: {node: '>=18'} 351 | cpu: [x64] 352 | os: [openbsd] 353 | 354 | '@esbuild/sunos-x64@0.25.0': 355 | resolution: {integrity: sha512-bxI7ThgLzPrPz484/S9jLlvUAHYMzy6I0XiU1ZMeAEOBcS0VePBFxh1JjTQt3Xiat5b6Oh4x7UC7IwKQKIJRIg==} 356 | engines: {node: '>=18'} 357 | cpu: [x64] 358 | os: [sunos] 359 | 360 | '@esbuild/win32-arm64@0.25.0': 361 | resolution: {integrity: sha512-ZUAc2YK6JW89xTbXvftxdnYy3m4iHIkDtK3CLce8wg8M2L+YZhIvO1DKpxrd0Yr59AeNNkTiic9YLf6FTtXWMw==} 362 | engines: {node: '>=18'} 363 | cpu: [arm64] 364 | os: [win32] 365 | 366 | '@esbuild/win32-ia32@0.25.0': 367 | resolution: {integrity: sha512-eSNxISBu8XweVEWG31/JzjkIGbGIJN/TrRoiSVZwZ6pkC6VX4Im/WV2cz559/TXLcYbcrDN8JtKgd9DJVIo8GA==} 368 | engines: {node: '>=18'} 369 | cpu: [ia32] 370 | os: [win32] 371 | 372 | '@esbuild/win32-x64@0.25.0': 373 | resolution: {integrity: sha512-ZENoHJBxA20C2zFzh6AI4fT6RraMzjYw4xKWemRTRmRVtN9c5DcH9r/f2ihEkMjOW5eGgrwCslG/+Y/3bL+DHQ==} 374 | engines: {node: '>=18'} 375 | cpu: [x64] 376 | os: [win32] 377 | 378 | '@jridgewell/sourcemap-codec@1.5.0': 379 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 380 | 381 | '@module-federation/error-codes@0.14.0': 382 | resolution: {integrity: sha512-GGk+EoeSACJikZZyShnLshtq9E2eCrDWbRiB4QAFXCX4oYmGgFfzXlx59vMNwqTKPJWxkEGnPYacJMcr2YYjag==} 383 | 384 | '@module-federation/error-codes@0.14.3': 385 | resolution: {integrity: sha512-sBJ3XKU9g5Up31jFeXPFsD8AgORV7TLO/cCSMuRewSfgYbG/3vSKLJmfHrO6+PvjZSb9VyV2UaF02ojktW65vw==} 386 | 387 | '@module-federation/runtime-core@0.14.0': 388 | resolution: {integrity: sha512-fGE1Ro55zIFDp/CxQuRhKQ1pJvG7P0qvRm2N+4i8z++2bgDjcxnCKUqDJ8lLD+JfJQvUJf0tuSsJPgevzueD4g==} 389 | 390 | '@module-federation/runtime-core@0.14.3': 391 | resolution: {integrity: sha512-xMFQXflLVW/AJTWb4soAFP+LB4XuhE7ryiLIX8oTyUoBBgV6U2OPghnFljPjeXbud72O08NYlQ1qsHw1kN/V8Q==} 392 | 393 | '@module-federation/runtime-tools@0.14.0': 394 | resolution: {integrity: sha512-y/YN0c2DKsLETE+4EEbmYWjqF9G6ZwgZoDIPkaQ9p0pQu0V4YxzWfQagFFxR0RigYGuhJKmSU/rtNoHq+qF8jg==} 395 | 396 | '@module-federation/runtime-tools@0.14.3': 397 | resolution: {integrity: sha512-QBETX7iMYXdSa3JtqFlYU+YkpymxETZqyIIRiqg0gW+XGpH3jgU68yjrme2NBJp7URQi/CFZG8KWtfClk0Pjgw==} 398 | 399 | '@module-federation/runtime@0.14.0': 400 | resolution: {integrity: sha512-kR3cyHw/Y64SEa7mh4CHXOEQYY32LKLK75kJOmBroLNLO7/W01hMNAvGBYTedS7hWpVuefPk1aFZioy3q2VLdQ==} 401 | 402 | '@module-federation/runtime@0.14.3': 403 | resolution: {integrity: sha512-7ZHpa3teUDVhraYdxQGkfGHzPbjna4LtwbpudgzAxSLLFxLDNanaxCuSeIgSM9c+8sVUNC9kvzUgJEZB0krPJw==} 404 | 405 | '@module-federation/sdk@0.14.0': 406 | resolution: {integrity: sha512-lg/OWRsh18hsyTCamOOhEX546vbDiA2O4OggTxxH2wTGr156N6DdELGQlYIKfRdU/0StgtQS81Goc0BgDZlx9A==} 407 | 408 | '@module-federation/sdk@0.14.3': 409 | resolution: {integrity: sha512-THJZMfbXpqjQOLblCQ8jjcBFFXsGRJwUWE9l/Q4SmuCSKMgAwie7yLT0qSGrHmyBYrsUjAuy+xNB4nfKP0pnGw==} 410 | 411 | '@module-federation/webpack-bundler-runtime@0.14.0': 412 | resolution: {integrity: sha512-POWS6cKBicAAQ3DNY5X7XEUSfOfUsRaBNxbuwEfSGlrkTE9UcWheO06QP2ndHi8tHQuUKcIHi2navhPkJ+k5xg==} 413 | 414 | '@module-federation/webpack-bundler-runtime@0.14.3': 415 | resolution: {integrity: sha512-hIyJFu34P7bY2NeMIUHAS/mYUHEY71VTAsN0A0AqEJFSVPszheopu9VdXq0VDLrP9KQfuXT8SDxeYeJXyj0mgA==} 416 | 417 | '@playwright/test@1.52.0': 418 | resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} 419 | engines: {node: '>=18'} 420 | hasBin: true 421 | 422 | '@rsbuild/core@1.3.22': 423 | resolution: {integrity: sha512-FGB7m8Tn/uiOhvqk0lw+NRMyD+VYJ+eBqVfpn0X11spkJDiPWn8UkMRvfzCX4XFcNZwRKYuuKJaZK1DNU8UG+w==} 424 | engines: {node: '>=16.10.0'} 425 | hasBin: true 426 | 427 | '@rsbuild/core@1.4.0-beta.2': 428 | resolution: {integrity: sha512-cgMGolvlPkDghi0+tuoN5pYZERhOuOHQWXwxVU963/f5BSrXDRtwH6QzUevmUVyh+i1zFE5OdWM3YyVCahvG2Q==} 429 | engines: {node: '>=16.10.0'} 430 | hasBin: true 431 | 432 | '@rslib/core@0.9.1': 433 | resolution: {integrity: sha512-aa/LXYxr49lCNm/b0B4CQoTB5286MPglGsE5/YFoY0VwIcKJdMz0zBJ4DsPwh27/fcfDQvmN1+J9tzjt9TxQtQ==} 434 | engines: {node: '>=16.7.0'} 435 | hasBin: true 436 | peerDependencies: 437 | '@microsoft/api-extractor': ^7 438 | typescript: ^5 439 | peerDependenciesMeta: 440 | '@microsoft/api-extractor': 441 | optional: true 442 | typescript: 443 | optional: true 444 | 445 | '@rspack/binding-darwin-arm64@1.3.12': 446 | resolution: {integrity: sha512-8hKjVTBeWPqkMzFPNWIh72oU9O3vFy3e88wRjMPImDCXBiEYrKqGTTLd/J0SO+efdL3SBD1rX1IvdJpxCv6Yrw==} 447 | cpu: [arm64] 448 | os: [darwin] 449 | 450 | '@rspack/binding-darwin-arm64@1.3.15': 451 | resolution: {integrity: sha512-f+DnVRENRdVe+ufpZeqTtWAUDSTnP48jVo7x9KWsXf8XyJHUi+eHKEPrFoy1HvL1/k5yJ3HVnFBh1Hb9cNIwSg==} 452 | cpu: [arm64] 453 | os: [darwin] 454 | 455 | '@rspack/binding-darwin-x64@1.3.12': 456 | resolution: {integrity: sha512-Sj4m+mCUxL7oCpdu7OmWT7fpBM7hywk5CM9RDc3D7StaBZbvNtNftafCrTZzTYKuZrKmemTh5SFzT5Tz7tf6GA==} 457 | cpu: [x64] 458 | os: [darwin] 459 | 460 | '@rspack/binding-darwin-x64@1.3.15': 461 | resolution: {integrity: sha512-TfUvEIBqYUT2OK01BYXb2MNcZeZIhAnJy/5aj0qV0uy4KlvwW63HYcKWa1sFd4Ac7bnGShDkanvP3YEuHOFOyg==} 462 | cpu: [x64] 463 | os: [darwin] 464 | 465 | '@rspack/binding-linux-arm64-gnu@1.3.12': 466 | resolution: {integrity: sha512-7MuOxf3/Mhv4mgFdLTvgnt/J+VouNR65DEhorth+RZm3LEWojgoFEphSAMAvpvAOpYSS68Sw4SqsOZi719ia2w==} 467 | cpu: [arm64] 468 | os: [linux] 469 | 470 | '@rspack/binding-linux-arm64-gnu@1.3.15': 471 | resolution: {integrity: sha512-D/YjYk9snKvYm1Elotq8/GsEipB4ZJWVv/V8cZ+ohhFNOPzygENi6JfyI06TryBTQiN0/JDZqt/S9RaWBWnMqw==} 472 | cpu: [arm64] 473 | os: [linux] 474 | 475 | '@rspack/binding-linux-arm64-musl@1.3.12': 476 | resolution: {integrity: sha512-s6KKj20T9Z1bA8caIjU6EzJbwyDo1URNFgBAlafCT2UC6yX7flstDJJ38CxZacA9A2P24RuQK2/jPSZpWrTUFA==} 477 | cpu: [arm64] 478 | os: [linux] 479 | 480 | '@rspack/binding-linux-arm64-musl@1.3.15': 481 | resolution: {integrity: sha512-lJbBsPMOiR0hYPCSM42yp7QiZjfo0ALtX7ws2wURpsQp3BMfRVAmXU3Ixpo2XCRtG1zj8crHaCmAWOJTS0smsA==} 482 | cpu: [arm64] 483 | os: [linux] 484 | 485 | '@rspack/binding-linux-x64-gnu@1.3.12': 486 | resolution: {integrity: sha512-0w/sRREYbRgHgWvs2uMEJSLfvzbZkPHUg6CMcYQGNVK6axYRot6jPyKetyFYA9pR5fB5rsXegpnFaZaVrRIK2g==} 487 | cpu: [x64] 488 | os: [linux] 489 | 490 | '@rspack/binding-linux-x64-gnu@1.3.15': 491 | resolution: {integrity: sha512-qGB8ucHklrzNg6lsAS36VrBsCbOw0acgpQNqTE5cuHWrp1Pu3GFTRiFEogenxEmzoRbohMZt0Ev5grivrcgKBQ==} 492 | cpu: [x64] 493 | os: [linux] 494 | 495 | '@rspack/binding-linux-x64-musl@1.3.12': 496 | resolution: {integrity: sha512-jEdxkPymkRxbijDRsBGdhopcbGXiXDg59lXqIRkVklqbDmZ/O6DHm7gImmlx5q9FoWbz0gqJuOKBz4JqWxjWVA==} 497 | cpu: [x64] 498 | os: [linux] 499 | 500 | '@rspack/binding-linux-x64-musl@1.3.15': 501 | resolution: {integrity: sha512-qRn6e40fLQP+N2rQD8GAj/h4DakeTIho32VxTIaHRVuzw68ZD7VmKkwn55ssN370ejmey35ZdoNFNE12RBrMZA==} 502 | cpu: [x64] 503 | os: [linux] 504 | 505 | '@rspack/binding-win32-arm64-msvc@1.3.12': 506 | resolution: {integrity: sha512-ZRvUCb3TDLClAqcTsl/o9UdJf0B5CgzAxgdbnYJbldyuyMeTUB4jp20OfG55M3C2Nute2SNhu2bOOp9Se5Ongw==} 507 | cpu: [arm64] 508 | os: [win32] 509 | 510 | '@rspack/binding-win32-arm64-msvc@1.3.15': 511 | resolution: {integrity: sha512-7uJ7dWhO1nWXJiCss6Rslz8hoAxAhFpwpbWja3eHgRb7O4NPHg6MWw63AQSI2aFVakreenfu9yXQqYfpVWJ2dA==} 512 | cpu: [arm64] 513 | os: [win32] 514 | 515 | '@rspack/binding-win32-ia32-msvc@1.3.12': 516 | resolution: {integrity: sha512-1TKPjuXStPJr14f3ZHuv40Xc/87jUXx10pzVtrPnw+f3hckECHrbYU/fvbVzZyuXbsXtkXpYca6ygCDRJAoNeQ==} 517 | cpu: [ia32] 518 | os: [win32] 519 | 520 | '@rspack/binding-win32-ia32-msvc@1.3.15': 521 | resolution: {integrity: sha512-UsaWTYCjDiSCB0A0qETgZk4QvhwfG8gCrO4SJvA+QSEWOmgSai1YV70prFtLLIiyT9mDt1eU3tPWl1UWPRU/EQ==} 522 | cpu: [ia32] 523 | os: [win32] 524 | 525 | '@rspack/binding-win32-x64-msvc@1.3.12': 526 | resolution: {integrity: sha512-lCR0JfnYKpV+a6r2A2FdxyUKUS4tajePgpPJN5uXDgMGwrDtRqvx+d0BHhwjFudQVJq9VVbRaL89s2MQ6u+xYw==} 527 | cpu: [x64] 528 | os: [win32] 529 | 530 | '@rspack/binding-win32-x64-msvc@1.3.15': 531 | resolution: {integrity: sha512-ZnDIc9Es8EF94MirPDN+hOMt7tkb8nMEbRJFKLMmNd0ElNPgsql+1cY5SqyGRH1hsKB87KfSUQlhFiKZvzbfIg==} 532 | cpu: [x64] 533 | os: [win32] 534 | 535 | '@rspack/binding@1.3.12': 536 | resolution: {integrity: sha512-4Ic8lV0+LCBfTlH5aIOujIRWZOtgmG223zC4L3o8WY/+ESAgpdnK6lSSMfcYgRanYLAy3HOmFIp20jwskMpbAg==} 537 | 538 | '@rspack/binding@1.3.15': 539 | resolution: {integrity: sha512-utNPuJglLO5lW9XbwIqjB7+2ilMo6JkuVLTVdnNVKU94FW7asn9F/qV+d+MgjUVqU1QPCGm0NuGO9xhbgeJ7pg==} 540 | 541 | '@rspack/core@1.3.12': 542 | resolution: {integrity: sha512-mAPmV4LPPRgxpouUrGmAE4kpF1NEWJGyM5coebsjK/zaCMSjw3mkdxiU2b5cO44oIi0Ifv5iGkvwbdrZOvMyFA==} 543 | engines: {node: '>=16.0.0'} 544 | peerDependencies: 545 | '@swc/helpers': '>=0.5.1' 546 | peerDependenciesMeta: 547 | '@swc/helpers': 548 | optional: true 549 | 550 | '@rspack/core@1.3.15': 551 | resolution: {integrity: sha512-QuElIC8jXSKWAp0LSx18pmbhA7NiA5HGoVYesmai90UVxz98tud0KpMxTVCg+0lrLrnKZfCWN9kwjCxM5pGnrA==} 552 | engines: {node: '>=16.0.0'} 553 | peerDependencies: 554 | '@swc/helpers': '>=0.5.1' 555 | peerDependenciesMeta: 556 | '@swc/helpers': 557 | optional: true 558 | 559 | '@rspack/lite-tapable@1.0.1': 560 | resolution: {integrity: sha512-VynGOEsVw2s8TAlLf/uESfrgfrq2+rcXB1muPJYBWbsm1Oa6r5qVQhjA5ggM6z/coYPrsVMgovl3Ff7Q7OCp1w==} 561 | engines: {node: '>=16.0.0'} 562 | 563 | '@rstest/core@https://pkg.pr.new/web-infra-dev/rstest/@rstest/core@1b40438': 564 | resolution: {tarball: https://pkg.pr.new/web-infra-dev/rstest/@rstest/core@1b40438} 565 | version: 0.0.0 566 | engines: {node: '>=18.0.0'} 567 | hasBin: true 568 | 569 | '@swc/helpers@0.5.17': 570 | resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} 571 | 572 | '@types/chai@5.2.2': 573 | resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} 574 | 575 | '@types/deep-eql@4.0.2': 576 | resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 577 | 578 | '@types/node@22.15.29': 579 | resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==} 580 | 581 | '@vitest/expect@3.2.3': 582 | resolution: {integrity: sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==} 583 | 584 | '@vitest/pretty-format@3.2.3': 585 | resolution: {integrity: sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==} 586 | 587 | '@vitest/snapshot@3.2.3': 588 | resolution: {integrity: sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==} 589 | 590 | '@vitest/spy@3.2.3': 591 | resolution: {integrity: sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==} 592 | 593 | '@vitest/utils@3.2.3': 594 | resolution: {integrity: sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==} 595 | 596 | abort-controller@3.0.0: 597 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 598 | engines: {node: '>=6.5'} 599 | 600 | asn1.js@4.10.1: 601 | resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} 602 | 603 | assert@2.1.0: 604 | resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} 605 | 606 | assertion-error@2.0.1: 607 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 608 | engines: {node: '>=12'} 609 | 610 | available-typed-arrays@1.0.7: 611 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 612 | engines: {node: '>= 0.4'} 613 | 614 | base64-js@1.5.1: 615 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 616 | 617 | birpc@2.3.0: 618 | resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==} 619 | 620 | bn.js@4.12.0: 621 | resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} 622 | 623 | bn.js@5.2.1: 624 | resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} 625 | 626 | brorand@1.1.0: 627 | resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} 628 | 629 | browserify-aes@1.2.0: 630 | resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} 631 | 632 | browserify-cipher@1.0.1: 633 | resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} 634 | 635 | browserify-des@1.0.2: 636 | resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} 637 | 638 | browserify-rsa@4.1.0: 639 | resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} 640 | 641 | browserify-sign@4.2.3: 642 | resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} 643 | engines: {node: '>= 0.12'} 644 | 645 | browserify-zlib@0.2.0: 646 | resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} 647 | 648 | buffer-xor@1.0.3: 649 | resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} 650 | 651 | buffer@5.7.1: 652 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 653 | 654 | buffer@6.0.3: 655 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 656 | 657 | builtin-status-codes@3.0.0: 658 | resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} 659 | 660 | call-bind@1.0.7: 661 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 662 | engines: {node: '>= 0.4'} 663 | 664 | caniuse-lite@1.0.30001720: 665 | resolution: {integrity: sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==} 666 | 667 | chai@5.2.0: 668 | resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} 669 | engines: {node: '>=12'} 670 | 671 | check-error@2.1.1: 672 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 673 | engines: {node: '>= 16'} 674 | 675 | cipher-base@1.0.4: 676 | resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} 677 | 678 | console-browserify@1.2.0: 679 | resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} 680 | 681 | constants-browserify@1.0.0: 682 | resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} 683 | 684 | core-js@3.42.0: 685 | resolution: {integrity: sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==} 686 | 687 | core-util-is@1.0.3: 688 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 689 | 690 | create-ecdh@4.0.4: 691 | resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} 692 | 693 | create-hash@1.2.0: 694 | resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} 695 | 696 | create-hmac@1.1.7: 697 | resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} 698 | 699 | crypto-browserify@3.12.1: 700 | resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} 701 | engines: {node: '>= 0.10'} 702 | 703 | deep-eql@5.0.2: 704 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 705 | engines: {node: '>=6'} 706 | 707 | define-data-property@1.1.4: 708 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 709 | engines: {node: '>= 0.4'} 710 | 711 | define-properties@1.2.1: 712 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 713 | engines: {node: '>= 0.4'} 714 | 715 | des.js@1.1.0: 716 | resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} 717 | 718 | diffie-hellman@5.0.3: 719 | resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} 720 | 721 | domain-browser@5.7.0: 722 | resolution: {integrity: sha512-edTFu0M/7wO1pXY6GDxVNVW086uqwWYIHP98txhcPyV995X21JIH2DtYp33sQJOupYoXKe9RwTw2Ya2vWaquTQ==} 723 | engines: {node: '>=4'} 724 | 725 | elliptic@6.5.5: 726 | resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} 727 | 728 | es-define-property@1.0.0: 729 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 730 | engines: {node: '>= 0.4'} 731 | 732 | es-errors@1.3.0: 733 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 734 | engines: {node: '>= 0.4'} 735 | 736 | esbuild@0.25.0: 737 | resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} 738 | engines: {node: '>=18'} 739 | hasBin: true 740 | 741 | event-target-shim@5.0.1: 742 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 743 | engines: {node: '>=6'} 744 | 745 | events@3.3.0: 746 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 747 | engines: {node: '>=0.8.x'} 748 | 749 | evp_bytestokey@1.0.3: 750 | resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} 751 | 752 | fdir@6.4.4: 753 | resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} 754 | peerDependencies: 755 | picomatch: ^3 || ^4 756 | peerDependenciesMeta: 757 | picomatch: 758 | optional: true 759 | 760 | for-each@0.3.3: 761 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 762 | 763 | fsevents@2.3.2: 764 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 765 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 766 | os: [darwin] 767 | 768 | fsevents@2.3.3: 769 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 770 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 771 | os: [darwin] 772 | 773 | function-bind@1.1.2: 774 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 775 | 776 | get-intrinsic@1.2.4: 777 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 778 | engines: {node: '>= 0.4'} 779 | 780 | get-tsconfig@4.10.0: 781 | resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} 782 | 783 | gopd@1.0.1: 784 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 785 | 786 | has-property-descriptors@1.0.2: 787 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 788 | 789 | has-proto@1.0.3: 790 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 791 | engines: {node: '>= 0.4'} 792 | 793 | has-symbols@1.0.3: 794 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 795 | engines: {node: '>= 0.4'} 796 | 797 | has-tostringtag@1.0.2: 798 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 799 | engines: {node: '>= 0.4'} 800 | 801 | hash-base@3.0.4: 802 | resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==} 803 | engines: {node: '>=4'} 804 | 805 | hash-base@3.1.0: 806 | resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} 807 | engines: {node: '>=4'} 808 | 809 | hash.js@1.1.7: 810 | resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} 811 | 812 | hasown@2.0.2: 813 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 814 | engines: {node: '>= 0.4'} 815 | 816 | hmac-drbg@1.0.1: 817 | resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} 818 | 819 | https-browserify@1.0.0: 820 | resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} 821 | 822 | ieee754@1.2.1: 823 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 824 | 825 | inherits@2.0.4: 826 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 827 | 828 | is-arguments@1.1.1: 829 | resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} 830 | engines: {node: '>= 0.4'} 831 | 832 | is-callable@1.2.7: 833 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 834 | engines: {node: '>= 0.4'} 835 | 836 | is-generator-function@1.0.10: 837 | resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} 838 | engines: {node: '>= 0.4'} 839 | 840 | is-nan@1.3.2: 841 | resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} 842 | engines: {node: '>= 0.4'} 843 | 844 | is-typed-array@1.1.13: 845 | resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 846 | engines: {node: '>= 0.4'} 847 | 848 | isarray@1.0.0: 849 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 850 | 851 | jiti@2.4.2: 852 | resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} 853 | hasBin: true 854 | 855 | json5@2.2.3: 856 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 857 | engines: {node: '>=6'} 858 | hasBin: true 859 | 860 | loupe@3.1.3: 861 | resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} 862 | 863 | magic-string@0.30.17: 864 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 865 | 866 | md5.js@1.3.5: 867 | resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} 868 | 869 | miller-rabin@4.0.1: 870 | resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} 871 | hasBin: true 872 | 873 | minimalistic-assert@1.0.1: 874 | resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} 875 | 876 | minimalistic-crypto-utils@1.0.1: 877 | resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} 878 | 879 | minimist@1.2.8: 880 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 881 | 882 | nano-staged@0.8.0: 883 | resolution: {integrity: sha512-QSEqPGTCJbkHU2yLvfY6huqYPjdBrOaTMKatO1F8nCSrkQGXeKwtCiCnsdxnuMhbg3DTVywKaeWLGCE5oJpq0g==} 884 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 885 | hasBin: true 886 | 887 | object-inspect@1.13.2: 888 | resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} 889 | engines: {node: '>= 0.4'} 890 | 891 | object-is@1.1.6: 892 | resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} 893 | engines: {node: '>= 0.4'} 894 | 895 | object-keys@1.1.1: 896 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 897 | engines: {node: '>= 0.4'} 898 | 899 | object.assign@4.1.5: 900 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 901 | engines: {node: '>= 0.4'} 902 | 903 | os-browserify@0.3.0: 904 | resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} 905 | 906 | pako@1.0.11: 907 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} 908 | 909 | parse-asn1@5.1.7: 910 | resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} 911 | engines: {node: '>= 0.10'} 912 | 913 | path-browserify@1.0.1: 914 | resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 915 | 916 | pathe@2.0.3: 917 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 918 | 919 | pathval@2.0.0: 920 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 921 | engines: {node: '>= 14.16'} 922 | 923 | pbkdf2@3.1.2: 924 | resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} 925 | engines: {node: '>=0.12'} 926 | 927 | picocolors@1.0.0: 928 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 929 | 930 | picocolors@1.1.1: 931 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 932 | 933 | picomatch@4.0.2: 934 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 935 | engines: {node: '>=12'} 936 | 937 | playwright-core@1.52.0: 938 | resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} 939 | engines: {node: '>=18'} 940 | hasBin: true 941 | 942 | playwright@1.52.0: 943 | resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==} 944 | engines: {node: '>=18'} 945 | hasBin: true 946 | 947 | possible-typed-array-names@1.0.0: 948 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 949 | engines: {node: '>= 0.4'} 950 | 951 | process-nextick-args@2.0.1: 952 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 953 | 954 | process@0.11.10: 955 | resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} 956 | engines: {node: '>= 0.6.0'} 957 | 958 | public-encrypt@4.0.3: 959 | resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} 960 | 961 | punycode@1.4.1: 962 | resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} 963 | 964 | punycode@2.3.1: 965 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 966 | engines: {node: '>=6'} 967 | 968 | qs@6.13.0: 969 | resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} 970 | engines: {node: '>=0.6'} 971 | 972 | querystring-es3@0.2.1: 973 | resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} 974 | engines: {node: '>=0.4.x'} 975 | 976 | randombytes@2.1.0: 977 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} 978 | 979 | randomfill@1.0.4: 980 | resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} 981 | 982 | readable-stream@2.3.8: 983 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 984 | 985 | readable-stream@3.6.2: 986 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 987 | engines: {node: '>= 6'} 988 | 989 | readable-stream@4.7.0: 990 | resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} 991 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 992 | 993 | resolve-pkg-maps@1.0.0: 994 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 995 | 996 | ripemd160@2.0.2: 997 | resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} 998 | 999 | rsbuild-plugin-dts@0.9.1: 1000 | resolution: {integrity: sha512-04pkKrebuajsCpC8Vj2z4n6NFFxUYAdUdqSQRFGkGhdmururoDFYW0k9+ZQq9XrSQTlB01F/HFv5mAc0dwG/Qg==} 1001 | engines: {node: '>=16.7.0'} 1002 | peerDependencies: 1003 | '@microsoft/api-extractor': ^7 1004 | '@rsbuild/core': 1.x 1005 | typescript: ^5 1006 | peerDependenciesMeta: 1007 | '@microsoft/api-extractor': 1008 | optional: true 1009 | typescript: 1010 | optional: true 1011 | 1012 | safe-buffer@5.1.2: 1013 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1014 | 1015 | safe-buffer@5.2.1: 1016 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1017 | 1018 | set-function-length@1.2.2: 1019 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1020 | engines: {node: '>= 0.4'} 1021 | 1022 | setimmediate@1.0.5: 1023 | resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} 1024 | 1025 | sha.js@2.4.11: 1026 | resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} 1027 | hasBin: true 1028 | 1029 | side-channel@1.0.6: 1030 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 1031 | engines: {node: '>= 0.4'} 1032 | 1033 | simple-git-hooks@2.13.0: 1034 | resolution: {integrity: sha512-N+goiLxlkHJlyaYEglFypzVNMaNplPAk5syu0+OPp/Bk6dwVoXF6FfOw2vO0Dp+JHsBaI+w6cm8TnFl2Hw6tDA==} 1035 | hasBin: true 1036 | 1037 | std-env@3.9.0: 1038 | resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} 1039 | 1040 | stream-browserify@3.0.0: 1041 | resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} 1042 | 1043 | stream-http@3.2.0: 1044 | resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} 1045 | 1046 | string_decoder@1.1.1: 1047 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 1048 | 1049 | string_decoder@1.3.0: 1050 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1051 | 1052 | strip-bom@3.0.0: 1053 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1054 | engines: {node: '>=4'} 1055 | 1056 | timers-browserify@2.0.12: 1057 | resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} 1058 | engines: {node: '>=0.6.0'} 1059 | 1060 | tinyglobby@0.2.14: 1061 | resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} 1062 | engines: {node: '>=12.0.0'} 1063 | 1064 | tinypool@1.1.0: 1065 | resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==} 1066 | engines: {node: ^18.0.0 || >=20.0.0} 1067 | 1068 | tinyrainbow@2.0.0: 1069 | resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 1070 | engines: {node: '>=14.0.0'} 1071 | 1072 | tinyspy@4.0.3: 1073 | resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} 1074 | engines: {node: '>=14.0.0'} 1075 | 1076 | tsconfig-paths@4.2.0: 1077 | resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} 1078 | engines: {node: '>=6'} 1079 | 1080 | tslib@2.8.1: 1081 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1082 | 1083 | tsx@4.19.4: 1084 | resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} 1085 | engines: {node: '>=18.0.0'} 1086 | hasBin: true 1087 | 1088 | tty-browserify@0.0.1: 1089 | resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} 1090 | 1091 | typescript@5.8.3: 1092 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 1093 | engines: {node: '>=14.17'} 1094 | hasBin: true 1095 | 1096 | undici-types@6.21.0: 1097 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 1098 | 1099 | url@0.11.4: 1100 | resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} 1101 | engines: {node: '>= 0.4'} 1102 | 1103 | util-deprecate@1.0.2: 1104 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1105 | 1106 | util@0.12.5: 1107 | resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} 1108 | 1109 | vm-browserify@1.1.2: 1110 | resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} 1111 | 1112 | which-typed-array@1.1.15: 1113 | resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} 1114 | engines: {node: '>= 0.4'} 1115 | 1116 | xtend@4.0.2: 1117 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 1118 | engines: {node: '>=0.4'} 1119 | 1120 | snapshots: 1121 | 1122 | '@ast-grep/napi-darwin-arm64@0.37.0': 1123 | optional: true 1124 | 1125 | '@ast-grep/napi-darwin-x64@0.37.0': 1126 | optional: true 1127 | 1128 | '@ast-grep/napi-linux-arm64-gnu@0.37.0': 1129 | optional: true 1130 | 1131 | '@ast-grep/napi-linux-arm64-musl@0.37.0': 1132 | optional: true 1133 | 1134 | '@ast-grep/napi-linux-x64-gnu@0.37.0': 1135 | optional: true 1136 | 1137 | '@ast-grep/napi-linux-x64-musl@0.37.0': 1138 | optional: true 1139 | 1140 | '@ast-grep/napi-win32-arm64-msvc@0.37.0': 1141 | optional: true 1142 | 1143 | '@ast-grep/napi-win32-ia32-msvc@0.37.0': 1144 | optional: true 1145 | 1146 | '@ast-grep/napi-win32-x64-msvc@0.37.0': 1147 | optional: true 1148 | 1149 | '@ast-grep/napi@0.37.0': 1150 | optionalDependencies: 1151 | '@ast-grep/napi-darwin-arm64': 0.37.0 1152 | '@ast-grep/napi-darwin-x64': 0.37.0 1153 | '@ast-grep/napi-linux-arm64-gnu': 0.37.0 1154 | '@ast-grep/napi-linux-arm64-musl': 0.37.0 1155 | '@ast-grep/napi-linux-x64-gnu': 0.37.0 1156 | '@ast-grep/napi-linux-x64-musl': 0.37.0 1157 | '@ast-grep/napi-win32-arm64-msvc': 0.37.0 1158 | '@ast-grep/napi-win32-ia32-msvc': 0.37.0 1159 | '@ast-grep/napi-win32-x64-msvc': 0.37.0 1160 | 1161 | '@biomejs/biome@1.9.4': 1162 | optionalDependencies: 1163 | '@biomejs/cli-darwin-arm64': 1.9.4 1164 | '@biomejs/cli-darwin-x64': 1.9.4 1165 | '@biomejs/cli-linux-arm64': 1.9.4 1166 | '@biomejs/cli-linux-arm64-musl': 1.9.4 1167 | '@biomejs/cli-linux-x64': 1.9.4 1168 | '@biomejs/cli-linux-x64-musl': 1.9.4 1169 | '@biomejs/cli-win32-arm64': 1.9.4 1170 | '@biomejs/cli-win32-x64': 1.9.4 1171 | 1172 | '@biomejs/cli-darwin-arm64@1.9.4': 1173 | optional: true 1174 | 1175 | '@biomejs/cli-darwin-x64@1.9.4': 1176 | optional: true 1177 | 1178 | '@biomejs/cli-linux-arm64-musl@1.9.4': 1179 | optional: true 1180 | 1181 | '@biomejs/cli-linux-arm64@1.9.4': 1182 | optional: true 1183 | 1184 | '@biomejs/cli-linux-x64-musl@1.9.4': 1185 | optional: true 1186 | 1187 | '@biomejs/cli-linux-x64@1.9.4': 1188 | optional: true 1189 | 1190 | '@biomejs/cli-win32-arm64@1.9.4': 1191 | optional: true 1192 | 1193 | '@biomejs/cli-win32-x64@1.9.4': 1194 | optional: true 1195 | 1196 | '@esbuild/aix-ppc64@0.25.0': 1197 | optional: true 1198 | 1199 | '@esbuild/android-arm64@0.25.0': 1200 | optional: true 1201 | 1202 | '@esbuild/android-arm@0.25.0': 1203 | optional: true 1204 | 1205 | '@esbuild/android-x64@0.25.0': 1206 | optional: true 1207 | 1208 | '@esbuild/darwin-arm64@0.25.0': 1209 | optional: true 1210 | 1211 | '@esbuild/darwin-x64@0.25.0': 1212 | optional: true 1213 | 1214 | '@esbuild/freebsd-arm64@0.25.0': 1215 | optional: true 1216 | 1217 | '@esbuild/freebsd-x64@0.25.0': 1218 | optional: true 1219 | 1220 | '@esbuild/linux-arm64@0.25.0': 1221 | optional: true 1222 | 1223 | '@esbuild/linux-arm@0.25.0': 1224 | optional: true 1225 | 1226 | '@esbuild/linux-ia32@0.25.0': 1227 | optional: true 1228 | 1229 | '@esbuild/linux-loong64@0.25.0': 1230 | optional: true 1231 | 1232 | '@esbuild/linux-mips64el@0.25.0': 1233 | optional: true 1234 | 1235 | '@esbuild/linux-ppc64@0.25.0': 1236 | optional: true 1237 | 1238 | '@esbuild/linux-riscv64@0.25.0': 1239 | optional: true 1240 | 1241 | '@esbuild/linux-s390x@0.25.0': 1242 | optional: true 1243 | 1244 | '@esbuild/linux-x64@0.25.0': 1245 | optional: true 1246 | 1247 | '@esbuild/netbsd-arm64@0.25.0': 1248 | optional: true 1249 | 1250 | '@esbuild/netbsd-x64@0.25.0': 1251 | optional: true 1252 | 1253 | '@esbuild/openbsd-arm64@0.25.0': 1254 | optional: true 1255 | 1256 | '@esbuild/openbsd-x64@0.25.0': 1257 | optional: true 1258 | 1259 | '@esbuild/sunos-x64@0.25.0': 1260 | optional: true 1261 | 1262 | '@esbuild/win32-arm64@0.25.0': 1263 | optional: true 1264 | 1265 | '@esbuild/win32-ia32@0.25.0': 1266 | optional: true 1267 | 1268 | '@esbuild/win32-x64@0.25.0': 1269 | optional: true 1270 | 1271 | '@jridgewell/sourcemap-codec@1.5.0': {} 1272 | 1273 | '@module-federation/error-codes@0.14.0': {} 1274 | 1275 | '@module-federation/error-codes@0.14.3': {} 1276 | 1277 | '@module-federation/runtime-core@0.14.0': 1278 | dependencies: 1279 | '@module-federation/error-codes': 0.14.0 1280 | '@module-federation/sdk': 0.14.0 1281 | 1282 | '@module-federation/runtime-core@0.14.3': 1283 | dependencies: 1284 | '@module-federation/error-codes': 0.14.3 1285 | '@module-federation/sdk': 0.14.3 1286 | 1287 | '@module-federation/runtime-tools@0.14.0': 1288 | dependencies: 1289 | '@module-federation/runtime': 0.14.0 1290 | '@module-federation/webpack-bundler-runtime': 0.14.0 1291 | 1292 | '@module-federation/runtime-tools@0.14.3': 1293 | dependencies: 1294 | '@module-federation/runtime': 0.14.3 1295 | '@module-federation/webpack-bundler-runtime': 0.14.3 1296 | 1297 | '@module-federation/runtime@0.14.0': 1298 | dependencies: 1299 | '@module-federation/error-codes': 0.14.0 1300 | '@module-federation/runtime-core': 0.14.0 1301 | '@module-federation/sdk': 0.14.0 1302 | 1303 | '@module-federation/runtime@0.14.3': 1304 | dependencies: 1305 | '@module-federation/error-codes': 0.14.3 1306 | '@module-federation/runtime-core': 0.14.3 1307 | '@module-federation/sdk': 0.14.3 1308 | 1309 | '@module-federation/sdk@0.14.0': {} 1310 | 1311 | '@module-federation/sdk@0.14.3': {} 1312 | 1313 | '@module-federation/webpack-bundler-runtime@0.14.0': 1314 | dependencies: 1315 | '@module-federation/runtime': 0.14.0 1316 | '@module-federation/sdk': 0.14.0 1317 | 1318 | '@module-federation/webpack-bundler-runtime@0.14.3': 1319 | dependencies: 1320 | '@module-federation/runtime': 0.14.3 1321 | '@module-federation/sdk': 0.14.3 1322 | 1323 | '@playwright/test@1.52.0': 1324 | dependencies: 1325 | playwright: 1.52.0 1326 | 1327 | '@rsbuild/core@1.3.22': 1328 | dependencies: 1329 | '@rspack/core': 1.3.12(@swc/helpers@0.5.17) 1330 | '@rspack/lite-tapable': 1.0.1 1331 | '@swc/helpers': 0.5.17 1332 | core-js: 3.42.0 1333 | jiti: 2.4.2 1334 | 1335 | '@rsbuild/core@1.4.0-beta.2': 1336 | dependencies: 1337 | '@rspack/core': 1.3.15(@swc/helpers@0.5.17) 1338 | '@rspack/lite-tapable': 1.0.1 1339 | '@swc/helpers': 0.5.17 1340 | core-js: 3.42.0 1341 | jiti: 2.4.2 1342 | 1343 | '@rslib/core@0.9.1(typescript@5.8.3)': 1344 | dependencies: 1345 | '@rsbuild/core': 1.3.22 1346 | rsbuild-plugin-dts: 0.9.1(@rsbuild/core@1.3.22)(typescript@5.8.3) 1347 | tinyglobby: 0.2.14 1348 | optionalDependencies: 1349 | typescript: 5.8.3 1350 | 1351 | '@rspack/binding-darwin-arm64@1.3.12': 1352 | optional: true 1353 | 1354 | '@rspack/binding-darwin-arm64@1.3.15': 1355 | optional: true 1356 | 1357 | '@rspack/binding-darwin-x64@1.3.12': 1358 | optional: true 1359 | 1360 | '@rspack/binding-darwin-x64@1.3.15': 1361 | optional: true 1362 | 1363 | '@rspack/binding-linux-arm64-gnu@1.3.12': 1364 | optional: true 1365 | 1366 | '@rspack/binding-linux-arm64-gnu@1.3.15': 1367 | optional: true 1368 | 1369 | '@rspack/binding-linux-arm64-musl@1.3.12': 1370 | optional: true 1371 | 1372 | '@rspack/binding-linux-arm64-musl@1.3.15': 1373 | optional: true 1374 | 1375 | '@rspack/binding-linux-x64-gnu@1.3.12': 1376 | optional: true 1377 | 1378 | '@rspack/binding-linux-x64-gnu@1.3.15': 1379 | optional: true 1380 | 1381 | '@rspack/binding-linux-x64-musl@1.3.12': 1382 | optional: true 1383 | 1384 | '@rspack/binding-linux-x64-musl@1.3.15': 1385 | optional: true 1386 | 1387 | '@rspack/binding-win32-arm64-msvc@1.3.12': 1388 | optional: true 1389 | 1390 | '@rspack/binding-win32-arm64-msvc@1.3.15': 1391 | optional: true 1392 | 1393 | '@rspack/binding-win32-ia32-msvc@1.3.12': 1394 | optional: true 1395 | 1396 | '@rspack/binding-win32-ia32-msvc@1.3.15': 1397 | optional: true 1398 | 1399 | '@rspack/binding-win32-x64-msvc@1.3.12': 1400 | optional: true 1401 | 1402 | '@rspack/binding-win32-x64-msvc@1.3.15': 1403 | optional: true 1404 | 1405 | '@rspack/binding@1.3.12': 1406 | optionalDependencies: 1407 | '@rspack/binding-darwin-arm64': 1.3.12 1408 | '@rspack/binding-darwin-x64': 1.3.12 1409 | '@rspack/binding-linux-arm64-gnu': 1.3.12 1410 | '@rspack/binding-linux-arm64-musl': 1.3.12 1411 | '@rspack/binding-linux-x64-gnu': 1.3.12 1412 | '@rspack/binding-linux-x64-musl': 1.3.12 1413 | '@rspack/binding-win32-arm64-msvc': 1.3.12 1414 | '@rspack/binding-win32-ia32-msvc': 1.3.12 1415 | '@rspack/binding-win32-x64-msvc': 1.3.12 1416 | 1417 | '@rspack/binding@1.3.15': 1418 | optionalDependencies: 1419 | '@rspack/binding-darwin-arm64': 1.3.15 1420 | '@rspack/binding-darwin-x64': 1.3.15 1421 | '@rspack/binding-linux-arm64-gnu': 1.3.15 1422 | '@rspack/binding-linux-arm64-musl': 1.3.15 1423 | '@rspack/binding-linux-x64-gnu': 1.3.15 1424 | '@rspack/binding-linux-x64-musl': 1.3.15 1425 | '@rspack/binding-win32-arm64-msvc': 1.3.15 1426 | '@rspack/binding-win32-ia32-msvc': 1.3.15 1427 | '@rspack/binding-win32-x64-msvc': 1.3.15 1428 | 1429 | '@rspack/core@1.3.12(@swc/helpers@0.5.17)': 1430 | dependencies: 1431 | '@module-federation/runtime-tools': 0.14.0 1432 | '@rspack/binding': 1.3.12 1433 | '@rspack/lite-tapable': 1.0.1 1434 | caniuse-lite: 1.0.30001720 1435 | optionalDependencies: 1436 | '@swc/helpers': 0.5.17 1437 | 1438 | '@rspack/core@1.3.15(@swc/helpers@0.5.17)': 1439 | dependencies: 1440 | '@module-federation/runtime-tools': 0.14.3 1441 | '@rspack/binding': 1.3.15 1442 | '@rspack/lite-tapable': 1.0.1 1443 | optionalDependencies: 1444 | '@swc/helpers': 0.5.17 1445 | 1446 | '@rspack/lite-tapable@1.0.1': {} 1447 | 1448 | '@rstest/core@https://pkg.pr.new/web-infra-dev/rstest/@rstest/core@1b40438': 1449 | dependencies: 1450 | '@rsbuild/core': 1.4.0-beta.2 1451 | '@types/chai': 5.2.2 1452 | '@vitest/expect': 3.2.3 1453 | '@vitest/snapshot': 3.2.3 1454 | birpc: 2.3.0 1455 | chai: 5.2.0 1456 | pathe: 2.0.3 1457 | std-env: 3.9.0 1458 | tinypool: 1.1.0 1459 | 1460 | '@swc/helpers@0.5.17': 1461 | dependencies: 1462 | tslib: 2.8.1 1463 | 1464 | '@types/chai@5.2.2': 1465 | dependencies: 1466 | '@types/deep-eql': 4.0.2 1467 | 1468 | '@types/deep-eql@4.0.2': {} 1469 | 1470 | '@types/node@22.15.29': 1471 | dependencies: 1472 | undici-types: 6.21.0 1473 | 1474 | '@vitest/expect@3.2.3': 1475 | dependencies: 1476 | '@types/chai': 5.2.2 1477 | '@vitest/spy': 3.2.3 1478 | '@vitest/utils': 3.2.3 1479 | chai: 5.2.0 1480 | tinyrainbow: 2.0.0 1481 | 1482 | '@vitest/pretty-format@3.2.3': 1483 | dependencies: 1484 | tinyrainbow: 2.0.0 1485 | 1486 | '@vitest/snapshot@3.2.3': 1487 | dependencies: 1488 | '@vitest/pretty-format': 3.2.3 1489 | magic-string: 0.30.17 1490 | pathe: 2.0.3 1491 | 1492 | '@vitest/spy@3.2.3': 1493 | dependencies: 1494 | tinyspy: 4.0.3 1495 | 1496 | '@vitest/utils@3.2.3': 1497 | dependencies: 1498 | '@vitest/pretty-format': 3.2.3 1499 | loupe: 3.1.3 1500 | tinyrainbow: 2.0.0 1501 | 1502 | abort-controller@3.0.0: 1503 | dependencies: 1504 | event-target-shim: 5.0.1 1505 | 1506 | asn1.js@4.10.1: 1507 | dependencies: 1508 | bn.js: 4.12.0 1509 | inherits: 2.0.4 1510 | minimalistic-assert: 1.0.1 1511 | 1512 | assert@2.1.0: 1513 | dependencies: 1514 | call-bind: 1.0.7 1515 | is-nan: 1.3.2 1516 | object-is: 1.1.6 1517 | object.assign: 4.1.5 1518 | util: 0.12.5 1519 | 1520 | assertion-error@2.0.1: {} 1521 | 1522 | available-typed-arrays@1.0.7: 1523 | dependencies: 1524 | possible-typed-array-names: 1.0.0 1525 | 1526 | base64-js@1.5.1: {} 1527 | 1528 | birpc@2.3.0: {} 1529 | 1530 | bn.js@4.12.0: {} 1531 | 1532 | bn.js@5.2.1: {} 1533 | 1534 | brorand@1.1.0: {} 1535 | 1536 | browserify-aes@1.2.0: 1537 | dependencies: 1538 | buffer-xor: 1.0.3 1539 | cipher-base: 1.0.4 1540 | create-hash: 1.2.0 1541 | evp_bytestokey: 1.0.3 1542 | inherits: 2.0.4 1543 | safe-buffer: 5.2.1 1544 | 1545 | browserify-cipher@1.0.1: 1546 | dependencies: 1547 | browserify-aes: 1.2.0 1548 | browserify-des: 1.0.2 1549 | evp_bytestokey: 1.0.3 1550 | 1551 | browserify-des@1.0.2: 1552 | dependencies: 1553 | cipher-base: 1.0.4 1554 | des.js: 1.1.0 1555 | inherits: 2.0.4 1556 | safe-buffer: 5.2.1 1557 | 1558 | browserify-rsa@4.1.0: 1559 | dependencies: 1560 | bn.js: 5.2.1 1561 | randombytes: 2.1.0 1562 | 1563 | browserify-sign@4.2.3: 1564 | dependencies: 1565 | bn.js: 5.2.1 1566 | browserify-rsa: 4.1.0 1567 | create-hash: 1.2.0 1568 | create-hmac: 1.1.7 1569 | elliptic: 6.5.5 1570 | hash-base: 3.0.4 1571 | inherits: 2.0.4 1572 | parse-asn1: 5.1.7 1573 | readable-stream: 2.3.8 1574 | safe-buffer: 5.2.1 1575 | 1576 | browserify-zlib@0.2.0: 1577 | dependencies: 1578 | pako: 1.0.11 1579 | 1580 | buffer-xor@1.0.3: {} 1581 | 1582 | buffer@5.7.1: 1583 | dependencies: 1584 | base64-js: 1.5.1 1585 | ieee754: 1.2.1 1586 | 1587 | buffer@6.0.3: 1588 | dependencies: 1589 | base64-js: 1.5.1 1590 | ieee754: 1.2.1 1591 | 1592 | builtin-status-codes@3.0.0: {} 1593 | 1594 | call-bind@1.0.7: 1595 | dependencies: 1596 | es-define-property: 1.0.0 1597 | es-errors: 1.3.0 1598 | function-bind: 1.1.2 1599 | get-intrinsic: 1.2.4 1600 | set-function-length: 1.2.2 1601 | 1602 | caniuse-lite@1.0.30001720: {} 1603 | 1604 | chai@5.2.0: 1605 | dependencies: 1606 | assertion-error: 2.0.1 1607 | check-error: 2.1.1 1608 | deep-eql: 5.0.2 1609 | loupe: 3.1.3 1610 | pathval: 2.0.0 1611 | 1612 | check-error@2.1.1: {} 1613 | 1614 | cipher-base@1.0.4: 1615 | dependencies: 1616 | inherits: 2.0.4 1617 | safe-buffer: 5.2.1 1618 | 1619 | console-browserify@1.2.0: {} 1620 | 1621 | constants-browserify@1.0.0: {} 1622 | 1623 | core-js@3.42.0: {} 1624 | 1625 | core-util-is@1.0.3: {} 1626 | 1627 | create-ecdh@4.0.4: 1628 | dependencies: 1629 | bn.js: 4.12.0 1630 | elliptic: 6.5.5 1631 | 1632 | create-hash@1.2.0: 1633 | dependencies: 1634 | cipher-base: 1.0.4 1635 | inherits: 2.0.4 1636 | md5.js: 1.3.5 1637 | ripemd160: 2.0.2 1638 | sha.js: 2.4.11 1639 | 1640 | create-hmac@1.1.7: 1641 | dependencies: 1642 | cipher-base: 1.0.4 1643 | create-hash: 1.2.0 1644 | inherits: 2.0.4 1645 | ripemd160: 2.0.2 1646 | safe-buffer: 5.2.1 1647 | sha.js: 2.4.11 1648 | 1649 | crypto-browserify@3.12.1: 1650 | dependencies: 1651 | browserify-cipher: 1.0.1 1652 | browserify-sign: 4.2.3 1653 | create-ecdh: 4.0.4 1654 | create-hash: 1.2.0 1655 | create-hmac: 1.1.7 1656 | diffie-hellman: 5.0.3 1657 | hash-base: 3.0.4 1658 | inherits: 2.0.4 1659 | pbkdf2: 3.1.2 1660 | public-encrypt: 4.0.3 1661 | randombytes: 2.1.0 1662 | randomfill: 1.0.4 1663 | 1664 | deep-eql@5.0.2: {} 1665 | 1666 | define-data-property@1.1.4: 1667 | dependencies: 1668 | es-define-property: 1.0.0 1669 | es-errors: 1.3.0 1670 | gopd: 1.0.1 1671 | 1672 | define-properties@1.2.1: 1673 | dependencies: 1674 | define-data-property: 1.1.4 1675 | has-property-descriptors: 1.0.2 1676 | object-keys: 1.1.1 1677 | 1678 | des.js@1.1.0: 1679 | dependencies: 1680 | inherits: 2.0.4 1681 | minimalistic-assert: 1.0.1 1682 | 1683 | diffie-hellman@5.0.3: 1684 | dependencies: 1685 | bn.js: 4.12.0 1686 | miller-rabin: 4.0.1 1687 | randombytes: 2.1.0 1688 | 1689 | domain-browser@5.7.0: {} 1690 | 1691 | elliptic@6.5.5: 1692 | dependencies: 1693 | bn.js: 4.12.0 1694 | brorand: 1.1.0 1695 | hash.js: 1.1.7 1696 | hmac-drbg: 1.0.1 1697 | inherits: 2.0.4 1698 | minimalistic-assert: 1.0.1 1699 | minimalistic-crypto-utils: 1.0.1 1700 | 1701 | es-define-property@1.0.0: 1702 | dependencies: 1703 | get-intrinsic: 1.2.4 1704 | 1705 | es-errors@1.3.0: {} 1706 | 1707 | esbuild@0.25.0: 1708 | optionalDependencies: 1709 | '@esbuild/aix-ppc64': 0.25.0 1710 | '@esbuild/android-arm': 0.25.0 1711 | '@esbuild/android-arm64': 0.25.0 1712 | '@esbuild/android-x64': 0.25.0 1713 | '@esbuild/darwin-arm64': 0.25.0 1714 | '@esbuild/darwin-x64': 0.25.0 1715 | '@esbuild/freebsd-arm64': 0.25.0 1716 | '@esbuild/freebsd-x64': 0.25.0 1717 | '@esbuild/linux-arm': 0.25.0 1718 | '@esbuild/linux-arm64': 0.25.0 1719 | '@esbuild/linux-ia32': 0.25.0 1720 | '@esbuild/linux-loong64': 0.25.0 1721 | '@esbuild/linux-mips64el': 0.25.0 1722 | '@esbuild/linux-ppc64': 0.25.0 1723 | '@esbuild/linux-riscv64': 0.25.0 1724 | '@esbuild/linux-s390x': 0.25.0 1725 | '@esbuild/linux-x64': 0.25.0 1726 | '@esbuild/netbsd-arm64': 0.25.0 1727 | '@esbuild/netbsd-x64': 0.25.0 1728 | '@esbuild/openbsd-arm64': 0.25.0 1729 | '@esbuild/openbsd-x64': 0.25.0 1730 | '@esbuild/sunos-x64': 0.25.0 1731 | '@esbuild/win32-arm64': 0.25.0 1732 | '@esbuild/win32-ia32': 0.25.0 1733 | '@esbuild/win32-x64': 0.25.0 1734 | 1735 | event-target-shim@5.0.1: {} 1736 | 1737 | events@3.3.0: {} 1738 | 1739 | evp_bytestokey@1.0.3: 1740 | dependencies: 1741 | md5.js: 1.3.5 1742 | safe-buffer: 5.2.1 1743 | 1744 | fdir@6.4.4(picomatch@4.0.2): 1745 | optionalDependencies: 1746 | picomatch: 4.0.2 1747 | 1748 | for-each@0.3.3: 1749 | dependencies: 1750 | is-callable: 1.2.7 1751 | 1752 | fsevents@2.3.2: 1753 | optional: true 1754 | 1755 | fsevents@2.3.3: 1756 | optional: true 1757 | 1758 | function-bind@1.1.2: {} 1759 | 1760 | get-intrinsic@1.2.4: 1761 | dependencies: 1762 | es-errors: 1.3.0 1763 | function-bind: 1.1.2 1764 | has-proto: 1.0.3 1765 | has-symbols: 1.0.3 1766 | hasown: 2.0.2 1767 | 1768 | get-tsconfig@4.10.0: 1769 | dependencies: 1770 | resolve-pkg-maps: 1.0.0 1771 | 1772 | gopd@1.0.1: 1773 | dependencies: 1774 | get-intrinsic: 1.2.4 1775 | 1776 | has-property-descriptors@1.0.2: 1777 | dependencies: 1778 | es-define-property: 1.0.0 1779 | 1780 | has-proto@1.0.3: {} 1781 | 1782 | has-symbols@1.0.3: {} 1783 | 1784 | has-tostringtag@1.0.2: 1785 | dependencies: 1786 | has-symbols: 1.0.3 1787 | 1788 | hash-base@3.0.4: 1789 | dependencies: 1790 | inherits: 2.0.4 1791 | safe-buffer: 5.2.1 1792 | 1793 | hash-base@3.1.0: 1794 | dependencies: 1795 | inherits: 2.0.4 1796 | readable-stream: 3.6.2 1797 | safe-buffer: 5.2.1 1798 | 1799 | hash.js@1.1.7: 1800 | dependencies: 1801 | inherits: 2.0.4 1802 | minimalistic-assert: 1.0.1 1803 | 1804 | hasown@2.0.2: 1805 | dependencies: 1806 | function-bind: 1.1.2 1807 | 1808 | hmac-drbg@1.0.1: 1809 | dependencies: 1810 | hash.js: 1.1.7 1811 | minimalistic-assert: 1.0.1 1812 | minimalistic-crypto-utils: 1.0.1 1813 | 1814 | https-browserify@1.0.0: {} 1815 | 1816 | ieee754@1.2.1: {} 1817 | 1818 | inherits@2.0.4: {} 1819 | 1820 | is-arguments@1.1.1: 1821 | dependencies: 1822 | call-bind: 1.0.7 1823 | has-tostringtag: 1.0.2 1824 | 1825 | is-callable@1.2.7: {} 1826 | 1827 | is-generator-function@1.0.10: 1828 | dependencies: 1829 | has-tostringtag: 1.0.2 1830 | 1831 | is-nan@1.3.2: 1832 | dependencies: 1833 | call-bind: 1.0.7 1834 | define-properties: 1.2.1 1835 | 1836 | is-typed-array@1.1.13: 1837 | dependencies: 1838 | which-typed-array: 1.1.15 1839 | 1840 | isarray@1.0.0: {} 1841 | 1842 | jiti@2.4.2: {} 1843 | 1844 | json5@2.2.3: {} 1845 | 1846 | loupe@3.1.3: {} 1847 | 1848 | magic-string@0.30.17: 1849 | dependencies: 1850 | '@jridgewell/sourcemap-codec': 1.5.0 1851 | 1852 | md5.js@1.3.5: 1853 | dependencies: 1854 | hash-base: 3.1.0 1855 | inherits: 2.0.4 1856 | safe-buffer: 5.2.1 1857 | 1858 | miller-rabin@4.0.1: 1859 | dependencies: 1860 | bn.js: 4.12.0 1861 | brorand: 1.1.0 1862 | 1863 | minimalistic-assert@1.0.1: {} 1864 | 1865 | minimalistic-crypto-utils@1.0.1: {} 1866 | 1867 | minimist@1.2.8: {} 1868 | 1869 | nano-staged@0.8.0: 1870 | dependencies: 1871 | picocolors: 1.0.0 1872 | 1873 | object-inspect@1.13.2: {} 1874 | 1875 | object-is@1.1.6: 1876 | dependencies: 1877 | call-bind: 1.0.7 1878 | define-properties: 1.2.1 1879 | 1880 | object-keys@1.1.1: {} 1881 | 1882 | object.assign@4.1.5: 1883 | dependencies: 1884 | call-bind: 1.0.7 1885 | define-properties: 1.2.1 1886 | has-symbols: 1.0.3 1887 | object-keys: 1.1.1 1888 | 1889 | os-browserify@0.3.0: {} 1890 | 1891 | pako@1.0.11: {} 1892 | 1893 | parse-asn1@5.1.7: 1894 | dependencies: 1895 | asn1.js: 4.10.1 1896 | browserify-aes: 1.2.0 1897 | evp_bytestokey: 1.0.3 1898 | hash-base: 3.0.4 1899 | pbkdf2: 3.1.2 1900 | safe-buffer: 5.2.1 1901 | 1902 | path-browserify@1.0.1: {} 1903 | 1904 | pathe@2.0.3: {} 1905 | 1906 | pathval@2.0.0: {} 1907 | 1908 | pbkdf2@3.1.2: 1909 | dependencies: 1910 | create-hash: 1.2.0 1911 | create-hmac: 1.1.7 1912 | ripemd160: 2.0.2 1913 | safe-buffer: 5.2.1 1914 | sha.js: 2.4.11 1915 | 1916 | picocolors@1.0.0: {} 1917 | 1918 | picocolors@1.1.1: {} 1919 | 1920 | picomatch@4.0.2: {} 1921 | 1922 | playwright-core@1.52.0: {} 1923 | 1924 | playwright@1.52.0: 1925 | dependencies: 1926 | playwright-core: 1.52.0 1927 | optionalDependencies: 1928 | fsevents: 2.3.2 1929 | 1930 | possible-typed-array-names@1.0.0: {} 1931 | 1932 | process-nextick-args@2.0.1: {} 1933 | 1934 | process@0.11.10: {} 1935 | 1936 | public-encrypt@4.0.3: 1937 | dependencies: 1938 | bn.js: 4.12.0 1939 | browserify-rsa: 4.1.0 1940 | create-hash: 1.2.0 1941 | parse-asn1: 5.1.7 1942 | randombytes: 2.1.0 1943 | safe-buffer: 5.2.1 1944 | 1945 | punycode@1.4.1: {} 1946 | 1947 | punycode@2.3.1: {} 1948 | 1949 | qs@6.13.0: 1950 | dependencies: 1951 | side-channel: 1.0.6 1952 | 1953 | querystring-es3@0.2.1: {} 1954 | 1955 | randombytes@2.1.0: 1956 | dependencies: 1957 | safe-buffer: 5.2.1 1958 | 1959 | randomfill@1.0.4: 1960 | dependencies: 1961 | randombytes: 2.1.0 1962 | safe-buffer: 5.2.1 1963 | 1964 | readable-stream@2.3.8: 1965 | dependencies: 1966 | core-util-is: 1.0.3 1967 | inherits: 2.0.4 1968 | isarray: 1.0.0 1969 | process-nextick-args: 2.0.1 1970 | safe-buffer: 5.1.2 1971 | string_decoder: 1.1.1 1972 | util-deprecate: 1.0.2 1973 | 1974 | readable-stream@3.6.2: 1975 | dependencies: 1976 | inherits: 2.0.4 1977 | string_decoder: 1.3.0 1978 | util-deprecate: 1.0.2 1979 | 1980 | readable-stream@4.7.0: 1981 | dependencies: 1982 | abort-controller: 3.0.0 1983 | buffer: 6.0.3 1984 | events: 3.3.0 1985 | process: 0.11.10 1986 | string_decoder: 1.3.0 1987 | 1988 | resolve-pkg-maps@1.0.0: {} 1989 | 1990 | ripemd160@2.0.2: 1991 | dependencies: 1992 | hash-base: 3.1.0 1993 | inherits: 2.0.4 1994 | 1995 | rsbuild-plugin-dts@0.9.1(@rsbuild/core@1.3.22)(typescript@5.8.3): 1996 | dependencies: 1997 | '@ast-grep/napi': 0.37.0 1998 | '@rsbuild/core': 1.3.22 1999 | magic-string: 0.30.17 2000 | picocolors: 1.1.1 2001 | tinyglobby: 0.2.14 2002 | tsconfig-paths: 4.2.0 2003 | optionalDependencies: 2004 | typescript: 5.8.3 2005 | 2006 | safe-buffer@5.1.2: {} 2007 | 2008 | safe-buffer@5.2.1: {} 2009 | 2010 | set-function-length@1.2.2: 2011 | dependencies: 2012 | define-data-property: 1.1.4 2013 | es-errors: 1.3.0 2014 | function-bind: 1.1.2 2015 | get-intrinsic: 1.2.4 2016 | gopd: 1.0.1 2017 | has-property-descriptors: 1.0.2 2018 | 2019 | setimmediate@1.0.5: {} 2020 | 2021 | sha.js@2.4.11: 2022 | dependencies: 2023 | inherits: 2.0.4 2024 | safe-buffer: 5.2.1 2025 | 2026 | side-channel@1.0.6: 2027 | dependencies: 2028 | call-bind: 1.0.7 2029 | es-errors: 1.3.0 2030 | get-intrinsic: 1.2.4 2031 | object-inspect: 1.13.2 2032 | 2033 | simple-git-hooks@2.13.0: {} 2034 | 2035 | std-env@3.9.0: {} 2036 | 2037 | stream-browserify@3.0.0: 2038 | dependencies: 2039 | inherits: 2.0.4 2040 | readable-stream: 3.6.2 2041 | 2042 | stream-http@3.2.0: 2043 | dependencies: 2044 | builtin-status-codes: 3.0.0 2045 | inherits: 2.0.4 2046 | readable-stream: 3.6.2 2047 | xtend: 4.0.2 2048 | 2049 | string_decoder@1.1.1: 2050 | dependencies: 2051 | safe-buffer: 5.1.2 2052 | 2053 | string_decoder@1.3.0: 2054 | dependencies: 2055 | safe-buffer: 5.2.1 2056 | 2057 | strip-bom@3.0.0: {} 2058 | 2059 | timers-browserify@2.0.12: 2060 | dependencies: 2061 | setimmediate: 1.0.5 2062 | 2063 | tinyglobby@0.2.14: 2064 | dependencies: 2065 | fdir: 6.4.4(picomatch@4.0.2) 2066 | picomatch: 4.0.2 2067 | 2068 | tinypool@1.1.0: {} 2069 | 2070 | tinyrainbow@2.0.0: {} 2071 | 2072 | tinyspy@4.0.3: {} 2073 | 2074 | tsconfig-paths@4.2.0: 2075 | dependencies: 2076 | json5: 2.2.3 2077 | minimist: 1.2.8 2078 | strip-bom: 3.0.0 2079 | 2080 | tslib@2.8.1: {} 2081 | 2082 | tsx@4.19.4: 2083 | dependencies: 2084 | esbuild: 0.25.0 2085 | get-tsconfig: 4.10.0 2086 | optionalDependencies: 2087 | fsevents: 2.3.3 2088 | 2089 | tty-browserify@0.0.1: {} 2090 | 2091 | typescript@5.8.3: {} 2092 | 2093 | undici-types@6.21.0: {} 2094 | 2095 | url@0.11.4: 2096 | dependencies: 2097 | punycode: 1.4.1 2098 | qs: 6.13.0 2099 | 2100 | util-deprecate@1.0.2: {} 2101 | 2102 | util@0.12.5: 2103 | dependencies: 2104 | inherits: 2.0.4 2105 | is-arguments: 1.1.1 2106 | is-generator-function: 1.0.10 2107 | is-typed-array: 1.1.13 2108 | which-typed-array: 1.1.15 2109 | 2110 | vm-browserify@1.1.2: {} 2111 | 2112 | which-typed-array@1.1.15: 2113 | dependencies: 2114 | available-typed-arrays: 1.0.7 2115 | call-bind: 1.0.7 2116 | for-each: 0.3.3 2117 | gopd: 1.0.1 2118 | has-tostringtag: 1.0.2 2119 | 2120 | xtend@4.0.2: {} 2121 | -------------------------------------------------------------------------------- /rslib.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from '@rslib/core'; 2 | 3 | export default defineConfig({ 4 | lib: [ 5 | { format: 'esm', syntax: 'es2021', dts: true }, 6 | { format: 'cjs', syntax: 'es2021' }, 7 | ], 8 | }); 9 | -------------------------------------------------------------------------------- /rstest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from '@rstest/core'; 2 | 3 | export default defineConfig({ 4 | include: ['test/unit/**/*.test.ts'], 5 | }); 6 | -------------------------------------------------------------------------------- /src/ProtocolImportsPlugin.ts: -------------------------------------------------------------------------------- 1 | import type { Rspack } from '@rsbuild/core'; 2 | 3 | export class ProtocolImportsPlugin { 4 | apply(compiler: Rspack.Compiler): void { 5 | compiler.hooks.normalModuleFactory.tap( 6 | 'NormalModuleReplacementPlugin', 7 | (nmf) => { 8 | nmf.hooks.beforeResolve.tap( 9 | 'NormalModuleReplacementPlugin', 10 | (resource) => { 11 | // Remove the `node:` prefix 12 | // see: https://github.com/webpack/webpack/issues/14166 13 | if (/^node:/.test(resource.request)) { 14 | resource.request = resource.request.replace(/^node:/, ''); 15 | } 16 | }, 17 | ); 18 | }, 19 | ); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import type { RsbuildPlugin } from '@rsbuild/core'; 2 | import { ProtocolImportsPlugin } from './ProtocolImportsPlugin.js'; 3 | import { builtinMappingResolved } from './libs.js'; 4 | 5 | type Globals = { 6 | process?: boolean; 7 | Buffer?: boolean; 8 | }; 9 | 10 | export type PluginNodePolyfillOptions = { 11 | /** 12 | * Whether to provide polyfill of globals. 13 | * @default 14 | * { 15 | * Buffer: true, 16 | * process: true, 17 | * } 18 | */ 19 | globals?: Globals; 20 | /** 21 | * Whether to polyfill Node.js builtin modules starting with `node:`. 22 | * @see https://nodejs.org/api/esm.html#node-imports 23 | * @default true 24 | */ 25 | protocolImports?: boolean; 26 | /** 27 | * Exclude certain modules to be polyfilled. 28 | * This option is mutually exclusive with {@link PluginNodePolyfillOptions.include | `include`}. 29 | * @default undefined 30 | */ 31 | exclude?: string[]; 32 | /** 33 | * Only include certain modules to be polyfilled. 34 | * This option is mutually exclusive with {@link PluginNodePolyfillOptions.exclude | `exclude`}. 35 | * @default undefined 36 | */ 37 | include?: string[]; 38 | /** 39 | * Override the default polyfills for specific modules. 40 | * @default undefined 41 | */ 42 | overrides?: Record; 43 | /** 44 | * By default, the plugin only polyfills the browser-side code. 45 | * If you want to polyfill the server-side code as well (when `output.target` is `node`), 46 | * you can set the `force` option to `true`. 47 | * @default false 48 | */ 49 | force?: boolean; 50 | }; 51 | 52 | export const resolvePolyfill = ( 53 | libPath: string, 54 | overrides?: PluginNodePolyfillOptions['overrides'], 55 | ) => { 56 | if (overrides?.[libPath] !== undefined) { 57 | return overrides[libPath]; 58 | } 59 | 60 | return builtinMappingResolved[libPath as keyof typeof builtinMappingResolved]; 61 | }; 62 | 63 | export const getResolveFallback = ({ 64 | protocolImports, 65 | exclude, 66 | include, 67 | overrides, 68 | }: Pick< 69 | PluginNodePolyfillOptions, 70 | 'protocolImports' | 'exclude' | 'include' | 'overrides' 71 | >) => { 72 | if (exclude && include) { 73 | throw new Error('`include` is mutually exclusive with `exclude`.'); 74 | } 75 | 76 | const resolvedNodeLibs = include 77 | ? include 78 | : Object.keys(builtinMappingResolved).filter((name) => { 79 | return !(exclude || []).includes(name); 80 | }); 81 | 82 | const fallback: Record = {}; 83 | 84 | for (const name of resolvedNodeLibs) { 85 | const libPath = resolvePolyfill(name, overrides); 86 | fallback[name] = libPath ?? false; 87 | 88 | if (protocolImports) { 89 | fallback[`node:${name}`] = fallback[name]; 90 | } 91 | } 92 | 93 | return fallback; 94 | }; 95 | 96 | export const getProvideGlobals = async ( 97 | globals?: Globals, 98 | overrides?: PluginNodePolyfillOptions['overrides'], 99 | ) => { 100 | const result: Record = {}; 101 | 102 | if (globals?.Buffer !== false) { 103 | result.Buffer = [resolvePolyfill('buffer', overrides) as string, 'Buffer']; 104 | } 105 | if (globals?.process !== false) { 106 | result.process = [resolvePolyfill('process', overrides) as string]; 107 | } 108 | 109 | return result; 110 | }; 111 | 112 | export const PLUGIN_NODE_POLYFILL_NAME = 'rsbuild:node-polyfill'; 113 | 114 | export function pluginNodePolyfill( 115 | options: PluginNodePolyfillOptions = {}, 116 | ): RsbuildPlugin { 117 | const { 118 | protocolImports = true, 119 | include, 120 | exclude, 121 | overrides, 122 | force = false, 123 | } = options; 124 | 125 | return { 126 | name: PLUGIN_NODE_POLYFILL_NAME, 127 | 128 | setup(api) { 129 | api.modifyBundlerChain(async (chain, { isServer, bundler }) => { 130 | // The server bundle does not require node polyfill 131 | if (isServer && !force) { 132 | return; 133 | } 134 | 135 | // module polyfill 136 | chain.resolve.fallback.merge( 137 | getResolveFallback({ 138 | protocolImports, 139 | include: include, 140 | exclude, 141 | overrides, 142 | }), 143 | ); 144 | 145 | const provideGlobals = await getProvideGlobals( 146 | options.globals, 147 | overrides, 148 | ); 149 | 150 | if (Object.keys(provideGlobals).length) { 151 | chain 152 | .plugin('node-polyfill-provide') 153 | .use(bundler.ProvidePlugin, [provideGlobals]); 154 | } 155 | 156 | if (protocolImports) { 157 | chain.plugin('protocol-imports').use(ProtocolImportsPlugin); 158 | } 159 | }); 160 | }, 161 | }; 162 | } 163 | 164 | export { 165 | builtinMappingResolved, 166 | resolvedPolyfillToModules, 167 | } from './libs.js'; 168 | -------------------------------------------------------------------------------- /src/libs.ts: -------------------------------------------------------------------------------- 1 | import { createRequire } from 'node:module'; 2 | 3 | const require = createRequire(import.meta.url); 4 | 5 | export const builtinMappingResolved = { 6 | assert: require.resolve('assert/'), 7 | buffer: require.resolve('buffer/'), 8 | child_process: null, 9 | cluster: null, 10 | console: require.resolve('console-browserify'), 11 | constants: require.resolve('constants-browserify'), 12 | crypto: require.resolve('crypto-browserify'), 13 | dgram: null, 14 | dns: null, 15 | domain: require.resolve('domain-browser'), 16 | events: require.resolve('events/'), 17 | fs: null, 18 | http: require.resolve('stream-http'), 19 | https: require.resolve('https-browserify'), 20 | module: null, 21 | net: null, 22 | os: require.resolve('os-browserify/browser.js'), 23 | path: require.resolve('path-browserify'), 24 | punycode: require.resolve('punycode/'), 25 | process: require.resolve('process/browser.js'), 26 | querystring: require.resolve('querystring-es3/'), 27 | readline: null, 28 | repl: null, 29 | stream: require.resolve('stream-browserify'), 30 | _stream_duplex: require.resolve('readable-stream/lib/_stream_duplex.js'), 31 | _stream_passthrough: require.resolve( 32 | 'readable-stream/lib/_stream_passthrough.js', 33 | ), 34 | _stream_readable: require.resolve('readable-stream/lib/_stream_readable.js'), 35 | _stream_transform: require.resolve( 36 | 'readable-stream/lib/_stream_transform.js', 37 | ), 38 | _stream_writable: require.resolve('readable-stream/lib/_stream_writable.js'), 39 | string_decoder: require.resolve('string_decoder/'), 40 | sys: require.resolve('util/util.js'), 41 | timers: require.resolve('timers-browserify'), 42 | tls: null, 43 | tty: require.resolve('tty-browserify'), 44 | url: require.resolve('url/'), 45 | util: require.resolve('util/util.js'), 46 | vm: require.resolve('vm-browserify'), 47 | zlib: require.resolve('browserify-zlib'), 48 | } as const; 49 | 50 | export const resolvedPolyfillToModules = Object.fromEntries( 51 | Object.entries(builtinMappingResolved) 52 | .filter(([key]) => key !== null) 53 | .map(([key, value]) => [value, key]), 54 | ); 55 | -------------------------------------------------------------------------------- /test/e2e/index.test.ts: -------------------------------------------------------------------------------- 1 | import { dirname } from 'node:path'; 2 | import { fileURLToPath } from 'node:url'; 3 | import { expect, test } from '@playwright/test'; 4 | import { loadConfig } from '@rsbuild/core'; 5 | import { createRsbuild } from '@rsbuild/core'; 6 | 7 | const __dirname = dirname(fileURLToPath(import.meta.url)); 8 | 9 | test('should add node-polyfill when add node-polyfill plugin', async ({ 10 | page, 11 | }) => { 12 | const rsbuild = await createRsbuild({ 13 | cwd: __dirname, 14 | rsbuildConfig: (await loadConfig({ cwd: __dirname })).content, 15 | }); 16 | 17 | const { server, urls } = await rsbuild.startDevServer(); 18 | 19 | await page.goto(urls[0]); 20 | 21 | const test = page.locator('#test'); 22 | await expect(test).toHaveText('Hello Rsbuild!'); 23 | 24 | const testBuffer = page.locator('#test-buffer'); 25 | await expect(testBuffer).toHaveText('979899'); 26 | 27 | const testQueryString = page.locator('#test-querystring'); 28 | await expect(testQueryString).toHaveText('foo=bar'); 29 | 30 | await server.close(); 31 | }); 32 | -------------------------------------------------------------------------------- /test/e2e/rsbuild.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from '@rsbuild/core'; 2 | import { pluginNodePolyfill } from '@rsbuild/plugin-node-polyfill'; 3 | 4 | export default defineConfig({ 5 | plugins: [pluginNodePolyfill()], 6 | }); 7 | -------------------------------------------------------------------------------- /test/e2e/src/index.js: -------------------------------------------------------------------------------- 1 | import path from 'node:path'; 2 | // biome-ignore lint: test non-import protocol 3 | import querystring from 'querystring'; 4 | 5 | const bufferData = Buffer.from('abc'); 6 | 7 | const qsRes = querystring.stringify({ 8 | foo: 'bar', 9 | }); 10 | 11 | document.querySelector('#root').innerHTML = ` 12 |
13 |
${bufferData.join('')}
14 |
${qsRes}
15 |
${path.join('foo', 'bar')}
16 |
Hello Rsbuild!
17 |
18 | `; 19 | -------------------------------------------------------------------------------- /test/unit/index.test.ts: -------------------------------------------------------------------------------- 1 | import { assert, test } from '@rstest/core'; 2 | import { 3 | builtinMappingResolved, 4 | getResolveFallback, 5 | resolvePolyfill, 6 | } from '../../src/index'; 7 | 8 | test('resolvePolyfill', async () => { 9 | assert.equal(resolvePolyfill('fs', { fs: 'memfs' }), 'memfs'); 10 | assert.equal(resolvePolyfill('fs'), null); 11 | assert.equal(resolvePolyfill('buffer'), builtinMappingResolved.buffer); 12 | }); 13 | 14 | test('getResolveFallback', async () => { 15 | const defaultFallback = getResolveFallback({}); 16 | const withProtocolImportsFallback = getResolveFallback({ 17 | protocolImports: true, 18 | }); 19 | 20 | assert.deepEqual(Object.keys(defaultFallback), [ 21 | 'assert', 22 | 'buffer', 23 | 'child_process', 24 | 'cluster', 25 | 'console', 26 | 'constants', 27 | 'crypto', 28 | 'dgram', 29 | 'dns', 30 | 'domain', 31 | 'events', 32 | 'fs', 33 | 'http', 34 | 'https', 35 | 'module', 36 | 'net', 37 | 'os', 38 | 'path', 39 | 'punycode', 40 | 'process', 41 | 'querystring', 42 | 'readline', 43 | 'repl', 44 | 'stream', 45 | '_stream_duplex', 46 | '_stream_passthrough', 47 | '_stream_readable', 48 | '_stream_transform', 49 | '_stream_writable', 50 | 'string_decoder', 51 | 'sys', 52 | 'timers', 53 | 'tls', 54 | 'tty', 55 | 'url', 56 | 'util', 57 | 'vm', 58 | 'zlib', 59 | ]); 60 | 61 | assert.deepEqual(Object.keys(withProtocolImportsFallback), [ 62 | 'assert', 63 | 'node:assert', 64 | 'buffer', 65 | 'node:buffer', 66 | 'child_process', 67 | 'node:child_process', 68 | 'cluster', 69 | 'node:cluster', 70 | 'console', 71 | 'node:console', 72 | 'constants', 73 | 'node:constants', 74 | 'crypto', 75 | 'node:crypto', 76 | 'dgram', 77 | 'node:dgram', 78 | 'dns', 79 | 'node:dns', 80 | 'domain', 81 | 'node:domain', 82 | 'events', 83 | 'node:events', 84 | 'fs', 85 | 'node:fs', 86 | 'http', 87 | 'node:http', 88 | 'https', 89 | 'node:https', 90 | 'module', 91 | 'node:module', 92 | 'net', 93 | 'node:net', 94 | 'os', 95 | 'node:os', 96 | 'path', 97 | 'node:path', 98 | 'punycode', 99 | 'node:punycode', 100 | 'process', 101 | 'node:process', 102 | 'querystring', 103 | 'node:querystring', 104 | 'readline', 105 | 'node:readline', 106 | 'repl', 107 | 'node:repl', 108 | 'stream', 109 | 'node:stream', 110 | '_stream_duplex', 111 | 'node:_stream_duplex', 112 | '_stream_passthrough', 113 | 'node:_stream_passthrough', 114 | '_stream_readable', 115 | 'node:_stream_readable', 116 | '_stream_transform', 117 | 'node:_stream_transform', 118 | '_stream_writable', 119 | 'node:_stream_writable', 120 | 'string_decoder', 121 | 'node:string_decoder', 122 | 'sys', 123 | 'node:sys', 124 | 'timers', 125 | 'node:timers', 126 | 'tls', 127 | 'node:tls', 128 | 'tty', 129 | 'node:tty', 130 | 'url', 131 | 'node:url', 132 | 'util', 133 | 'node:util', 134 | 'vm', 135 | 'node:vm', 136 | 'zlib', 137 | 'node:zlib', 138 | ]); 139 | 140 | assert.equal( 141 | Object.keys(withProtocolImportsFallback).length, 142 | Object.keys(defaultFallback).length * 2, 143 | ); 144 | 145 | const excludeFs = getResolveFallback({ exclude: ['fs'] }); 146 | assert.deepEqual( 147 | Object.keys(defaultFallback).filter( 148 | (k) => !Object.keys(excludeFs).includes(k), 149 | ), 150 | ['fs'], 151 | ); 152 | 153 | assert.ok( 154 | !Object.keys(getResolveFallback({ exclude: ['fs'] })).includes('fs'), 155 | ); 156 | 157 | assert.deepEqual(Object.keys(getResolveFallback({ include: ['fs'] })), [ 158 | 'fs', 159 | ]); 160 | 161 | const overrides = getResolveFallback({ overrides: { fs: 'memfs' } }); 162 | assert.equal(overrides.fs, 'memfs'); 163 | assert.deepEqual({ ...overrides, fs: defaultFallback.fs }, defaultFallback); 164 | 165 | assert.throws( 166 | () => getResolveFallback({ include: ['fs'], exclude: ['path'] }), 167 | '`include` is mutually exclusive with `exclude`.', 168 | ); 169 | }); 170 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "outDir": "./dist", 4 | "baseUrl": "./", 5 | "target": "ES2020", 6 | "lib": ["DOM", "ESNext"], 7 | "module": "Node16", 8 | "strict": true, 9 | "declaration": true, 10 | "isolatedModules": true, 11 | "esModuleInterop": true, 12 | "skipLibCheck": true, 13 | "resolveJsonModule": true, 14 | "moduleResolution": "Node16" 15 | }, 16 | "include": ["src"] 17 | } 18 | --------------------------------------------------------------------------------