├── .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": "0.0.1", 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: 0.0.1 95 | version: 0.0.1 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@0.0.1': 564 | resolution: {integrity: sha512-Kg/ormFfyCTJGDJY4HYtd0zy9d8Kdd+2F4S1WcMgLQBep4rEZ0dqiXcUNqzYNLu400YxMnIMIhyZDiJjpOUgVA==} 565 | engines: {node: '>=18.0.0'} 566 | hasBin: true 567 | 568 | '@swc/helpers@0.5.17': 569 | resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} 570 | 571 | '@types/chai@5.2.2': 572 | resolution: {integrity: sha512-8kB30R7Hwqf40JPiKhVzodJs2Qc1ZJ5zuT3uzw5Hq/dhNCl3G3l83jfpdI1e20BP348+fV7VIL/+FxaXkqBmWg==} 573 | 574 | '@types/deep-eql@4.0.2': 575 | resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==} 576 | 577 | '@types/node@22.15.29': 578 | resolution: {integrity: sha512-LNdjOkUDlU1RZb8e1kOIUpN1qQUlzGkEtbVNo53vbrwDg5om6oduhm4SiUaPW5ASTXhAiP0jInWG8Qx9fVlOeQ==} 579 | 580 | '@vitest/expect@3.2.3': 581 | resolution: {integrity: sha512-W2RH2TPWVHA1o7UmaFKISPvdicFJH+mjykctJFoAkUw+SPTJTGjUNdKscFBrqM7IPnCVu6zihtKYa7TkZS1dkQ==} 582 | 583 | '@vitest/pretty-format@3.2.3': 584 | resolution: {integrity: sha512-yFglXGkr9hW/yEXngO+IKMhP0jxyFw2/qys/CK4fFUZnSltD+MU7dVYGrH8rvPcK/O6feXQA+EU33gjaBBbAng==} 585 | 586 | '@vitest/snapshot@3.2.3': 587 | resolution: {integrity: sha512-9gIVWx2+tysDqUmmM1L0hwadyumqssOL1r8KJipwLx5JVYyxvVRfxvMq7DaWbZZsCqZnu/dZedaZQh4iYTtneA==} 588 | 589 | '@vitest/spy@3.2.3': 590 | resolution: {integrity: sha512-JHu9Wl+7bf6FEejTCREy+DmgWe+rQKbK+y32C/k5f4TBIAlijhJbRBIRIOCEpVevgRsCQR2iHRUH2/qKVM/plw==} 591 | 592 | '@vitest/utils@3.2.3': 593 | resolution: {integrity: sha512-4zFBCU5Pf+4Z6v+rwnZ1HU1yzOKKvDkMXZrymE2PBlbjKJRlrOxbvpfPSvJTGRIwGoahaOGvp+kbCoxifhzJ1Q==} 594 | 595 | abort-controller@3.0.0: 596 | resolution: {integrity: sha512-h8lQ8tacZYnR3vNQTgibj+tODHI5/+l06Au2Pcriv/Gmet0eaj4TwWH41sO9wnHDiQsEj19q0drzdWdeAHtweg==} 597 | engines: {node: '>=6.5'} 598 | 599 | asn1.js@4.10.1: 600 | resolution: {integrity: sha512-p32cOF5q0Zqs9uBiONKYLm6BClCoBCM5O9JfeUSlnQLBTxYdTK+pW+nXflm8UkKd2UYlEbYz5qEi0JuZR9ckSw==} 601 | 602 | assert@2.1.0: 603 | resolution: {integrity: sha512-eLHpSK/Y4nhMJ07gDaAzoX/XAKS8PSaojml3M0DM4JpV1LAi5JOJ/p6H/XWrl8L+DzVEvVCW1z3vWAaB9oTsQw==} 604 | 605 | assertion-error@2.0.1: 606 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 607 | engines: {node: '>=12'} 608 | 609 | available-typed-arrays@1.0.7: 610 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 611 | engines: {node: '>= 0.4'} 612 | 613 | base64-js@1.5.1: 614 | resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} 615 | 616 | birpc@2.3.0: 617 | resolution: {integrity: sha512-ijbtkn/F3Pvzb6jHypHRyve2QApOCZDR25D/VnkY2G/lBNcXCTsnsCxgY4k4PkVB7zfwzYbY3O9Lcqe3xufS5g==} 618 | 619 | bn.js@4.12.0: 620 | resolution: {integrity: sha512-c98Bf3tPniI+scsdk237ku1Dc3ujXQTSgyiPUDEOe7tRkhrqridvh8klBv0HCEso1OLOYcHuCv/cS6DNxKH+ZA==} 621 | 622 | bn.js@5.2.1: 623 | resolution: {integrity: sha512-eXRvHzWyYPBuB4NBy0cmYQjGitUrtqwbvlzP3G6VFnNRbsZQIxQ10PbKKHt8gZ/HW/D/747aDl+QkDqg3KQLMQ==} 624 | 625 | brorand@1.1.0: 626 | resolution: {integrity: sha512-cKV8tMCEpQs4hK/ik71d6LrPOnpkpGBR0wzxqr68g2m/LB2GxVYQroAjMJZRVM1Y4BCjCKc3vAamxSzOY2RP+w==} 627 | 628 | browserify-aes@1.2.0: 629 | resolution: {integrity: sha512-+7CHXqGuspUn/Sl5aO7Ea0xWGAtETPXNSAjHo48JfLdPWcMng33Xe4znFvQweqc/uzk5zSOI3H52CYnjCfb5hA==} 630 | 631 | browserify-cipher@1.0.1: 632 | resolution: {integrity: sha512-sPhkz0ARKbf4rRQt2hTpAHqn47X3llLkUGn+xEJzLjwY8LRs2p0v7ljvI5EyoRO/mexrNunNECisZs+gw2zz1w==} 633 | 634 | browserify-des@1.0.2: 635 | resolution: {integrity: sha512-BioO1xf3hFwz4kc6iBhI3ieDFompMhrMlnDFC4/0/vd5MokpuAc3R+LYbwTA9A5Yc9pq9UYPqffKpW2ObuwX5A==} 636 | 637 | browserify-rsa@4.1.0: 638 | resolution: {integrity: sha512-AdEER0Hkspgno2aR97SAf6vi0y0k8NuOpGnVH3O99rcA5Q6sh8QxcngtHuJ6uXwnfAXNM4Gn1Gb7/MV1+Ymbog==} 639 | 640 | browserify-sign@4.2.3: 641 | resolution: {integrity: sha512-JWCZW6SKhfhjJxO8Tyiiy+XYB7cqd2S5/+WeYHsKdNKFlCBhKbblba1A/HN/90YwtxKc8tCErjffZl++UNmGiw==} 642 | engines: {node: '>= 0.12'} 643 | 644 | browserify-zlib@0.2.0: 645 | resolution: {integrity: sha512-Z942RysHXmJrhqk88FmKBVq/v5tqmSkDz7p54G/MGyjMnCFFnC79XWNbg+Vta8W6Wb2qtSZTSxIGkJrRpCFEiA==} 646 | 647 | buffer-xor@1.0.3: 648 | resolution: {integrity: sha512-571s0T7nZWK6vB67HI5dyUF7wXiNcfaPPPTl6zYCNApANjIvYJTg7hlud/+cJpdAhS7dVzqMLmfhfHR3rAcOjQ==} 649 | 650 | buffer@5.7.1: 651 | resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} 652 | 653 | buffer@6.0.3: 654 | resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} 655 | 656 | builtin-status-codes@3.0.0: 657 | resolution: {integrity: sha512-HpGFw18DgFWlncDfjTa2rcQ4W88O1mC8e8yZ2AvQY5KDaktSTwo+KRf6nHK6FRI5FyRyb/5T6+TSxfP7QyGsmQ==} 658 | 659 | call-bind@1.0.7: 660 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 661 | engines: {node: '>= 0.4'} 662 | 663 | caniuse-lite@1.0.30001720: 664 | resolution: {integrity: sha512-Ec/2yV2nNPwb4DnTANEV99ZWwm3ZWfdlfkQbWSDDt+PsXEVYwlhPH8tdMaPunYTKKmz7AnHi2oNEi1GcmKCD8g==} 665 | 666 | chai@5.2.0: 667 | resolution: {integrity: sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==} 668 | engines: {node: '>=12'} 669 | 670 | check-error@2.1.1: 671 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 672 | engines: {node: '>= 16'} 673 | 674 | cipher-base@1.0.4: 675 | resolution: {integrity: sha512-Kkht5ye6ZGmwv40uUDZztayT2ThLQGfnj/T71N/XzeZeo3nf8foyW7zGTsPYkEya3m5f3cAypH+qe7YOrM1U2Q==} 676 | 677 | console-browserify@1.2.0: 678 | resolution: {integrity: sha512-ZMkYO/LkF17QvCPqM0gxw8yUzigAOZOSWSHg91FH6orS7vcEj5dVZTidN2fQ14yBSdg97RqhSNwLUXInd52OTA==} 679 | 680 | constants-browserify@1.0.0: 681 | resolution: {integrity: sha512-xFxOwqIzR/e1k1gLiWEophSCMqXcwVHIH7akf7b/vxcUeGunlj3hvZaaqxwHsTgn+IndtkQJgSztIDWeumWJDQ==} 682 | 683 | core-js@3.42.0: 684 | resolution: {integrity: sha512-Sz4PP4ZA+Rq4II21qkNqOEDTDrCvcANId3xpIgB34NDkWc3UduWj2dqEtN9yZIq8Dk3HyPI33x9sqqU5C8sr0g==} 685 | 686 | core-util-is@1.0.3: 687 | resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} 688 | 689 | create-ecdh@4.0.4: 690 | resolution: {integrity: sha512-mf+TCx8wWc9VpuxfP2ht0iSISLZnt0JgWlrOKZiNqyUZWnjIaCIVNQArMHnCZKfEYRg6IM7A+NeJoN8gf/Ws0A==} 691 | 692 | create-hash@1.2.0: 693 | resolution: {integrity: sha512-z00bCGNHDG8mHAkP7CtT1qVu+bFQUPjYq/4Iv3C3kWjTFV10zIjfSoeqXo9Asws8gwSHDGj/hl2u4OGIjapeCg==} 694 | 695 | create-hmac@1.1.7: 696 | resolution: {integrity: sha512-MJG9liiZ+ogc4TzUwuvbER1JRdgvUFSB5+VR/g5h82fGaIRWMWddtKBHi7/sVhfjQZ6SehlyhvQYrcYkaUIpLg==} 697 | 698 | crypto-browserify@3.12.1: 699 | resolution: {integrity: sha512-r4ESw/IlusD17lgQi1O20Fa3qNnsckR126TdUuBgAu7GBYSIPvdNyONd3Zrxh0xCwA4+6w/TDArBPsMvhur+KQ==} 700 | engines: {node: '>= 0.10'} 701 | 702 | deep-eql@5.0.2: 703 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 704 | engines: {node: '>=6'} 705 | 706 | define-data-property@1.1.4: 707 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 708 | engines: {node: '>= 0.4'} 709 | 710 | define-properties@1.2.1: 711 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 712 | engines: {node: '>= 0.4'} 713 | 714 | des.js@1.1.0: 715 | resolution: {integrity: sha512-r17GxjhUCjSRy8aiJpr8/UadFIzMzJGexI3Nmz4ADi9LYSFx4gTBp80+NaX/YsXWWLhpZ7v/v/ubEc/bCNfKwg==} 716 | 717 | diffie-hellman@5.0.3: 718 | resolution: {integrity: sha512-kqag/Nl+f3GwyK25fhUMYj81BUOrZ9IuJsjIcDE5icNM9FJHAVm3VcUDxdLPoQtTuUylWm6ZIknYJwwaPxsUzg==} 719 | 720 | domain-browser@5.7.0: 721 | resolution: {integrity: sha512-edTFu0M/7wO1pXY6GDxVNVW086uqwWYIHP98txhcPyV995X21JIH2DtYp33sQJOupYoXKe9RwTw2Ya2vWaquTQ==} 722 | engines: {node: '>=4'} 723 | 724 | elliptic@6.5.5: 725 | resolution: {integrity: sha512-7EjbcmUm17NQFu4Pmgmq2olYMj8nwMnpcddByChSUjArp8F5DQWcIcpriwO4ZToLNAJig0yiyjswfyGNje/ixw==} 726 | 727 | es-define-property@1.0.0: 728 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 729 | engines: {node: '>= 0.4'} 730 | 731 | es-errors@1.3.0: 732 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 733 | engines: {node: '>= 0.4'} 734 | 735 | esbuild@0.25.0: 736 | resolution: {integrity: sha512-BXq5mqc8ltbaN34cDqWuYKyNhX8D/Z0J1xdtdQ8UcIIIyJyz+ZMKUt58tF3SrZ85jcfN/PZYhjR5uDQAYNVbuw==} 737 | engines: {node: '>=18'} 738 | hasBin: true 739 | 740 | event-target-shim@5.0.1: 741 | resolution: {integrity: sha512-i/2XbnSz/uxRCU6+NdVJgKWDTM427+MqYbkQzD321DuCQJUqOuJKIA0IM2+W2xtYHdKOmZ4dR6fExsd4SXL+WQ==} 742 | engines: {node: '>=6'} 743 | 744 | events@3.3.0: 745 | resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} 746 | engines: {node: '>=0.8.x'} 747 | 748 | evp_bytestokey@1.0.3: 749 | resolution: {integrity: sha512-/f2Go4TognH/KvCISP7OUsHn85hT9nUkxxA9BEWxFn+Oj9o8ZNLm/40hdlgSLyuOimsrTKLUMEorQexp/aPQeA==} 750 | 751 | fdir@6.4.4: 752 | resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} 753 | peerDependencies: 754 | picomatch: ^3 || ^4 755 | peerDependenciesMeta: 756 | picomatch: 757 | optional: true 758 | 759 | for-each@0.3.3: 760 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 761 | 762 | fsevents@2.3.2: 763 | resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} 764 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 765 | os: [darwin] 766 | 767 | fsevents@2.3.3: 768 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 769 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 770 | os: [darwin] 771 | 772 | function-bind@1.1.2: 773 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 774 | 775 | get-intrinsic@1.2.4: 776 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 777 | engines: {node: '>= 0.4'} 778 | 779 | get-tsconfig@4.10.0: 780 | resolution: {integrity: sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==} 781 | 782 | gopd@1.0.1: 783 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 784 | 785 | has-property-descriptors@1.0.2: 786 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 787 | 788 | has-proto@1.0.3: 789 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 790 | engines: {node: '>= 0.4'} 791 | 792 | has-symbols@1.0.3: 793 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 794 | engines: {node: '>= 0.4'} 795 | 796 | has-tostringtag@1.0.2: 797 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 798 | engines: {node: '>= 0.4'} 799 | 800 | hash-base@3.0.4: 801 | resolution: {integrity: sha512-EeeoJKjTyt868liAlVmcv2ZsUfGHlE3Q+BICOXcZiwN3osr5Q/zFGYmTJpoIzuaSTAwndFy+GqhEwlU4L3j4Ow==} 802 | engines: {node: '>=4'} 803 | 804 | hash-base@3.1.0: 805 | resolution: {integrity: sha512-1nmYp/rhMDiE7AYkDw+lLwlAzz0AntGIe51F3RfFfEqyQ3feY2eI/NcwC6umIQVOASPMsWJLJScWKSSvzL9IVA==} 806 | engines: {node: '>=4'} 807 | 808 | hash.js@1.1.7: 809 | resolution: {integrity: sha512-taOaskGt4z4SOANNseOviYDvjEJinIkRgmp7LbKP2YTTmVxWBl87s/uzK9r+44BclBSp2X7K1hqeNfz9JbBeXA==} 810 | 811 | hasown@2.0.2: 812 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 813 | engines: {node: '>= 0.4'} 814 | 815 | hmac-drbg@1.0.1: 816 | resolution: {integrity: sha512-Tti3gMqLdZfhOQY1Mzf/AanLiqh1WTiJgEj26ZuYQ9fbkLomzGchCws4FyrSd4VkpBfiNhaE1On+lOz894jvXg==} 817 | 818 | https-browserify@1.0.0: 819 | resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} 820 | 821 | ieee754@1.2.1: 822 | resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} 823 | 824 | inherits@2.0.4: 825 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 826 | 827 | is-arguments@1.1.1: 828 | resolution: {integrity: sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==} 829 | engines: {node: '>= 0.4'} 830 | 831 | is-callable@1.2.7: 832 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 833 | engines: {node: '>= 0.4'} 834 | 835 | is-generator-function@1.0.10: 836 | resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==} 837 | engines: {node: '>= 0.4'} 838 | 839 | is-nan@1.3.2: 840 | resolution: {integrity: sha512-E+zBKpQ2t6MEo1VsonYmluk9NxGrbzpeeLC2xIViuO2EjU2xsXsBPwTr3Ykv9l08UYEVEdWeRZNouaZqF6RN0w==} 841 | engines: {node: '>= 0.4'} 842 | 843 | is-typed-array@1.1.13: 844 | resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 845 | engines: {node: '>= 0.4'} 846 | 847 | isarray@1.0.0: 848 | resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} 849 | 850 | jiti@2.4.2: 851 | resolution: {integrity: sha512-rg9zJN+G4n2nfJl5MW3BMygZX56zKPNVEYYqq7adpmMh4Jn2QNEwhvQlFy6jPVdcod7txZtKHWnyZiA3a0zP7A==} 852 | hasBin: true 853 | 854 | json5@2.2.3: 855 | resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} 856 | engines: {node: '>=6'} 857 | hasBin: true 858 | 859 | loupe@3.1.3: 860 | resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} 861 | 862 | magic-string@0.30.17: 863 | resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} 864 | 865 | md5.js@1.3.5: 866 | resolution: {integrity: sha512-xitP+WxNPcTTOgnTJcrhM0xvdPepipPSf3I8EIpGKeFLjt3PlJLIDG3u8EX53ZIubkb+5U2+3rELYpEhHhzdkg==} 867 | 868 | miller-rabin@4.0.1: 869 | resolution: {integrity: sha512-115fLhvZVqWwHPbClyntxEVfVDfl9DLLTuJvq3g2O/Oxi8AiNouAHvDSzHS0viUJc+V5vm3eq91Xwqn9dp4jRA==} 870 | hasBin: true 871 | 872 | minimalistic-assert@1.0.1: 873 | resolution: {integrity: sha512-UtJcAD4yEaGtjPezWuO9wC4nwUnVH/8/Im3yEHQP4b67cXlD/Qr9hdITCU1xDbSEXg2XKNaP8jsReV7vQd00/A==} 874 | 875 | minimalistic-crypto-utils@1.0.1: 876 | resolution: {integrity: sha512-JIYlbt6g8i5jKfJ3xz7rF0LXmv2TkDxBLUkiBeZ7bAx4GnnNMr8xFpGnOxn6GhTEHx3SjRrZEoU+j04prX1ktg==} 877 | 878 | minimist@1.2.8: 879 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} 880 | 881 | nano-staged@0.8.0: 882 | resolution: {integrity: sha512-QSEqPGTCJbkHU2yLvfY6huqYPjdBrOaTMKatO1F8nCSrkQGXeKwtCiCnsdxnuMhbg3DTVywKaeWLGCE5oJpq0g==} 883 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 884 | hasBin: true 885 | 886 | object-inspect@1.13.2: 887 | resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} 888 | engines: {node: '>= 0.4'} 889 | 890 | object-is@1.1.6: 891 | resolution: {integrity: sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==} 892 | engines: {node: '>= 0.4'} 893 | 894 | object-keys@1.1.1: 895 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 896 | engines: {node: '>= 0.4'} 897 | 898 | object.assign@4.1.5: 899 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 900 | engines: {node: '>= 0.4'} 901 | 902 | os-browserify@0.3.0: 903 | resolution: {integrity: sha512-gjcpUc3clBf9+210TRaDWbf+rZZZEshZ+DlXMRCeAjp0xhTrnQsKHypIy1J3d5hKdUzj69t708EHtU8P6bUn0A==} 904 | 905 | pako@1.0.11: 906 | resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} 907 | 908 | parse-asn1@5.1.7: 909 | resolution: {integrity: sha512-CTM5kuWR3sx9IFamcl5ErfPl6ea/N8IYwiJ+vpeB2g+1iknv7zBl5uPwbMbRVznRVbrNY6lGuDoE5b30grmbqg==} 910 | engines: {node: '>= 0.10'} 911 | 912 | path-browserify@1.0.1: 913 | resolution: {integrity: sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==} 914 | 915 | pathe@2.0.3: 916 | resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==} 917 | 918 | pathval@2.0.0: 919 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 920 | engines: {node: '>= 14.16'} 921 | 922 | pbkdf2@3.1.2: 923 | resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==} 924 | engines: {node: '>=0.12'} 925 | 926 | picocolors@1.0.0: 927 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 928 | 929 | picocolors@1.1.1: 930 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 931 | 932 | picomatch@4.0.2: 933 | resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} 934 | engines: {node: '>=12'} 935 | 936 | playwright-core@1.52.0: 937 | resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} 938 | engines: {node: '>=18'} 939 | hasBin: true 940 | 941 | playwright@1.52.0: 942 | resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==} 943 | engines: {node: '>=18'} 944 | hasBin: true 945 | 946 | possible-typed-array-names@1.0.0: 947 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 948 | engines: {node: '>= 0.4'} 949 | 950 | process-nextick-args@2.0.1: 951 | resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} 952 | 953 | process@0.11.10: 954 | resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} 955 | engines: {node: '>= 0.6.0'} 956 | 957 | public-encrypt@4.0.3: 958 | resolution: {integrity: sha512-zVpa8oKZSz5bTMTFClc1fQOnyyEzpl5ozpi1B5YcvBrdohMjH2rfsBtyXcuNuwjsDIXmBYlF2N5FlJYhR29t8Q==} 959 | 960 | punycode@1.4.1: 961 | resolution: {integrity: sha512-jmYNElW7yvO7TV33CjSmvSiE2yco3bV2czu/OzDKdMNVZQWfxCblURLhf+47syQRBntjfLdd/H0egrzIG+oaFQ==} 962 | 963 | punycode@2.3.1: 964 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 965 | engines: {node: '>=6'} 966 | 967 | qs@6.13.0: 968 | resolution: {integrity: sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg==} 969 | engines: {node: '>=0.6'} 970 | 971 | querystring-es3@0.2.1: 972 | resolution: {integrity: sha512-773xhDQnZBMFobEiztv8LIl70ch5MSF/jUQVlhwFyBILqq96anmoctVIYz+ZRp0qbCKATTn6ev02M3r7Ga5vqA==} 973 | engines: {node: '>=0.4.x'} 974 | 975 | randombytes@2.1.0: 976 | resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} 977 | 978 | randomfill@1.0.4: 979 | resolution: {integrity: sha512-87lcbR8+MhcWcUiQ+9e+Rwx8MyR2P7qnt15ynUlbm3TU/fjbgz4GsvfSUDTemtCCtVCqb4ZcEFlyPNTh9bBTLw==} 980 | 981 | readable-stream@2.3.8: 982 | resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} 983 | 984 | readable-stream@3.6.2: 985 | resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} 986 | engines: {node: '>= 6'} 987 | 988 | readable-stream@4.7.0: 989 | resolution: {integrity: sha512-oIGGmcpTLwPga8Bn6/Z75SVaH1z5dUut2ibSyAMVhmUggWpmDn2dapB0n7f8nwaSiRtepAsfJyfXIO5DCVAODg==} 990 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 991 | 992 | resolve-pkg-maps@1.0.0: 993 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} 994 | 995 | ripemd160@2.0.2: 996 | resolution: {integrity: sha512-ii4iagi25WusVoiC4B4lq7pbXfAp3D9v5CwfkY33vffw2+pkDjY1D8GaN7spsxvCSx8dkPqOZCEZyfxcmJG2IA==} 997 | 998 | rsbuild-plugin-dts@0.9.1: 999 | resolution: {integrity: sha512-04pkKrebuajsCpC8Vj2z4n6NFFxUYAdUdqSQRFGkGhdmururoDFYW0k9+ZQq9XrSQTlB01F/HFv5mAc0dwG/Qg==} 1000 | engines: {node: '>=16.7.0'} 1001 | peerDependencies: 1002 | '@microsoft/api-extractor': ^7 1003 | '@rsbuild/core': 1.x 1004 | typescript: ^5 1005 | peerDependenciesMeta: 1006 | '@microsoft/api-extractor': 1007 | optional: true 1008 | typescript: 1009 | optional: true 1010 | 1011 | safe-buffer@5.1.2: 1012 | resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} 1013 | 1014 | safe-buffer@5.2.1: 1015 | resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} 1016 | 1017 | set-function-length@1.2.2: 1018 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1019 | engines: {node: '>= 0.4'} 1020 | 1021 | setimmediate@1.0.5: 1022 | resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} 1023 | 1024 | sha.js@2.4.11: 1025 | resolution: {integrity: sha512-QMEp5B7cftE7APOjk5Y6xgrbWu+WkLVQwk8JNjZ8nKRciZaByEW6MubieAiToS7+dwvrjGhH8jRXz3MVd0AYqQ==} 1026 | hasBin: true 1027 | 1028 | side-channel@1.0.6: 1029 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 1030 | engines: {node: '>= 0.4'} 1031 | 1032 | simple-git-hooks@2.13.0: 1033 | resolution: {integrity: sha512-N+goiLxlkHJlyaYEglFypzVNMaNplPAk5syu0+OPp/Bk6dwVoXF6FfOw2vO0Dp+JHsBaI+w6cm8TnFl2Hw6tDA==} 1034 | hasBin: true 1035 | 1036 | std-env@3.9.0: 1037 | resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} 1038 | 1039 | stream-browserify@3.0.0: 1040 | resolution: {integrity: sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA==} 1041 | 1042 | stream-http@3.2.0: 1043 | resolution: {integrity: sha512-Oq1bLqisTyK3TSCXpPbT4sdeYNdmyZJv1LxpEm2vu1ZhK89kSE5YXwZc3cWk0MagGaKriBh9mCFbVGtO+vY29A==} 1044 | 1045 | string_decoder@1.1.1: 1046 | resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} 1047 | 1048 | string_decoder@1.3.0: 1049 | resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} 1050 | 1051 | strip-bom@3.0.0: 1052 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} 1053 | engines: {node: '>=4'} 1054 | 1055 | timers-browserify@2.0.12: 1056 | resolution: {integrity: sha512-9phl76Cqm6FhSX9Xe1ZUAMLtm1BLkKj2Qd5ApyWkXzsMRaA7dgr81kf4wJmQf/hAvg8EEyJxDo3du/0KlhPiKQ==} 1057 | engines: {node: '>=0.6.0'} 1058 | 1059 | tinyglobby@0.2.14: 1060 | resolution: {integrity: sha512-tX5e7OM1HnYr2+a2C/4V0htOcSQcoSTH9KgJnVvNm5zm/cyEWKJ7j7YutsH9CxMdtOkkLFy2AHrMci9IM8IPZQ==} 1061 | engines: {node: '>=12.0.0'} 1062 | 1063 | tinypool@1.1.0: 1064 | resolution: {integrity: sha512-7CotroY9a8DKsKprEy/a14aCCm8jYVmR7aFy4fpkZM8sdpNJbKkixuNjgM50yCmip2ezc8z4N7k3oe2+rfRJCQ==} 1065 | engines: {node: ^18.0.0 || >=20.0.0} 1066 | 1067 | tinyrainbow@2.0.0: 1068 | resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} 1069 | engines: {node: '>=14.0.0'} 1070 | 1071 | tinyspy@4.0.3: 1072 | resolution: {integrity: sha512-t2T/WLB2WRgZ9EpE4jgPJ9w+i66UZfDc8wHh0xrwiRNN+UwH98GIJkTeZqX9rg0i0ptwzqW+uYeIF0T4F8LR7A==} 1073 | engines: {node: '>=14.0.0'} 1074 | 1075 | tsconfig-paths@4.2.0: 1076 | resolution: {integrity: sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg==} 1077 | engines: {node: '>=6'} 1078 | 1079 | tslib@2.8.1: 1080 | resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} 1081 | 1082 | tsx@4.19.4: 1083 | resolution: {integrity: sha512-gK5GVzDkJK1SI1zwHf32Mqxf2tSJkNx+eYcNly5+nHvWqXUJYUkWBQtKauoESz3ymezAI++ZwT855x5p5eop+Q==} 1084 | engines: {node: '>=18.0.0'} 1085 | hasBin: true 1086 | 1087 | tty-browserify@0.0.1: 1088 | resolution: {integrity: sha512-C3TaO7K81YvjCgQH9Q1S3R3P3BtN3RIM8n+OvX4il1K1zgE8ZhI0op7kClgkxtutIE8hQrcrHBXvIheqKUUCxw==} 1089 | 1090 | typescript@5.8.3: 1091 | resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} 1092 | engines: {node: '>=14.17'} 1093 | hasBin: true 1094 | 1095 | undici-types@6.21.0: 1096 | resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} 1097 | 1098 | url@0.11.4: 1099 | resolution: {integrity: sha512-oCwdVC7mTuWiPyjLUz/COz5TLk6wgp0RCsN+wHZ2Ekneac9w8uuV0njcbbie2ME+Vs+d6duwmYuR3HgQXs1fOg==} 1100 | engines: {node: '>= 0.4'} 1101 | 1102 | util-deprecate@1.0.2: 1103 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} 1104 | 1105 | util@0.12.5: 1106 | resolution: {integrity: sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==} 1107 | 1108 | vm-browserify@1.1.2: 1109 | resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==} 1110 | 1111 | which-typed-array@1.1.15: 1112 | resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} 1113 | engines: {node: '>= 0.4'} 1114 | 1115 | xtend@4.0.2: 1116 | resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} 1117 | engines: {node: '>=0.4'} 1118 | 1119 | snapshots: 1120 | 1121 | '@ast-grep/napi-darwin-arm64@0.37.0': 1122 | optional: true 1123 | 1124 | '@ast-grep/napi-darwin-x64@0.37.0': 1125 | optional: true 1126 | 1127 | '@ast-grep/napi-linux-arm64-gnu@0.37.0': 1128 | optional: true 1129 | 1130 | '@ast-grep/napi-linux-arm64-musl@0.37.0': 1131 | optional: true 1132 | 1133 | '@ast-grep/napi-linux-x64-gnu@0.37.0': 1134 | optional: true 1135 | 1136 | '@ast-grep/napi-linux-x64-musl@0.37.0': 1137 | optional: true 1138 | 1139 | '@ast-grep/napi-win32-arm64-msvc@0.37.0': 1140 | optional: true 1141 | 1142 | '@ast-grep/napi-win32-ia32-msvc@0.37.0': 1143 | optional: true 1144 | 1145 | '@ast-grep/napi-win32-x64-msvc@0.37.0': 1146 | optional: true 1147 | 1148 | '@ast-grep/napi@0.37.0': 1149 | optionalDependencies: 1150 | '@ast-grep/napi-darwin-arm64': 0.37.0 1151 | '@ast-grep/napi-darwin-x64': 0.37.0 1152 | '@ast-grep/napi-linux-arm64-gnu': 0.37.0 1153 | '@ast-grep/napi-linux-arm64-musl': 0.37.0 1154 | '@ast-grep/napi-linux-x64-gnu': 0.37.0 1155 | '@ast-grep/napi-linux-x64-musl': 0.37.0 1156 | '@ast-grep/napi-win32-arm64-msvc': 0.37.0 1157 | '@ast-grep/napi-win32-ia32-msvc': 0.37.0 1158 | '@ast-grep/napi-win32-x64-msvc': 0.37.0 1159 | 1160 | '@biomejs/biome@1.9.4': 1161 | optionalDependencies: 1162 | '@biomejs/cli-darwin-arm64': 1.9.4 1163 | '@biomejs/cli-darwin-x64': 1.9.4 1164 | '@biomejs/cli-linux-arm64': 1.9.4 1165 | '@biomejs/cli-linux-arm64-musl': 1.9.4 1166 | '@biomejs/cli-linux-x64': 1.9.4 1167 | '@biomejs/cli-linux-x64-musl': 1.9.4 1168 | '@biomejs/cli-win32-arm64': 1.9.4 1169 | '@biomejs/cli-win32-x64': 1.9.4 1170 | 1171 | '@biomejs/cli-darwin-arm64@1.9.4': 1172 | optional: true 1173 | 1174 | '@biomejs/cli-darwin-x64@1.9.4': 1175 | optional: true 1176 | 1177 | '@biomejs/cli-linux-arm64-musl@1.9.4': 1178 | optional: true 1179 | 1180 | '@biomejs/cli-linux-arm64@1.9.4': 1181 | optional: true 1182 | 1183 | '@biomejs/cli-linux-x64-musl@1.9.4': 1184 | optional: true 1185 | 1186 | '@biomejs/cli-linux-x64@1.9.4': 1187 | optional: true 1188 | 1189 | '@biomejs/cli-win32-arm64@1.9.4': 1190 | optional: true 1191 | 1192 | '@biomejs/cli-win32-x64@1.9.4': 1193 | optional: true 1194 | 1195 | '@esbuild/aix-ppc64@0.25.0': 1196 | optional: true 1197 | 1198 | '@esbuild/android-arm64@0.25.0': 1199 | optional: true 1200 | 1201 | '@esbuild/android-arm@0.25.0': 1202 | optional: true 1203 | 1204 | '@esbuild/android-x64@0.25.0': 1205 | optional: true 1206 | 1207 | '@esbuild/darwin-arm64@0.25.0': 1208 | optional: true 1209 | 1210 | '@esbuild/darwin-x64@0.25.0': 1211 | optional: true 1212 | 1213 | '@esbuild/freebsd-arm64@0.25.0': 1214 | optional: true 1215 | 1216 | '@esbuild/freebsd-x64@0.25.0': 1217 | optional: true 1218 | 1219 | '@esbuild/linux-arm64@0.25.0': 1220 | optional: true 1221 | 1222 | '@esbuild/linux-arm@0.25.0': 1223 | optional: true 1224 | 1225 | '@esbuild/linux-ia32@0.25.0': 1226 | optional: true 1227 | 1228 | '@esbuild/linux-loong64@0.25.0': 1229 | optional: true 1230 | 1231 | '@esbuild/linux-mips64el@0.25.0': 1232 | optional: true 1233 | 1234 | '@esbuild/linux-ppc64@0.25.0': 1235 | optional: true 1236 | 1237 | '@esbuild/linux-riscv64@0.25.0': 1238 | optional: true 1239 | 1240 | '@esbuild/linux-s390x@0.25.0': 1241 | optional: true 1242 | 1243 | '@esbuild/linux-x64@0.25.0': 1244 | optional: true 1245 | 1246 | '@esbuild/netbsd-arm64@0.25.0': 1247 | optional: true 1248 | 1249 | '@esbuild/netbsd-x64@0.25.0': 1250 | optional: true 1251 | 1252 | '@esbuild/openbsd-arm64@0.25.0': 1253 | optional: true 1254 | 1255 | '@esbuild/openbsd-x64@0.25.0': 1256 | optional: true 1257 | 1258 | '@esbuild/sunos-x64@0.25.0': 1259 | optional: true 1260 | 1261 | '@esbuild/win32-arm64@0.25.0': 1262 | optional: true 1263 | 1264 | '@esbuild/win32-ia32@0.25.0': 1265 | optional: true 1266 | 1267 | '@esbuild/win32-x64@0.25.0': 1268 | optional: true 1269 | 1270 | '@jridgewell/sourcemap-codec@1.5.0': {} 1271 | 1272 | '@module-federation/error-codes@0.14.0': {} 1273 | 1274 | '@module-federation/error-codes@0.14.3': {} 1275 | 1276 | '@module-federation/runtime-core@0.14.0': 1277 | dependencies: 1278 | '@module-federation/error-codes': 0.14.0 1279 | '@module-federation/sdk': 0.14.0 1280 | 1281 | '@module-federation/runtime-core@0.14.3': 1282 | dependencies: 1283 | '@module-federation/error-codes': 0.14.3 1284 | '@module-federation/sdk': 0.14.3 1285 | 1286 | '@module-federation/runtime-tools@0.14.0': 1287 | dependencies: 1288 | '@module-federation/runtime': 0.14.0 1289 | '@module-federation/webpack-bundler-runtime': 0.14.0 1290 | 1291 | '@module-federation/runtime-tools@0.14.3': 1292 | dependencies: 1293 | '@module-federation/runtime': 0.14.3 1294 | '@module-federation/webpack-bundler-runtime': 0.14.3 1295 | 1296 | '@module-federation/runtime@0.14.0': 1297 | dependencies: 1298 | '@module-federation/error-codes': 0.14.0 1299 | '@module-federation/runtime-core': 0.14.0 1300 | '@module-federation/sdk': 0.14.0 1301 | 1302 | '@module-federation/runtime@0.14.3': 1303 | dependencies: 1304 | '@module-federation/error-codes': 0.14.3 1305 | '@module-federation/runtime-core': 0.14.3 1306 | '@module-federation/sdk': 0.14.3 1307 | 1308 | '@module-federation/sdk@0.14.0': {} 1309 | 1310 | '@module-federation/sdk@0.14.3': {} 1311 | 1312 | '@module-federation/webpack-bundler-runtime@0.14.0': 1313 | dependencies: 1314 | '@module-federation/runtime': 0.14.0 1315 | '@module-federation/sdk': 0.14.0 1316 | 1317 | '@module-federation/webpack-bundler-runtime@0.14.3': 1318 | dependencies: 1319 | '@module-federation/runtime': 0.14.3 1320 | '@module-federation/sdk': 0.14.3 1321 | 1322 | '@playwright/test@1.52.0': 1323 | dependencies: 1324 | playwright: 1.52.0 1325 | 1326 | '@rsbuild/core@1.3.22': 1327 | dependencies: 1328 | '@rspack/core': 1.3.12(@swc/helpers@0.5.17) 1329 | '@rspack/lite-tapable': 1.0.1 1330 | '@swc/helpers': 0.5.17 1331 | core-js: 3.42.0 1332 | jiti: 2.4.2 1333 | 1334 | '@rsbuild/core@1.4.0-beta.2': 1335 | dependencies: 1336 | '@rspack/core': 1.3.15(@swc/helpers@0.5.17) 1337 | '@rspack/lite-tapable': 1.0.1 1338 | '@swc/helpers': 0.5.17 1339 | core-js: 3.42.0 1340 | jiti: 2.4.2 1341 | 1342 | '@rslib/core@0.9.1(typescript@5.8.3)': 1343 | dependencies: 1344 | '@rsbuild/core': 1.3.22 1345 | rsbuild-plugin-dts: 0.9.1(@rsbuild/core@1.3.22)(typescript@5.8.3) 1346 | tinyglobby: 0.2.14 1347 | optionalDependencies: 1348 | typescript: 5.8.3 1349 | 1350 | '@rspack/binding-darwin-arm64@1.3.12': 1351 | optional: true 1352 | 1353 | '@rspack/binding-darwin-arm64@1.3.15': 1354 | optional: true 1355 | 1356 | '@rspack/binding-darwin-x64@1.3.12': 1357 | optional: true 1358 | 1359 | '@rspack/binding-darwin-x64@1.3.15': 1360 | optional: true 1361 | 1362 | '@rspack/binding-linux-arm64-gnu@1.3.12': 1363 | optional: true 1364 | 1365 | '@rspack/binding-linux-arm64-gnu@1.3.15': 1366 | optional: true 1367 | 1368 | '@rspack/binding-linux-arm64-musl@1.3.12': 1369 | optional: true 1370 | 1371 | '@rspack/binding-linux-arm64-musl@1.3.15': 1372 | optional: true 1373 | 1374 | '@rspack/binding-linux-x64-gnu@1.3.12': 1375 | optional: true 1376 | 1377 | '@rspack/binding-linux-x64-gnu@1.3.15': 1378 | optional: true 1379 | 1380 | '@rspack/binding-linux-x64-musl@1.3.12': 1381 | optional: true 1382 | 1383 | '@rspack/binding-linux-x64-musl@1.3.15': 1384 | optional: true 1385 | 1386 | '@rspack/binding-win32-arm64-msvc@1.3.12': 1387 | optional: true 1388 | 1389 | '@rspack/binding-win32-arm64-msvc@1.3.15': 1390 | optional: true 1391 | 1392 | '@rspack/binding-win32-ia32-msvc@1.3.12': 1393 | optional: true 1394 | 1395 | '@rspack/binding-win32-ia32-msvc@1.3.15': 1396 | optional: true 1397 | 1398 | '@rspack/binding-win32-x64-msvc@1.3.12': 1399 | optional: true 1400 | 1401 | '@rspack/binding-win32-x64-msvc@1.3.15': 1402 | optional: true 1403 | 1404 | '@rspack/binding@1.3.12': 1405 | optionalDependencies: 1406 | '@rspack/binding-darwin-arm64': 1.3.12 1407 | '@rspack/binding-darwin-x64': 1.3.12 1408 | '@rspack/binding-linux-arm64-gnu': 1.3.12 1409 | '@rspack/binding-linux-arm64-musl': 1.3.12 1410 | '@rspack/binding-linux-x64-gnu': 1.3.12 1411 | '@rspack/binding-linux-x64-musl': 1.3.12 1412 | '@rspack/binding-win32-arm64-msvc': 1.3.12 1413 | '@rspack/binding-win32-ia32-msvc': 1.3.12 1414 | '@rspack/binding-win32-x64-msvc': 1.3.12 1415 | 1416 | '@rspack/binding@1.3.15': 1417 | optionalDependencies: 1418 | '@rspack/binding-darwin-arm64': 1.3.15 1419 | '@rspack/binding-darwin-x64': 1.3.15 1420 | '@rspack/binding-linux-arm64-gnu': 1.3.15 1421 | '@rspack/binding-linux-arm64-musl': 1.3.15 1422 | '@rspack/binding-linux-x64-gnu': 1.3.15 1423 | '@rspack/binding-linux-x64-musl': 1.3.15 1424 | '@rspack/binding-win32-arm64-msvc': 1.3.15 1425 | '@rspack/binding-win32-ia32-msvc': 1.3.15 1426 | '@rspack/binding-win32-x64-msvc': 1.3.15 1427 | 1428 | '@rspack/core@1.3.12(@swc/helpers@0.5.17)': 1429 | dependencies: 1430 | '@module-federation/runtime-tools': 0.14.0 1431 | '@rspack/binding': 1.3.12 1432 | '@rspack/lite-tapable': 1.0.1 1433 | caniuse-lite: 1.0.30001720 1434 | optionalDependencies: 1435 | '@swc/helpers': 0.5.17 1436 | 1437 | '@rspack/core@1.3.15(@swc/helpers@0.5.17)': 1438 | dependencies: 1439 | '@module-federation/runtime-tools': 0.14.3 1440 | '@rspack/binding': 1.3.15 1441 | '@rspack/lite-tapable': 1.0.1 1442 | optionalDependencies: 1443 | '@swc/helpers': 0.5.17 1444 | 1445 | '@rspack/lite-tapable@1.0.1': {} 1446 | 1447 | '@rstest/core@0.0.1': 1448 | dependencies: 1449 | '@rsbuild/core': 1.4.0-beta.2 1450 | '@types/chai': 5.2.2 1451 | '@vitest/expect': 3.2.3 1452 | '@vitest/snapshot': 3.2.3 1453 | birpc: 2.3.0 1454 | chai: 5.2.0 1455 | pathe: 2.0.3 1456 | std-env: 3.9.0 1457 | tinypool: 1.1.0 1458 | 1459 | '@swc/helpers@0.5.17': 1460 | dependencies: 1461 | tslib: 2.8.1 1462 | 1463 | '@types/chai@5.2.2': 1464 | dependencies: 1465 | '@types/deep-eql': 4.0.2 1466 | 1467 | '@types/deep-eql@4.0.2': {} 1468 | 1469 | '@types/node@22.15.29': 1470 | dependencies: 1471 | undici-types: 6.21.0 1472 | 1473 | '@vitest/expect@3.2.3': 1474 | dependencies: 1475 | '@types/chai': 5.2.2 1476 | '@vitest/spy': 3.2.3 1477 | '@vitest/utils': 3.2.3 1478 | chai: 5.2.0 1479 | tinyrainbow: 2.0.0 1480 | 1481 | '@vitest/pretty-format@3.2.3': 1482 | dependencies: 1483 | tinyrainbow: 2.0.0 1484 | 1485 | '@vitest/snapshot@3.2.3': 1486 | dependencies: 1487 | '@vitest/pretty-format': 3.2.3 1488 | magic-string: 0.30.17 1489 | pathe: 2.0.3 1490 | 1491 | '@vitest/spy@3.2.3': 1492 | dependencies: 1493 | tinyspy: 4.0.3 1494 | 1495 | '@vitest/utils@3.2.3': 1496 | dependencies: 1497 | '@vitest/pretty-format': 3.2.3 1498 | loupe: 3.1.3 1499 | tinyrainbow: 2.0.0 1500 | 1501 | abort-controller@3.0.0: 1502 | dependencies: 1503 | event-target-shim: 5.0.1 1504 | 1505 | asn1.js@4.10.1: 1506 | dependencies: 1507 | bn.js: 4.12.0 1508 | inherits: 2.0.4 1509 | minimalistic-assert: 1.0.1 1510 | 1511 | assert@2.1.0: 1512 | dependencies: 1513 | call-bind: 1.0.7 1514 | is-nan: 1.3.2 1515 | object-is: 1.1.6 1516 | object.assign: 4.1.5 1517 | util: 0.12.5 1518 | 1519 | assertion-error@2.0.1: {} 1520 | 1521 | available-typed-arrays@1.0.7: 1522 | dependencies: 1523 | possible-typed-array-names: 1.0.0 1524 | 1525 | base64-js@1.5.1: {} 1526 | 1527 | birpc@2.3.0: {} 1528 | 1529 | bn.js@4.12.0: {} 1530 | 1531 | bn.js@5.2.1: {} 1532 | 1533 | brorand@1.1.0: {} 1534 | 1535 | browserify-aes@1.2.0: 1536 | dependencies: 1537 | buffer-xor: 1.0.3 1538 | cipher-base: 1.0.4 1539 | create-hash: 1.2.0 1540 | evp_bytestokey: 1.0.3 1541 | inherits: 2.0.4 1542 | safe-buffer: 5.2.1 1543 | 1544 | browserify-cipher@1.0.1: 1545 | dependencies: 1546 | browserify-aes: 1.2.0 1547 | browserify-des: 1.0.2 1548 | evp_bytestokey: 1.0.3 1549 | 1550 | browserify-des@1.0.2: 1551 | dependencies: 1552 | cipher-base: 1.0.4 1553 | des.js: 1.1.0 1554 | inherits: 2.0.4 1555 | safe-buffer: 5.2.1 1556 | 1557 | browserify-rsa@4.1.0: 1558 | dependencies: 1559 | bn.js: 5.2.1 1560 | randombytes: 2.1.0 1561 | 1562 | browserify-sign@4.2.3: 1563 | dependencies: 1564 | bn.js: 5.2.1 1565 | browserify-rsa: 4.1.0 1566 | create-hash: 1.2.0 1567 | create-hmac: 1.1.7 1568 | elliptic: 6.5.5 1569 | hash-base: 3.0.4 1570 | inherits: 2.0.4 1571 | parse-asn1: 5.1.7 1572 | readable-stream: 2.3.8 1573 | safe-buffer: 5.2.1 1574 | 1575 | browserify-zlib@0.2.0: 1576 | dependencies: 1577 | pako: 1.0.11 1578 | 1579 | buffer-xor@1.0.3: {} 1580 | 1581 | buffer@5.7.1: 1582 | dependencies: 1583 | base64-js: 1.5.1 1584 | ieee754: 1.2.1 1585 | 1586 | buffer@6.0.3: 1587 | dependencies: 1588 | base64-js: 1.5.1 1589 | ieee754: 1.2.1 1590 | 1591 | builtin-status-codes@3.0.0: {} 1592 | 1593 | call-bind@1.0.7: 1594 | dependencies: 1595 | es-define-property: 1.0.0 1596 | es-errors: 1.3.0 1597 | function-bind: 1.1.2 1598 | get-intrinsic: 1.2.4 1599 | set-function-length: 1.2.2 1600 | 1601 | caniuse-lite@1.0.30001720: {} 1602 | 1603 | chai@5.2.0: 1604 | dependencies: 1605 | assertion-error: 2.0.1 1606 | check-error: 2.1.1 1607 | deep-eql: 5.0.2 1608 | loupe: 3.1.3 1609 | pathval: 2.0.0 1610 | 1611 | check-error@2.1.1: {} 1612 | 1613 | cipher-base@1.0.4: 1614 | dependencies: 1615 | inherits: 2.0.4 1616 | safe-buffer: 5.2.1 1617 | 1618 | console-browserify@1.2.0: {} 1619 | 1620 | constants-browserify@1.0.0: {} 1621 | 1622 | core-js@3.42.0: {} 1623 | 1624 | core-util-is@1.0.3: {} 1625 | 1626 | create-ecdh@4.0.4: 1627 | dependencies: 1628 | bn.js: 4.12.0 1629 | elliptic: 6.5.5 1630 | 1631 | create-hash@1.2.0: 1632 | dependencies: 1633 | cipher-base: 1.0.4 1634 | inherits: 2.0.4 1635 | md5.js: 1.3.5 1636 | ripemd160: 2.0.2 1637 | sha.js: 2.4.11 1638 | 1639 | create-hmac@1.1.7: 1640 | dependencies: 1641 | cipher-base: 1.0.4 1642 | create-hash: 1.2.0 1643 | inherits: 2.0.4 1644 | ripemd160: 2.0.2 1645 | safe-buffer: 5.2.1 1646 | sha.js: 2.4.11 1647 | 1648 | crypto-browserify@3.12.1: 1649 | dependencies: 1650 | browserify-cipher: 1.0.1 1651 | browserify-sign: 4.2.3 1652 | create-ecdh: 4.0.4 1653 | create-hash: 1.2.0 1654 | create-hmac: 1.1.7 1655 | diffie-hellman: 5.0.3 1656 | hash-base: 3.0.4 1657 | inherits: 2.0.4 1658 | pbkdf2: 3.1.2 1659 | public-encrypt: 4.0.3 1660 | randombytes: 2.1.0 1661 | randomfill: 1.0.4 1662 | 1663 | deep-eql@5.0.2: {} 1664 | 1665 | define-data-property@1.1.4: 1666 | dependencies: 1667 | es-define-property: 1.0.0 1668 | es-errors: 1.3.0 1669 | gopd: 1.0.1 1670 | 1671 | define-properties@1.2.1: 1672 | dependencies: 1673 | define-data-property: 1.1.4 1674 | has-property-descriptors: 1.0.2 1675 | object-keys: 1.1.1 1676 | 1677 | des.js@1.1.0: 1678 | dependencies: 1679 | inherits: 2.0.4 1680 | minimalistic-assert: 1.0.1 1681 | 1682 | diffie-hellman@5.0.3: 1683 | dependencies: 1684 | bn.js: 4.12.0 1685 | miller-rabin: 4.0.1 1686 | randombytes: 2.1.0 1687 | 1688 | domain-browser@5.7.0: {} 1689 | 1690 | elliptic@6.5.5: 1691 | dependencies: 1692 | bn.js: 4.12.0 1693 | brorand: 1.1.0 1694 | hash.js: 1.1.7 1695 | hmac-drbg: 1.0.1 1696 | inherits: 2.0.4 1697 | minimalistic-assert: 1.0.1 1698 | minimalistic-crypto-utils: 1.0.1 1699 | 1700 | es-define-property@1.0.0: 1701 | dependencies: 1702 | get-intrinsic: 1.2.4 1703 | 1704 | es-errors@1.3.0: {} 1705 | 1706 | esbuild@0.25.0: 1707 | optionalDependencies: 1708 | '@esbuild/aix-ppc64': 0.25.0 1709 | '@esbuild/android-arm': 0.25.0 1710 | '@esbuild/android-arm64': 0.25.0 1711 | '@esbuild/android-x64': 0.25.0 1712 | '@esbuild/darwin-arm64': 0.25.0 1713 | '@esbuild/darwin-x64': 0.25.0 1714 | '@esbuild/freebsd-arm64': 0.25.0 1715 | '@esbuild/freebsd-x64': 0.25.0 1716 | '@esbuild/linux-arm': 0.25.0 1717 | '@esbuild/linux-arm64': 0.25.0 1718 | '@esbuild/linux-ia32': 0.25.0 1719 | '@esbuild/linux-loong64': 0.25.0 1720 | '@esbuild/linux-mips64el': 0.25.0 1721 | '@esbuild/linux-ppc64': 0.25.0 1722 | '@esbuild/linux-riscv64': 0.25.0 1723 | '@esbuild/linux-s390x': 0.25.0 1724 | '@esbuild/linux-x64': 0.25.0 1725 | '@esbuild/netbsd-arm64': 0.25.0 1726 | '@esbuild/netbsd-x64': 0.25.0 1727 | '@esbuild/openbsd-arm64': 0.25.0 1728 | '@esbuild/openbsd-x64': 0.25.0 1729 | '@esbuild/sunos-x64': 0.25.0 1730 | '@esbuild/win32-arm64': 0.25.0 1731 | '@esbuild/win32-ia32': 0.25.0 1732 | '@esbuild/win32-x64': 0.25.0 1733 | 1734 | event-target-shim@5.0.1: {} 1735 | 1736 | events@3.3.0: {} 1737 | 1738 | evp_bytestokey@1.0.3: 1739 | dependencies: 1740 | md5.js: 1.3.5 1741 | safe-buffer: 5.2.1 1742 | 1743 | fdir@6.4.4(picomatch@4.0.2): 1744 | optionalDependencies: 1745 | picomatch: 4.0.2 1746 | 1747 | for-each@0.3.3: 1748 | dependencies: 1749 | is-callable: 1.2.7 1750 | 1751 | fsevents@2.3.2: 1752 | optional: true 1753 | 1754 | fsevents@2.3.3: 1755 | optional: true 1756 | 1757 | function-bind@1.1.2: {} 1758 | 1759 | get-intrinsic@1.2.4: 1760 | dependencies: 1761 | es-errors: 1.3.0 1762 | function-bind: 1.1.2 1763 | has-proto: 1.0.3 1764 | has-symbols: 1.0.3 1765 | hasown: 2.0.2 1766 | 1767 | get-tsconfig@4.10.0: 1768 | dependencies: 1769 | resolve-pkg-maps: 1.0.0 1770 | 1771 | gopd@1.0.1: 1772 | dependencies: 1773 | get-intrinsic: 1.2.4 1774 | 1775 | has-property-descriptors@1.0.2: 1776 | dependencies: 1777 | es-define-property: 1.0.0 1778 | 1779 | has-proto@1.0.3: {} 1780 | 1781 | has-symbols@1.0.3: {} 1782 | 1783 | has-tostringtag@1.0.2: 1784 | dependencies: 1785 | has-symbols: 1.0.3 1786 | 1787 | hash-base@3.0.4: 1788 | dependencies: 1789 | inherits: 2.0.4 1790 | safe-buffer: 5.2.1 1791 | 1792 | hash-base@3.1.0: 1793 | dependencies: 1794 | inherits: 2.0.4 1795 | readable-stream: 3.6.2 1796 | safe-buffer: 5.2.1 1797 | 1798 | hash.js@1.1.7: 1799 | dependencies: 1800 | inherits: 2.0.4 1801 | minimalistic-assert: 1.0.1 1802 | 1803 | hasown@2.0.2: 1804 | dependencies: 1805 | function-bind: 1.1.2 1806 | 1807 | hmac-drbg@1.0.1: 1808 | dependencies: 1809 | hash.js: 1.1.7 1810 | minimalistic-assert: 1.0.1 1811 | minimalistic-crypto-utils: 1.0.1 1812 | 1813 | https-browserify@1.0.0: {} 1814 | 1815 | ieee754@1.2.1: {} 1816 | 1817 | inherits@2.0.4: {} 1818 | 1819 | is-arguments@1.1.1: 1820 | dependencies: 1821 | call-bind: 1.0.7 1822 | has-tostringtag: 1.0.2 1823 | 1824 | is-callable@1.2.7: {} 1825 | 1826 | is-generator-function@1.0.10: 1827 | dependencies: 1828 | has-tostringtag: 1.0.2 1829 | 1830 | is-nan@1.3.2: 1831 | dependencies: 1832 | call-bind: 1.0.7 1833 | define-properties: 1.2.1 1834 | 1835 | is-typed-array@1.1.13: 1836 | dependencies: 1837 | which-typed-array: 1.1.15 1838 | 1839 | isarray@1.0.0: {} 1840 | 1841 | jiti@2.4.2: {} 1842 | 1843 | json5@2.2.3: {} 1844 | 1845 | loupe@3.1.3: {} 1846 | 1847 | magic-string@0.30.17: 1848 | dependencies: 1849 | '@jridgewell/sourcemap-codec': 1.5.0 1850 | 1851 | md5.js@1.3.5: 1852 | dependencies: 1853 | hash-base: 3.1.0 1854 | inherits: 2.0.4 1855 | safe-buffer: 5.2.1 1856 | 1857 | miller-rabin@4.0.1: 1858 | dependencies: 1859 | bn.js: 4.12.0 1860 | brorand: 1.1.0 1861 | 1862 | minimalistic-assert@1.0.1: {} 1863 | 1864 | minimalistic-crypto-utils@1.0.1: {} 1865 | 1866 | minimist@1.2.8: {} 1867 | 1868 | nano-staged@0.8.0: 1869 | dependencies: 1870 | picocolors: 1.0.0 1871 | 1872 | object-inspect@1.13.2: {} 1873 | 1874 | object-is@1.1.6: 1875 | dependencies: 1876 | call-bind: 1.0.7 1877 | define-properties: 1.2.1 1878 | 1879 | object-keys@1.1.1: {} 1880 | 1881 | object.assign@4.1.5: 1882 | dependencies: 1883 | call-bind: 1.0.7 1884 | define-properties: 1.2.1 1885 | has-symbols: 1.0.3 1886 | object-keys: 1.1.1 1887 | 1888 | os-browserify@0.3.0: {} 1889 | 1890 | pako@1.0.11: {} 1891 | 1892 | parse-asn1@5.1.7: 1893 | dependencies: 1894 | asn1.js: 4.10.1 1895 | browserify-aes: 1.2.0 1896 | evp_bytestokey: 1.0.3 1897 | hash-base: 3.0.4 1898 | pbkdf2: 3.1.2 1899 | safe-buffer: 5.2.1 1900 | 1901 | path-browserify@1.0.1: {} 1902 | 1903 | pathe@2.0.3: {} 1904 | 1905 | pathval@2.0.0: {} 1906 | 1907 | pbkdf2@3.1.2: 1908 | dependencies: 1909 | create-hash: 1.2.0 1910 | create-hmac: 1.1.7 1911 | ripemd160: 2.0.2 1912 | safe-buffer: 5.2.1 1913 | sha.js: 2.4.11 1914 | 1915 | picocolors@1.0.0: {} 1916 | 1917 | picocolors@1.1.1: {} 1918 | 1919 | picomatch@4.0.2: {} 1920 | 1921 | playwright-core@1.52.0: {} 1922 | 1923 | playwright@1.52.0: 1924 | dependencies: 1925 | playwright-core: 1.52.0 1926 | optionalDependencies: 1927 | fsevents: 2.3.2 1928 | 1929 | possible-typed-array-names@1.0.0: {} 1930 | 1931 | process-nextick-args@2.0.1: {} 1932 | 1933 | process@0.11.10: {} 1934 | 1935 | public-encrypt@4.0.3: 1936 | dependencies: 1937 | bn.js: 4.12.0 1938 | browserify-rsa: 4.1.0 1939 | create-hash: 1.2.0 1940 | parse-asn1: 5.1.7 1941 | randombytes: 2.1.0 1942 | safe-buffer: 5.2.1 1943 | 1944 | punycode@1.4.1: {} 1945 | 1946 | punycode@2.3.1: {} 1947 | 1948 | qs@6.13.0: 1949 | dependencies: 1950 | side-channel: 1.0.6 1951 | 1952 | querystring-es3@0.2.1: {} 1953 | 1954 | randombytes@2.1.0: 1955 | dependencies: 1956 | safe-buffer: 5.2.1 1957 | 1958 | randomfill@1.0.4: 1959 | dependencies: 1960 | randombytes: 2.1.0 1961 | safe-buffer: 5.2.1 1962 | 1963 | readable-stream@2.3.8: 1964 | dependencies: 1965 | core-util-is: 1.0.3 1966 | inherits: 2.0.4 1967 | isarray: 1.0.0 1968 | process-nextick-args: 2.0.1 1969 | safe-buffer: 5.1.2 1970 | string_decoder: 1.1.1 1971 | util-deprecate: 1.0.2 1972 | 1973 | readable-stream@3.6.2: 1974 | dependencies: 1975 | inherits: 2.0.4 1976 | string_decoder: 1.3.0 1977 | util-deprecate: 1.0.2 1978 | 1979 | readable-stream@4.7.0: 1980 | dependencies: 1981 | abort-controller: 3.0.0 1982 | buffer: 6.0.3 1983 | events: 3.3.0 1984 | process: 0.11.10 1985 | string_decoder: 1.3.0 1986 | 1987 | resolve-pkg-maps@1.0.0: {} 1988 | 1989 | ripemd160@2.0.2: 1990 | dependencies: 1991 | hash-base: 3.1.0 1992 | inherits: 2.0.4 1993 | 1994 | rsbuild-plugin-dts@0.9.1(@rsbuild/core@1.3.22)(typescript@5.8.3): 1995 | dependencies: 1996 | '@ast-grep/napi': 0.37.0 1997 | '@rsbuild/core': 1.3.22 1998 | magic-string: 0.30.17 1999 | picocolors: 1.1.1 2000 | tinyglobby: 0.2.14 2001 | tsconfig-paths: 4.2.0 2002 | optionalDependencies: 2003 | typescript: 5.8.3 2004 | 2005 | safe-buffer@5.1.2: {} 2006 | 2007 | safe-buffer@5.2.1: {} 2008 | 2009 | set-function-length@1.2.2: 2010 | dependencies: 2011 | define-data-property: 1.1.4 2012 | es-errors: 1.3.0 2013 | function-bind: 1.1.2 2014 | get-intrinsic: 1.2.4 2015 | gopd: 1.0.1 2016 | has-property-descriptors: 1.0.2 2017 | 2018 | setimmediate@1.0.5: {} 2019 | 2020 | sha.js@2.4.11: 2021 | dependencies: 2022 | inherits: 2.0.4 2023 | safe-buffer: 5.2.1 2024 | 2025 | side-channel@1.0.6: 2026 | dependencies: 2027 | call-bind: 1.0.7 2028 | es-errors: 1.3.0 2029 | get-intrinsic: 1.2.4 2030 | object-inspect: 1.13.2 2031 | 2032 | simple-git-hooks@2.13.0: {} 2033 | 2034 | std-env@3.9.0: {} 2035 | 2036 | stream-browserify@3.0.0: 2037 | dependencies: 2038 | inherits: 2.0.4 2039 | readable-stream: 3.6.2 2040 | 2041 | stream-http@3.2.0: 2042 | dependencies: 2043 | builtin-status-codes: 3.0.0 2044 | inherits: 2.0.4 2045 | readable-stream: 3.6.2 2046 | xtend: 4.0.2 2047 | 2048 | string_decoder@1.1.1: 2049 | dependencies: 2050 | safe-buffer: 5.1.2 2051 | 2052 | string_decoder@1.3.0: 2053 | dependencies: 2054 | safe-buffer: 5.2.1 2055 | 2056 | strip-bom@3.0.0: {} 2057 | 2058 | timers-browserify@2.0.12: 2059 | dependencies: 2060 | setimmediate: 1.0.5 2061 | 2062 | tinyglobby@0.2.14: 2063 | dependencies: 2064 | fdir: 6.4.4(picomatch@4.0.2) 2065 | picomatch: 4.0.2 2066 | 2067 | tinypool@1.1.0: {} 2068 | 2069 | tinyrainbow@2.0.0: {} 2070 | 2071 | tinyspy@4.0.3: {} 2072 | 2073 | tsconfig-paths@4.2.0: 2074 | dependencies: 2075 | json5: 2.2.3 2076 | minimist: 1.2.8 2077 | strip-bom: 3.0.0 2078 | 2079 | tslib@2.8.1: {} 2080 | 2081 | tsx@4.19.4: 2082 | dependencies: 2083 | esbuild: 0.25.0 2084 | get-tsconfig: 4.10.0 2085 | optionalDependencies: 2086 | fsevents: 2.3.3 2087 | 2088 | tty-browserify@0.0.1: {} 2089 | 2090 | typescript@5.8.3: {} 2091 | 2092 | undici-types@6.21.0: {} 2093 | 2094 | url@0.11.4: 2095 | dependencies: 2096 | punycode: 1.4.1 2097 | qs: 6.13.0 2098 | 2099 | util-deprecate@1.0.2: {} 2100 | 2101 | util@0.12.5: 2102 | dependencies: 2103 | inherits: 2.0.4 2104 | is-arguments: 1.1.1 2105 | is-generator-function: 1.0.10 2106 | is-typed-array: 1.1.13 2107 | which-typed-array: 1.1.15 2108 | 2109 | vm-browserify@1.1.2: {} 2110 | 2111 | which-typed-array@1.1.15: 2112 | dependencies: 2113 | available-typed-arrays: 1.0.7 2114 | call-bind: 1.0.7 2115 | for-each: 0.3.3 2116 | gopd: 1.0.1 2117 | has-tostringtag: 1.0.2 2118 | 2119 | xtend@4.0.2: {} 2120 | -------------------------------------------------------------------------------- /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 | --------------------------------------------------------------------------------