├── .github ├── FUNDING.yml └── workflows │ ├── ci.yml │ ├── close-stale-issues.yml │ └── publish.yml ├── .gitignore ├── .husky └── pre-commit ├── .vscode ├── extensions.json └── settings.json ├── .yarn └── plugins │ ├── @yarnpkg │ └── plugin-nolyfill.cjs │ └── plugin-remove-postinstall.cjs ├── .yarnrc.yml ├── LICENSE ├── README.md ├── biome.json ├── package.json ├── src ├── index.spec.ts └── index.ts ├── tsconfig.build.json ├── tsconfig.json ├── vitest.config.ts └── yarn.lock /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: wojtekmaj 2 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: ['*'] 6 | pull_request: 7 | branches: [main] 8 | 9 | env: 10 | HUSKY: 0 11 | 12 | jobs: 13 | lint: 14 | name: Static code analysis 15 | runs-on: ubuntu-24.04-arm 16 | 17 | steps: 18 | - name: Checkout 19 | uses: actions/checkout@v4 20 | 21 | - name: Setup Biome 22 | uses: biomejs/setup-biome@v2 23 | 24 | - name: Run tests 25 | run: biome lint 26 | 27 | typescript: 28 | name: Type checking 29 | runs-on: ubuntu-24.04-arm 30 | 31 | steps: 32 | - name: Checkout 33 | uses: actions/checkout@v4 34 | 35 | - name: Cache Yarn cache 36 | uses: actions/cache@v4 37 | env: 38 | cache-name: yarn-cache 39 | with: 40 | path: ~/.yarn/berry/cache 41 | key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/yarn.lock') }} 42 | restore-keys: | 43 | ${{ runner.os }}-${{ env.cache-name }} 44 | 45 | - name: Use Node.js 46 | uses: actions/setup-node@v4 47 | with: 48 | node-version: '22' 49 | 50 | - name: Enable Corepack 51 | run: corepack enable 52 | 53 | - name: Install dependencies 54 | run: yarn --immutable 55 | 56 | - name: Run type checking 57 | run: yarn tsc 58 | 59 | format: 60 | name: Formatting 61 | runs-on: ubuntu-24.04-arm 62 | 63 | steps: 64 | - name: Checkout 65 | uses: actions/checkout@v4 66 | 67 | - name: Setup Biome 68 | uses: biomejs/setup-biome@v2 69 | 70 | - name: Run formatting 71 | run: biome format 72 | 73 | unit: 74 | name: Unit tests 75 | runs-on: ubuntu-24.04-arm 76 | 77 | steps: 78 | - name: Checkout 79 | uses: actions/checkout@v4 80 | 81 | - name: Cache Yarn cache 82 | uses: actions/cache@v4 83 | env: 84 | cache-name: yarn-cache 85 | with: 86 | path: ~/.yarn/berry/cache 87 | key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/yarn.lock') }} 88 | restore-keys: | 89 | ${{ runner.os }}-${{ env.cache-name }} 90 | 91 | - name: Use Node.js 92 | uses: actions/setup-node@v4 93 | with: 94 | node-version: '22' 95 | 96 | - name: Enable Corepack 97 | run: corepack enable 98 | 99 | - name: Install dependencies 100 | run: yarn --immutable 101 | 102 | - name: Run tests 103 | run: yarn unit 104 | -------------------------------------------------------------------------------- /.github/workflows/close-stale-issues.yml: -------------------------------------------------------------------------------- 1 | name: Close stale issues 2 | 3 | on: 4 | schedule: 5 | - cron: '0 0 * * 1' # Every Monday 6 | workflow_dispatch: 7 | 8 | jobs: 9 | close-issues: 10 | name: Close stale issues 11 | runs-on: ubuntu-24.04-arm 12 | 13 | steps: 14 | - name: Close stale issues 15 | uses: actions/stale@v8 16 | with: 17 | days-before-issue-stale: 90 18 | days-before-issue-close: 14 19 | stale-issue-label: 'stale' 20 | stale-issue-message: 'This issue is stale because it has been open 90 days with no activity. Remove stale label or comment or this issue will be closed in 14 days.' 21 | close-issue-message: 'This issue was closed because it has been stalled for 14 days with no activity.' 22 | exempt-issue-labels: 'fresh' 23 | remove-issue-stale-when-updated: true 24 | days-before-pr-stale: -1 25 | days-before-pr-close: -1 26 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | 3 | on: 4 | release: 5 | types: [published] 6 | 7 | env: 8 | HUSKY: 0 9 | 10 | permissions: 11 | id-token: write 12 | 13 | jobs: 14 | publish: 15 | name: Publish 16 | runs-on: ubuntu-24.04-arm 17 | 18 | steps: 19 | - name: Checkout 20 | uses: actions/checkout@v4 21 | 22 | - name: Cache Yarn cache 23 | uses: actions/cache@v4 24 | env: 25 | cache-name: yarn-cache 26 | with: 27 | path: ~/.yarn/berry/cache 28 | key: ${{ runner.os }}-${{ env.cache-name }}-${{ hashFiles('**/yarn.lock') }} 29 | restore-keys: | 30 | ${{ runner.os }}-${{ env.cache-name }} 31 | 32 | - name: Use Node.js 33 | uses: actions/setup-node@v4 34 | with: 35 | node-version: '22' 36 | registry-url: 'https://registry.npmjs.org' 37 | 38 | - name: Enable Corepack 39 | run: corepack enable 40 | 41 | - name: Install dependencies 42 | run: yarn --immutable 43 | 44 | - name: Generate archive 45 | run: yarn pack 46 | 47 | - name: Publish with latest tag 48 | if: github.event.release.prelease == false 49 | run: yarn npm publish --tag latest --provenance 50 | env: 51 | YARN_NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 52 | 53 | - name: Publish with next tag 54 | if: github.event.release.prelease == true 55 | run: yarn npm publish --tag next --provenance 56 | env: 57 | YARN_NPM_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 58 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # OS 2 | .DS_Store 3 | 4 | # Cache 5 | .cache 6 | .playwright 7 | .tmp 8 | *.tsbuildinfo 9 | .eslintcache 10 | 11 | # Yarn 12 | .pnp.* 13 | **/.yarn/* 14 | !**/.yarn/patches 15 | !**/.yarn/plugins 16 | !**/.yarn/releases 17 | !**/.yarn/sdks 18 | !**/.yarn/versions 19 | 20 | # Project-generated directories and files 21 | coverage 22 | dist 23 | node_modules 24 | playwright-report 25 | test-results 26 | package.tgz 27 | 28 | # Logs 29 | npm-debug.log 30 | yarn-error.log 31 | 32 | # .env files 33 | **/.env 34 | **/.env.* 35 | !**/.env.example 36 | -------------------------------------------------------------------------------- /.husky/pre-commit: -------------------------------------------------------------------------------- 1 | yarn format --staged --no-errors-on-unmatched --write 2 | -------------------------------------------------------------------------------- /.vscode/extensions.json: -------------------------------------------------------------------------------- 1 | { 2 | "recommendations": ["biomejs.biome"], 3 | "unwantedRecommendations": ["dbaeumer.jshint", "dbaeumer.vscode-eslint", "esbenp.prettier-vscode"] 4 | } 5 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "editor.defaultFormatter": "biomejs.biome", 3 | "editor.formatOnSave": true, 4 | "search.exclude": { 5 | "**/.yarn": true 6 | } 7 | } 8 | -------------------------------------------------------------------------------- /.yarn/plugins/@yarnpkg/plugin-nolyfill.cjs: -------------------------------------------------------------------------------- 1 | /* eslint-disable */ 2 | //prettier-ignore 3 | module.exports = { 4 | name: "@yarnpkg/plugin-nolyfill", 5 | factory: function (require) { 6 | "use strict";var plugin=(()=>{var p=Object.defineProperty;var i=Object.getOwnPropertyDescriptor;var n=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var c=(t=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(t,{get:(r,e)=>(typeof require<"u"?require:r)[e]}):t)(function(t){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+t+'" is not supported')});var l=(t,r)=>{for(var e in r)p(t,e,{get:r[e],enumerable:!0})},g=(t,r,e,s)=>{if(r&&typeof r=="object"||typeof r=="function")for(let a of n(r))!y.call(t,a)&&a!==e&&p(t,a,{get:()=>r[a],enumerable:!(s=i(r,a))||s.enumerable});return t};var f=t=>g(p({},"__esModule",{value:!0}),t);var b={};l(b,{default:()=>u});var o=c("@yarnpkg/core"),d=["array-buffer-byte-length","array-includes","array.from","array.of","array.prototype.at","array.prototype.every","array.prototype.find","array.prototype.findlast","array.prototype.findlastindex","array.prototype.flat","array.prototype.flatmap","array.prototype.flatmap","array.prototype.foreach","array.prototype.reduce","array.prototype.tosorted","arraybuffer.prototype.slice","assert","asynciterator.prototype","available-typed-arrays","deep-equal","define-properties","es-aggregate-error","es-iterator-helpers","es-set-tostringtag","es6-object-assign","function-bind","function.prototype.name","get-symbol-description","globalthis","gopd","harmony-reflect","has","has-property-descriptors","has-proto","has-symbols","has-tostringtag","hasown","internal-slot","is-arguments","is-array-buffer","is-date-object","is-generator-function","is-nan","is-regex","is-shared-array-buffer","is-string","is-symbol","is-typed-array","is-weakref","isarray","iterator.prototype","jsonify","object-is","object-keys","object.assign","object.entries","object.fromentries","object.getownpropertydescriptors","object.groupby","object.hasown","object.values","promise.allsettled","promise.any","reflect.getprototypeof","reflect.ownkeys","regexp.prototype.flags","safe-array-concat","safe-regex-test","set-function-length","side-channel","string.prototype.at","string.prototype.codepointat","string.prototype.includes","string.prototype.matchall","string.prototype.padend","string.prototype.padstart","string.prototype.repeat","string.prototype.replaceall","string.prototype.split","string.prototype.startswith","string.prototype.trim","string.prototype.trimend","string.prototype.trimleft","string.prototype.trimright","string.prototype.trimstart","typed-array-buffer","typed-array-byte-length","typed-array-byte-offset","typed-array-length","typedarray","unbox-primitive","which-boxed-primitive","which-typed-array"],h=new Map(d.map(t=>[o.structUtils.makeIdent(null,t).identHash,o.structUtils.makeIdent("nolyfill",t)])),m={hooks:{reduceDependency:async t=>{let r=h.get(t.identHash);if(r){let e=o.structUtils.makeDescriptor(r,"latest"),s=o.structUtils.makeRange({protocol:"npm:",source:null,selector:o.structUtils.stringifyDescriptor(e),params:null});return o.structUtils.makeDescriptor(t,s)}return t}}},u=m;return f(b);})(); 7 | return plugin; 8 | } 9 | }; 10 | -------------------------------------------------------------------------------- /.yarn/plugins/plugin-remove-postinstall.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | name: 'plugin-remove-postinstall', 3 | factory: () => ({ 4 | hooks: { 5 | beforeWorkspacePacking(workspace, rawManifest) { 6 | delete rawManifest.scripts.postinstall; 7 | }, 8 | }, 9 | }), 10 | }; 11 | -------------------------------------------------------------------------------- /.yarnrc.yml: -------------------------------------------------------------------------------- 1 | logFilters: 2 | - code: YN0076 3 | level: discard 4 | 5 | nodeLinker: node-modules 6 | 7 | plugins: 8 | - path: .yarn/plugins/plugin-remove-postinstall.cjs 9 | - checksum: e3ca535b4c4288976eebb726082e2e6547c43e0ba1492b3ddbb0cdadc9d61d82ff14307358da06c46a446328345a464364d6c148b2d39fccc18cf6d232291858 10 | path: .yarn/plugins/@yarnpkg/plugin-nolyfill.cjs 11 | spec: "https://raw.githubusercontent.com/wojtekmaj/yarn-plugin-nolyfill/v0.1.1/bundles/@yarnpkg/plugin-nolyfill.js" 12 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024 Wojciech Maj 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 | [![npm](https://img.shields.io/npm/v/vite-plugin-es-toolkit.svg)](https://www.npmjs.com/package/vite-plugin-es-toolkit) ![downloads](https://img.shields.io/npm/dt/vite-plugin-es-toolkit.svg) [![CI](https://github.com/wojtekmaj/vite-plugin-es-toolkit/actions/workflows/ci.yml/badge.svg)](https://github.com/wojtekmaj/vite-plugin-es-toolkit/actions) 2 | 3 | # vite-plugin-es-toolkit 4 | 5 | Vite plugin for replacing Lodash with [es-toolkit](https://es-toolkit.slash.page/), a smaller, faster, and more tree-shakable alternative. 6 | 7 | ## tl;dr 8 | 9 | - Install es-toolkit, if you haven't already, by executing `npm install es-toolkit` or `yarn add es-toolkit`. 10 | - Install by executing `npm install vite-plugin-es-toolkit` or `yarn add vite-plugin-es-toolkit`. 11 | - Import by adding `import esToolkitPlugin from 'vite-plugin-es-toolkit'`. 12 | - Use it by adding `esToolkitPlugin()` to `plugins` section of your Vite config. 13 | 14 | ## Usage 15 | 16 | Here's an example of basic configuration: 17 | 18 | ```ts 19 | import { defineConfig } from 'vite'; 20 | import esToolkitPlugin from 'vite-plugin-es-toolkit'; 21 | 22 | export default defineConfig({ 23 | plugins: [ 24 | esToolkitPlugin(), 25 | ], 26 | }); 27 | ``` 28 | 29 | > [!TIP] 30 | > Measure actual impact of `vite-plugin-es-toolkit` on _your_ codebase with [Vite Compare Bundle Size](https://github.com/marketplace/actions/vite-compare-bundle-size) GitHub Action. 31 | 32 | ## License 33 | 34 | The MIT License. 35 | 36 | ## Author 37 | 38 | 39 | 40 | 43 | 46 | 47 |
41 | Wojciech Maj 42 | 44 | Wojciech Maj 45 |
48 | -------------------------------------------------------------------------------- /biome.json: -------------------------------------------------------------------------------- 1 | { 2 | "$schema": "https://biomejs.dev/schemas/1.9.0/schema.json", 3 | "files": { 4 | "ignore": [".tsimp", ".yarn", "coverage", "dist", ".pnp.cjs", ".pnp.loader.mjs"] 5 | }, 6 | "formatter": { 7 | "lineWidth": 100, 8 | "indentStyle": "space" 9 | }, 10 | "linter": { 11 | "rules": { 12 | "complexity": { 13 | "noUselessSwitchCase": "off" 14 | }, 15 | "correctness": { 16 | "noUnusedImports": "warn", 17 | "noUnusedVariables": "warn" 18 | }, 19 | "suspicious": { 20 | "noConsoleLog": "warn" 21 | } 22 | } 23 | }, 24 | "css": { 25 | "formatter": { 26 | "quoteStyle": "single" 27 | } 28 | }, 29 | "javascript": { 30 | "formatter": { 31 | "quoteStyle": "single" 32 | } 33 | }, 34 | "overrides": [ 35 | { 36 | "include": ["**/package.json"], 37 | "formatter": { 38 | "lineWidth": 1 39 | } 40 | }, 41 | { 42 | "include": ["**/vite.config.ts"], 43 | "linter": { 44 | "rules": { 45 | "suspicious": { 46 | "noConsoleLog": "off" 47 | } 48 | } 49 | } 50 | } 51 | ] 52 | } 53 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-plugin-es-toolkit", 3 | "version": "0.5.0", 4 | "description": "Vite plugin for replacing Lodash with es-toolkit", 5 | "type": "module", 6 | "sideEffects": false, 7 | "main": "./dist/index.js", 8 | "source": "./src/index.ts", 9 | "types": "./dist/index.d.ts", 10 | "exports": { 11 | ".": { 12 | "import": "./dist/index.js" 13 | }, 14 | "./*": "./*" 15 | }, 16 | "scripts": { 17 | "build": "tsc --project tsconfig.build.json", 18 | "clean": "node -e \"fs.rmSync('./dist', { recursive: true, force: true })\"", 19 | "format": "biome format", 20 | "lint": "biome lint", 21 | "postinstall": "husky", 22 | "prepack": "yarn clean && yarn build", 23 | "test": "yarn lint && yarn tsc && yarn format && yarn unit", 24 | "tsc": "tsc", 25 | "unit": "vitest" 26 | }, 27 | "keywords": [ 28 | "vite", 29 | "vite-plugin", 30 | "plugin", 31 | "lodash", 32 | "es-toolkit" 33 | ], 34 | "author": { 35 | "name": "Wojciech Maj", 36 | "email": "kontakt@wojtekmaj.pl" 37 | }, 38 | "license": "MIT", 39 | "devDependencies": { 40 | "@biomejs/biome": "1.9.0", 41 | "es-toolkit": "^1.20.0", 42 | "husky": "^9.0.0", 43 | "typescript": "^5.5.2", 44 | "vite": "^6.2.4", 45 | "vitest": "^3.0.5" 46 | }, 47 | "peerDependencies": { 48 | "es-toolkit": "^1.11.0", 49 | "vite": "^2.3.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0" 50 | }, 51 | "publishConfig": { 52 | "access": "public", 53 | "provenance": true 54 | }, 55 | "files": [ 56 | "dist", 57 | "src" 58 | ], 59 | "repository": { 60 | "type": "git", 61 | "url": "git+https://github.com/wojtekmaj/vite-plugin-es-toolkit.git" 62 | }, 63 | "funding": "https://github.com/wojtekmaj/vite-plugin-es-toolkit?sponsor=1", 64 | "packageManager": "yarn@4.9.1" 65 | } 66 | -------------------------------------------------------------------------------- /src/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest'; 2 | 3 | import esToolkitPlugin from './index.js'; 4 | 5 | function runPlugin(src: string): string | undefined { 6 | const plugin = esToolkitPlugin(); 7 | 8 | return plugin.transform(src, 'file.ts')?.code; 9 | } 10 | 11 | describe('esToolkitPlugin()', () => { 12 | describe('default import', () => { 13 | it('should replace default import from lodash with named import from es-toolkit/compat', () => { 14 | const src = `import _ from 'lodash'; 15 | _.isEqual({}, {}); 16 | _.isFunction(() => {});`; 17 | 18 | const result = runPlugin(src); 19 | 20 | expect(result).toMatchInlineSnapshot( 21 | `"import * as _ from 'es-toolkit/compat'; 22 | _.isEqual({}, {}); 23 | _.isFunction(() => {});"`, 24 | ); 25 | }); 26 | 27 | // Note: default import from lodash-es does not exist, therefore there is no equivalent test case for lodash-es 28 | 29 | it('should replace star import from lodash with named import from es-toolkit/compat', () => { 30 | const src = `import * as _ from 'lodash'; 31 | _.isEqual({}, {}); 32 | _.isFunction(() => {});`; 33 | 34 | const result = runPlugin(src); 35 | 36 | expect(result).toMatchInlineSnapshot( 37 | `"import * as _ from 'es-toolkit/compat'; 38 | _.isEqual({}, {}); 39 | _.isFunction(() => {});"`, 40 | ); 41 | }); 42 | 43 | it('should replace star import from lodash-es with named import from es-toolkit/compat', () => { 44 | const src = `import * as _ from 'lodash-es'; 45 | _.isEqual({}, {}); 46 | _.isFunction(() => {});`; 47 | 48 | const result = runPlugin(src); 49 | 50 | expect(result).toMatchInlineSnapshot( 51 | `"import * as _ from 'es-toolkit/compat'; 52 | _.isEqual({}, {}); 53 | _.isFunction(() => {});"`, 54 | ); 55 | }); 56 | 57 | it('should keep default import from lodash if an unsupported function is imported', () => { 58 | const src = `import _ from 'lodash'; 59 | _.every([], () => true); 60 | _.isEqual({}, {});`; 61 | 62 | const result = runPlugin(src); 63 | 64 | expect(result).toMatchInlineSnapshot(`"import _ from 'lodash'; 65 | _.every([], () => true); 66 | _.isEqual({}, {});"`); 67 | }); 68 | 69 | // Note: default import from lodash-es does not exist, therefore there is no equivalent test case for lodash-es 70 | 71 | it('should keep star import from lodash if an unsupported function is imported', () => { 72 | const src = `import * as _ from 'lodash'; 73 | _.every([], () => true); 74 | _.isEqual({}, {});`; 75 | 76 | const result = runPlugin(src); 77 | 78 | expect(result).toMatchInlineSnapshot(`"import * as _ from 'lodash'; 79 | _.every([], () => true); 80 | _.isEqual({}, {});"`); 81 | }); 82 | 83 | it('should keep star import from lodash-es if an unsupported function is imported', () => { 84 | const src = `import * as _ from 'lodash-es'; 85 | _.every([], () => true); 86 | _.isEqual({}, {});`; 87 | 88 | const result = runPlugin(src); 89 | 90 | expect(result).toMatchInlineSnapshot(`"import * as _ from 'lodash-es'; 91 | _.every([], () => true); 92 | _.isEqual({}, {});"`); 93 | }); 94 | 95 | it('should not raise false positives for unsupported functions from lodash', () => { 96 | const src = `import lodash from 'lodash'; 97 | totallynotlodash.every([], () => true); 98 | lodash.isEqual({}, {});`; 99 | 100 | const result = runPlugin(src); 101 | 102 | expect(result).toMatchInlineSnapshot(`"import * as lodash from 'es-toolkit/compat'; 103 | totallynotlodash.every([], () => true); 104 | lodash.isEqual({}, {});"`); 105 | }); 106 | 107 | // Note: default import from lodash-es does not exist, therefore there is no equivalent test case for lodash-es 108 | }); 109 | 110 | describe('named import', () => { 111 | it('should replace named import from lodash with named import from es-toolkit/compat', () => { 112 | const src = `import { isEqual } from 'lodash';`; 113 | 114 | const result = runPlugin(src); 115 | 116 | expect(result).toMatchInlineSnapshot(`"import { isEqual } from 'es-toolkit/compat';"`); 117 | }); 118 | 119 | it('should replace named import from lodash-es with named import from es-toolkit/compat', () => { 120 | const src = `import { isEqual } from 'lodash-es';`; 121 | 122 | const result = runPlugin(src); 123 | 124 | expect(result).toMatchInlineSnapshot(`"import { isEqual } from 'es-toolkit/compat';"`); 125 | }); 126 | 127 | it('should keep unsupported named imports from lodash', () => { 128 | const src = `import { every } from 'lodash';`; 129 | 130 | const result = runPlugin(src); 131 | 132 | expect(result).toMatchInlineSnapshot(`"import { every } from 'lodash';"`); 133 | }); 134 | 135 | it('should keep unsupported named imports from lodash', () => { 136 | const src = `import { every } from 'lodash-es';`; 137 | 138 | const result = runPlugin(src); 139 | 140 | expect(result).toMatchInlineSnapshot(`"import { every } from 'lodash-es';"`); 141 | }); 142 | 143 | it('should replace multiple named imports from lodash with named imports from es-toolkit/compat', () => { 144 | const src = `import { isEqual, isFunction } from 'lodash';`; 145 | 146 | const result = runPlugin(src); 147 | 148 | expect(result).toMatchInlineSnapshot( 149 | `"import { isEqual, isFunction } from 'es-toolkit/compat';"`, 150 | ); 151 | }); 152 | 153 | it('should replace multiple named imports from lodash-es with named imports from es-toolkit/compat', () => { 154 | const src = `import { isEqual, isFunction } from 'lodash-es';`; 155 | 156 | const result = runPlugin(src); 157 | 158 | expect(result).toMatchInlineSnapshot( 159 | `"import { isEqual, isFunction } from 'es-toolkit/compat';"`, 160 | ); 161 | }); 162 | 163 | it('should replace renamed named import from lodash with named import from es-toolkit/compat', () => { 164 | const src = `import { isEqual as lodashIsEqual } from 'lodash';`; 165 | 166 | const result = runPlugin(src); 167 | 168 | expect(result).toMatchInlineSnapshot( 169 | `"import { isEqual as lodashIsEqual } from 'es-toolkit/compat';"`, 170 | ); 171 | }); 172 | 173 | it('should replace renamed named import from lodash-es with named import from es-toolkit/compat', () => { 174 | const src = `import { isEqual as lodashIsEqual } from 'lodash-es';`; 175 | 176 | const result = runPlugin(src); 177 | 178 | expect(result).toMatchInlineSnapshot( 179 | `"import { isEqual as lodashIsEqual } from 'es-toolkit/compat';"`, 180 | ); 181 | }); 182 | 183 | it('should replace multiple renamed named imports from lodash with named import from es-toolkit/compat', () => { 184 | const src = `import { isEqual as lodashIsEqual, isFunction as lodashIsFunction } from 'lodash';`; 185 | 186 | const result = runPlugin(src); 187 | 188 | expect(result).toMatchInlineSnapshot( 189 | `"import { isEqual as lodashIsEqual, isFunction as lodashIsFunction } from 'es-toolkit/compat';"`, 190 | ); 191 | }); 192 | 193 | it('should replace multiple renamed named imports from lodash-es with named import from es-toolkit/compat', () => { 194 | const src = `import { isEqual as lodashIsEqual, isFunction as lodashIsFunction } from 'lodash-es';`; 195 | 196 | const result = runPlugin(src); 197 | 198 | expect(result).toMatchInlineSnapshot( 199 | `"import { isEqual as lodashIsEqual, isFunction as lodashIsFunction } from 'es-toolkit/compat';"`, 200 | ); 201 | }); 202 | 203 | it('should replace multiple named imports (multiline) from lodash with named imports from es-toolkit/compat', () => { 204 | const src = `import { 205 | isEqual, 206 | isFunction, 207 | } from 'lodash';`; 208 | 209 | const result = runPlugin(src); 210 | 211 | expect(result).toMatchInlineSnapshot( 212 | `"import { isEqual, isFunction } from 'es-toolkit/compat';"`, 213 | ); 214 | }); 215 | 216 | it('should replace multiple named imports (multiline) from lodash-es with named imports from es-toolkit/compat', () => { 217 | const src = `import { 218 | isEqual, 219 | isFunction, 220 | } from 'lodash-es';`; 221 | 222 | const result = runPlugin(src); 223 | 224 | expect(result).toMatchInlineSnapshot( 225 | `"import { isEqual, isFunction } from 'es-toolkit/compat';"`, 226 | ); 227 | }); 228 | 229 | it('should replace multiple renamed named imports (multiline) from lodash with named imports from es-toolkit/compat', () => { 230 | const src = `import { 231 | isEqual as lodashIsEqual, 232 | isFunction as lodashIsFunction, 233 | } from 'lodash';`; 234 | 235 | const result = runPlugin(src); 236 | 237 | expect(result).toMatchInlineSnapshot( 238 | `"import { isEqual as lodashIsEqual, isFunction as lodashIsFunction } from 'es-toolkit/compat';"`, 239 | ); 240 | }); 241 | 242 | it('should replace multiple renamed named imports (multiline) from lodash-es with named imports from es-toolkit/compat', () => { 243 | const src = `import { 244 | isEqual as lodashIsEqual, 245 | isFunction as lodashIsFunction, 246 | } from 'lodash-es';`; 247 | 248 | const result = runPlugin(src); 249 | 250 | expect(result).toMatchInlineSnapshot( 251 | `"import { isEqual as lodashIsEqual, isFunction as lodashIsFunction } from 'es-toolkit/compat';"`, 252 | ); 253 | }); 254 | 255 | it('should replace named import from lodash with named import from es-toolkit/compat and keep unsupported named imports from lodash', () => { 256 | const src = `import { every, isEqual } from 'lodash';`; 257 | 258 | const result = runPlugin(src); 259 | 260 | expect(result).toMatchInlineSnapshot( 261 | `"import { isEqual } from 'es-toolkit/compat';import { every } from 'lodash';"`, 262 | ); 263 | }); 264 | 265 | it('should replace named import from lodash-es with named import from es-toolkit/compat and keep unsupported named imports from lodash', () => { 266 | const src = `import { every, isEqual } from 'lodash-es';`; 267 | 268 | const result = runPlugin(src); 269 | 270 | expect(result).toMatchInlineSnapshot( 271 | `"import { isEqual } from 'es-toolkit/compat';import { every } from 'lodash-es';"`, 272 | ); 273 | }); 274 | }); 275 | 276 | describe('import from lodash/*', () => { 277 | it('should replace default import from lodash/* with named import from es-toolkit/compat', () => { 278 | const src = `import isEqual from 'lodash/isEqual';`; 279 | 280 | const result = runPlugin(src); 281 | 282 | expect(result).toMatchInlineSnapshot(`"import { isEqual } from 'es-toolkit/compat';"`); 283 | }); 284 | 285 | it('should replace default import from lodash-es/* with named import from es-toolkit/compat', () => { 286 | const src = `import isEqual from 'lodash-es/isEqual';`; 287 | 288 | const result = runPlugin(src); 289 | 290 | expect(result).toMatchInlineSnapshot(`"import { isEqual } from 'es-toolkit/compat';"`); 291 | }); 292 | 293 | it('should replace renamed default import from lodash/* with renamed named import from es-toolkit/compat', () => { 294 | const src = `import lodashIsEqual from 'lodash/isEqual';`; 295 | 296 | const result = runPlugin(src); 297 | 298 | expect(result).toMatchInlineSnapshot( 299 | `"import { isEqual as lodashIsEqual } from 'es-toolkit/compat';"`, 300 | ); 301 | }); 302 | 303 | it('should replace renamed default import from lodash-es/* with renamed named import from es-toolkit/compat', () => { 304 | const src = `import lodashIsEqual from 'lodash-es/isEqual';`; 305 | 306 | const result = runPlugin(src); 307 | 308 | expect(result).toMatchInlineSnapshot( 309 | `"import { isEqual as lodashIsEqual } from 'es-toolkit/compat';"`, 310 | ); 311 | }); 312 | 313 | it('should keep unsupported default imports from lodash/*', () => { 314 | const src = `import every from 'lodash/every';`; 315 | 316 | const result = runPlugin(src); 317 | 318 | expect(result).toMatchInlineSnapshot(`"import every from 'lodash/every';"`); 319 | }); 320 | 321 | it('should keep unsupported default imports from lodash-es/*', () => { 322 | const src = `import every from 'lodash-es/every';`; 323 | 324 | const result = runPlugin(src); 325 | 326 | expect(result).toMatchInlineSnapshot(`"import every from 'lodash-es/every';"`); 327 | }); 328 | }); 329 | 330 | describe('import from lodash/*.js', () => { 331 | it('should replace default import from lodash/*.js with named import from es-toolkit/compat', () => { 332 | const src = `import isEqual from 'lodash/isEqual.js';`; 333 | 334 | const result = runPlugin(src); 335 | 336 | expect(result).toMatchInlineSnapshot(`"import { isEqual } from 'es-toolkit/compat';"`); 337 | }); 338 | 339 | it('should replace default import from lodash-es/*.js with named import from es-toolkit/compat', () => { 340 | const src = `import isEqual from 'lodash-es/isEqual.js';`; 341 | 342 | const result = runPlugin(src); 343 | 344 | expect(result).toMatchInlineSnapshot(`"import { isEqual } from 'es-toolkit/compat';"`); 345 | }); 346 | 347 | it('should replace renamed default import from lodash/*.js with renamed named import from es-toolkit/compat', () => { 348 | const src = `import lodashIsEqual from 'lodash/isEqual.js';`; 349 | 350 | const result = runPlugin(src); 351 | 352 | expect(result).toMatchInlineSnapshot( 353 | `"import { isEqual as lodashIsEqual } from 'es-toolkit/compat';"`, 354 | ); 355 | }); 356 | 357 | it('should replace renamed default import from lodash-es/*.js with renamed named import from es-toolkit/compat', () => { 358 | const src = `import lodashIsEqual from 'lodash-es/isEqual.js';`; 359 | 360 | const result = runPlugin(src); 361 | 362 | expect(result).toMatchInlineSnapshot( 363 | `"import { isEqual as lodashIsEqual } from 'es-toolkit/compat';"`, 364 | ); 365 | }); 366 | 367 | it('should keep unsupported default imports from lodash/*.js', () => { 368 | const src = `import every from 'lodash/every.js';`; 369 | 370 | const result = runPlugin(src); 371 | 372 | expect(result).toMatchInlineSnapshot(`"import every from 'lodash/every.js';"`); 373 | }); 374 | 375 | it('should keep unsupported default imports from lodash-es/*.js', () => { 376 | const src = `import every from 'lodash-es/every.js';`; 377 | 378 | const result = runPlugin(src); 379 | 380 | expect(result).toMatchInlineSnapshot(`"import every from 'lodash-es/every.js';"`); 381 | }); 382 | }); 383 | 384 | describe('import from lodash.*', () => { 385 | it('should replace default import from lodash.* with named import from es-toolkit/compat when import name matches function name', () => { 386 | const src = `import get from 'lodash.get';`; 387 | 388 | const result = runPlugin(src); 389 | 390 | expect(result).toMatchInlineSnapshot(`"import { get } from 'es-toolkit/compat';"`); 391 | }); 392 | 393 | it('should replace default import from lodash.* with renamed named import from es-toolkit/compat when import name is different', () => { 394 | const src = `import lodashGet from 'lodash.get';`; 395 | 396 | const result = runPlugin(src); 397 | 398 | expect(result).toMatchInlineSnapshot( 399 | `"import { get as lodashGet } from 'es-toolkit/compat';"`, 400 | ); 401 | }); 402 | 403 | it('should keep unsupported default imports from lodash.*', () => { 404 | const src = `import every from 'lodash.every';`; 405 | 406 | const result = runPlugin(src); 407 | 408 | expect(result).toMatchInlineSnapshot(`"import every from 'lodash.every';"`); 409 | }); 410 | 411 | it('should handle multiple lodash.* imports correctly', () => { 412 | const src = ` 413 | import get from 'lodash.get'; 414 | import isEqual from 'lodash.isequal'; 415 | import lodashClone from 'lodash.clone'; 416 | import every from 'lodash.every'; 417 | `; 418 | 419 | const result = runPlugin(src); 420 | 421 | expect(result).toMatchInlineSnapshot(`" 422 | import { get } from 'es-toolkit/compat'; 423 | import { isEqual } from 'es-toolkit/compat'; 424 | import { clone as lodashClone } from 'es-toolkit/compat'; 425 | import every from 'lodash.every'; 426 | "`); 427 | }); 428 | }); 429 | }); 430 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import * as esToolkitCompat from 'es-toolkit/compat'; 2 | 3 | import type { PluginOption } from 'vite'; 4 | 5 | const defaultImportRegex = /import\s+(\w+)\s+from\s+['"]lodash['"]/gm; 6 | const starImportRegex = /import\s+\*\s+as\s+(\w+)\s+from\s+['"](lodash(?:-es)?)['"]/gm; 7 | const namedImportsRegex = 8 | /import\s+\{\s*([\w( as \w)\s,]+)\s*\}\s+from\s+['"](lodash(?:-es)?)['"]/gm; 9 | const defaultSingleImportRegex = /import\s+(\w+)\s+from\s+['"](lodash(?:-es)?)\/(\w+)(\.js)?['"]/gm; 10 | const standalonePackageImportRegex = /import\s+(\w+)\s+from\s+['"]lodash\.(\w+)['"]/gm; 11 | 12 | type NamedImport = { 13 | actual: string; 14 | custom: string; 15 | }; 16 | 17 | export default function viteEsToolkitPlugin(): { 18 | name: string; 19 | transform(src: string, id: string): { code: string; map: null } | undefined; 20 | } { 21 | const actualFunctionNameMap = new Map(); 22 | 23 | const supportedFunctions = new Set(Object.keys(esToolkitCompat)); 24 | 25 | const supportedStandalonePackages = new Set( 26 | Array.from(supportedFunctions).map((name) => { 27 | const result = name.toLowerCase(); 28 | 29 | actualFunctionNameMap.set(result, name); 30 | 31 | return result; 32 | }), 33 | ); 34 | 35 | const transformCache = new Map(); 36 | 37 | function isSupportedFunction(name: string): boolean { 38 | return supportedFunctions.has(name); 39 | } 40 | 41 | function isUnsupportedFunction(name: string): boolean { 42 | return !supportedFunctions.has(name); 43 | } 44 | 45 | function isUnsupportedStandalonePackage(name: string): boolean { 46 | return !supportedStandalonePackages.has(name); 47 | } 48 | 49 | function warnUnsupportedFunction(names: string[]): void { 50 | console.warn(`Unsupported lodash function${names.length > 1 ? 's' : ''}: ${names.join(', ')}`); 51 | } 52 | 53 | function warnUnsupportedStandalonePackage(name: string): void { 54 | console.warn(`Unsupported lodash standalone package: ${name}`); 55 | } 56 | 57 | /** 58 | * Parses named import string into an object, e.g.: 59 | * ``` 60 | * parseNamedImport('isEqual as lodashIsEqual') 61 | * ``` 62 | * will return: 63 | * ``` 64 | * { actual: 'isEqual', custom: 'lodashIsEqual' } 65 | * ``` 66 | * and: 67 | * ``` 68 | * parseNamedImport('isEqual') 69 | * ``` 70 | * will return: 71 | * ``` 72 | * { actual: 'isEqual', custom: 'isEqual' } 73 | * ``` 74 | */ 75 | function parseNamedImport(namedImportName: string): NamedImport { 76 | const asIndex = namedImportName.indexOf(' as '); 77 | 78 | if (asIndex === -1) { 79 | return { 80 | actual: namedImportName, 81 | custom: namedImportName, 82 | }; 83 | } 84 | 85 | return { 86 | actual: namedImportName.substring(0, asIndex), 87 | custom: namedImportName.substring(asIndex + 4), // 4 = length of " as " 88 | }; 89 | } 90 | 91 | function renderNamedImport({ actual, custom }: NamedImport): string { 92 | return actual === custom ? actual : `${actual} as ${custom}`; 93 | } 94 | 95 | function renderNamedImports(namedImports: NamedImport[]) { 96 | return namedImports.map(renderNamedImport).join(', '); 97 | } 98 | 99 | function getActualFunctionName(standalonePackageName: string): string | undefined { 100 | return actualFunctionNameMap.get(standalonePackageName); 101 | } 102 | 103 | return { 104 | name: 'vite:es-toolkit', 105 | transform(src) { 106 | if (!src.includes('lodash')) { 107 | return; 108 | } 109 | 110 | const cacheKey = src; 111 | 112 | if (transformCache.has(cacheKey)) { 113 | return transformCache.get(cacheKey); 114 | } 115 | 116 | let srcWithReplacedImports = src; 117 | 118 | /** 119 | * Replaces e.g.: 120 | * ``` 121 | * import lodash from 'lodash'; 122 | * ``` 123 | * with: 124 | * ``` 125 | * import * as lodash from 'es-toolkit/compat'; 126 | * ``` 127 | * provided that no unsupported functions are used. 128 | */ 129 | srcWithReplacedImports = srcWithReplacedImports.replace( 130 | defaultImportRegex, 131 | (match, defaultImportName: string) => { 132 | const usageRegExp = new RegExp(`\\b${defaultImportName}\\.\\w+`, 'g'); 133 | const globalImportUsages = srcWithReplacedImports.match(usageRegExp); 134 | 135 | if (!globalImportUsages) { 136 | // No lodash functions are used, will be treeshaken anyway 137 | return match; 138 | } 139 | 140 | const unsupportedFunctions = new Set(); 141 | 142 | for (const usage of globalImportUsages) { 143 | const functionName = usage.split('.')[1] || ''; 144 | 145 | if (isUnsupportedFunction(functionName)) { 146 | unsupportedFunctions.add(functionName); 147 | } 148 | } 149 | 150 | if (unsupportedFunctions.size > 0) { 151 | warnUnsupportedFunction(Array.from(unsupportedFunctions)); 152 | 153 | return match; 154 | } 155 | 156 | return `import * as ${defaultImportName} from 'es-toolkit/compat'`; 157 | }, 158 | ); 159 | 160 | /** 161 | * Replaces e.g.: 162 | * ``` 163 | * import * as lodash from 'lodash'; 164 | * ``` 165 | * with: 166 | * ``` 167 | * import * as lodash from 'es-toolkit/compat'; 168 | * ``` 169 | * provided that no unsupported functions are used. 170 | */ 171 | srcWithReplacedImports = srcWithReplacedImports.replace( 172 | starImportRegex, 173 | (match, starImportName: string) => { 174 | const usageRegExp = new RegExp(`\\b${starImportName}\\.\\w+`, 'g'); 175 | const globalImportUsages = srcWithReplacedImports.match(usageRegExp); 176 | 177 | if (!globalImportUsages) { 178 | // No lodash functions are used, will be treeshaken anyway 179 | return match; 180 | } 181 | 182 | const unsupportedFunctions = new Set(); 183 | 184 | for (const usage of globalImportUsages) { 185 | const functionName = usage.split('.')[1] || ''; 186 | 187 | if (isUnsupportedFunction(functionName)) { 188 | unsupportedFunctions.add(functionName); 189 | } 190 | } 191 | 192 | if (unsupportedFunctions.size > 0) { 193 | warnUnsupportedFunction(Array.from(unsupportedFunctions)); 194 | 195 | return match; 196 | } 197 | 198 | return `import * as ${starImportName} from 'es-toolkit/compat'`; 199 | }, 200 | ); 201 | 202 | /** 203 | * Replaces e.g.: 204 | * ``` 205 | * import { every, isEqual } from 'lodash'; 206 | * ``` 207 | * with: 208 | * ``` 209 | * import { every } from 'lodash'; 210 | * import { isEqual } from 'es-toolkit/compat'; 211 | * ``` 212 | * (every is not supported at the moment of writing) 213 | */ 214 | srcWithReplacedImports = srcWithReplacedImports.replace( 215 | namedImportsRegex, 216 | (match, rawNamedImportNames: string, moduleName: string) => { 217 | // Split by comma, trim whitespace, remove empty strings 218 | const namedImportNames = rawNamedImportNames 219 | .split(',') 220 | .map((param) => param.trim()) 221 | .filter(Boolean); 222 | 223 | const currentSupportedFunctions: NamedImport[] = []; 224 | const unsupportedFunctions: NamedImport[] = []; 225 | 226 | for (const name of namedImportNames) { 227 | const parsedImport = parseNamedImport(name); 228 | 229 | if (isSupportedFunction(parsedImport.actual)) { 230 | currentSupportedFunctions.push(parsedImport); 231 | } else { 232 | unsupportedFunctions.push(parsedImport); 233 | } 234 | } 235 | 236 | if (!currentSupportedFunctions.length) { 237 | return match; 238 | } 239 | 240 | let result = `import { ${renderNamedImports(currentSupportedFunctions)} } from 'es-toolkit/compat'`; 241 | 242 | if (unsupportedFunctions.length > 0) { 243 | warnUnsupportedFunction(unsupportedFunctions.map(({ actual }) => actual)); 244 | 245 | result += `;import { ${renderNamedImports(unsupportedFunctions)} } from '${moduleName}'`; 246 | } 247 | 248 | return result; 249 | }, 250 | ); 251 | 252 | /** 253 | * Replaces e.g.: 254 | * ``` 255 | * import isEqual from 'lodash/isEqual'; 256 | * ``` 257 | * with: 258 | * ``` 259 | * import { isEqual } from 'es-toolkit/compat'; 260 | * ``` 261 | * and: 262 | * ``` 263 | * import lodashIsEqual from 'lodash/isEqual'; 264 | * ``` 265 | * with: 266 | * ``` 267 | * import { isEqual as lodashIsEqual } from 'es-toolkit/compat'; 268 | */ 269 | srcWithReplacedImports = srcWithReplacedImports.replace( 270 | defaultSingleImportRegex, 271 | (match, custom: string, _moduleName: string, actual: string) => { 272 | if (isUnsupportedFunction(actual)) { 273 | warnUnsupportedFunction([actual]); 274 | 275 | return match; 276 | } 277 | 278 | return `import { ${renderNamedImport({ actual, custom })} } from 'es-toolkit/compat'`; 279 | }, 280 | ); 281 | 282 | /** 283 | * Replaces e.g.: 284 | * ``` 285 | * import get from 'lodash.get'; 286 | * ``` 287 | * with: 288 | * ``` 289 | * import { get } from 'es-toolkit/compat'; 290 | * ``` 291 | * and: 292 | * ``` 293 | * import lodashGet from 'lodash.get'; 294 | * ``` 295 | * with: 296 | * ``` 297 | * import { get as lodashGet } from 'es-toolkit/compat'; 298 | * ``` 299 | */ 300 | srcWithReplacedImports = srcWithReplacedImports.replace( 301 | standalonePackageImportRegex, 302 | (match, custom: string, standalonePackageName: string) => { 303 | if (isUnsupportedStandalonePackage(standalonePackageName)) { 304 | warnUnsupportedStandalonePackage(standalonePackageName); 305 | 306 | return match; 307 | } 308 | 309 | const actual = getActualFunctionName(standalonePackageName); 310 | 311 | if (!actual) { 312 | throw new Error(`Unable to find actual function name for ${standalonePackageName}`); 313 | } 314 | 315 | return `import { ${renderNamedImport({ actual, custom })} } from 'es-toolkit/compat'`; 316 | }, 317 | ); 318 | 319 | const result = { 320 | code: srcWithReplacedImports, 321 | map: null, 322 | }; 323 | 324 | transformCache.set(cacheKey, result); 325 | 326 | return result; 327 | }, 328 | } satisfies PluginOption; 329 | } 330 | -------------------------------------------------------------------------------- /tsconfig.build.json: -------------------------------------------------------------------------------- 1 | { 2 | "extends": "./tsconfig.json", 3 | "compilerOptions": { 4 | "noEmit": false, 5 | "outDir": "dist", 6 | "rootDir": "src" 7 | }, 8 | "include": ["src"], 9 | "exclude": ["src/**/*.spec.ts"] 10 | } 11 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "esModuleInterop": true, 5 | "isolatedDeclarations": true, 6 | "isolatedModules": true, 7 | "module": "nodenext", 8 | "moduleDetection": "force", 9 | "noEmit": true, 10 | "noUncheckedIndexedAccess": true, 11 | "outDir": "dist", 12 | "skipLibCheck": true, 13 | "strict": true, 14 | "target": "es2022", 15 | "verbatimModuleSyntax": true 16 | }, 17 | "exclude": ["dist"] 18 | } 19 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | test: { 5 | watch: false, 6 | }, 7 | }); 8 | -------------------------------------------------------------------------------- /yarn.lock: -------------------------------------------------------------------------------- 1 | # This file is generated by running "yarn install" inside your project. 2 | # Manual changes might be lost - proceed with caution! 3 | 4 | __metadata: 5 | version: 8 6 | cacheKey: 10c0 7 | 8 | "@biomejs/biome@npm:1.9.0": 9 | version: 1.9.0 10 | resolution: "@biomejs/biome@npm:1.9.0" 11 | dependencies: 12 | "@biomejs/cli-darwin-arm64": "npm:1.9.0" 13 | "@biomejs/cli-darwin-x64": "npm:1.9.0" 14 | "@biomejs/cli-linux-arm64": "npm:1.9.0" 15 | "@biomejs/cli-linux-arm64-musl": "npm:1.9.0" 16 | "@biomejs/cli-linux-x64": "npm:1.9.0" 17 | "@biomejs/cli-linux-x64-musl": "npm:1.9.0" 18 | "@biomejs/cli-win32-arm64": "npm:1.9.0" 19 | "@biomejs/cli-win32-x64": "npm:1.9.0" 20 | dependenciesMeta: 21 | "@biomejs/cli-darwin-arm64": 22 | optional: true 23 | "@biomejs/cli-darwin-x64": 24 | optional: true 25 | "@biomejs/cli-linux-arm64": 26 | optional: true 27 | "@biomejs/cli-linux-arm64-musl": 28 | optional: true 29 | "@biomejs/cli-linux-x64": 30 | optional: true 31 | "@biomejs/cli-linux-x64-musl": 32 | optional: true 33 | "@biomejs/cli-win32-arm64": 34 | optional: true 35 | "@biomejs/cli-win32-x64": 36 | optional: true 37 | bin: 38 | biome: bin/biome 39 | checksum: 10c0/b07ad2c8dc3d52c0a4eea37f98d36399b33a13759903aa65f9678db916810b773fe94937c304899158479bccd8c3c90f0f30af22b34d6dc5963774f1acc5e245 40 | languageName: node 41 | linkType: hard 42 | 43 | "@biomejs/cli-darwin-arm64@npm:1.9.0": 44 | version: 1.9.0 45 | resolution: "@biomejs/cli-darwin-arm64@npm:1.9.0" 46 | conditions: os=darwin & cpu=arm64 47 | languageName: node 48 | linkType: hard 49 | 50 | "@biomejs/cli-darwin-x64@npm:1.9.0": 51 | version: 1.9.0 52 | resolution: "@biomejs/cli-darwin-x64@npm:1.9.0" 53 | conditions: os=darwin & cpu=x64 54 | languageName: node 55 | linkType: hard 56 | 57 | "@biomejs/cli-linux-arm64-musl@npm:1.9.0": 58 | version: 1.9.0 59 | resolution: "@biomejs/cli-linux-arm64-musl@npm:1.9.0" 60 | conditions: os=linux & cpu=arm64 & libc=musl 61 | languageName: node 62 | linkType: hard 63 | 64 | "@biomejs/cli-linux-arm64@npm:1.9.0": 65 | version: 1.9.0 66 | resolution: "@biomejs/cli-linux-arm64@npm:1.9.0" 67 | conditions: os=linux & cpu=arm64 & libc=glibc 68 | languageName: node 69 | linkType: hard 70 | 71 | "@biomejs/cli-linux-x64-musl@npm:1.9.0": 72 | version: 1.9.0 73 | resolution: "@biomejs/cli-linux-x64-musl@npm:1.9.0" 74 | conditions: os=linux & cpu=x64 & libc=musl 75 | languageName: node 76 | linkType: hard 77 | 78 | "@biomejs/cli-linux-x64@npm:1.9.0": 79 | version: 1.9.0 80 | resolution: "@biomejs/cli-linux-x64@npm:1.9.0" 81 | conditions: os=linux & cpu=x64 & libc=glibc 82 | languageName: node 83 | linkType: hard 84 | 85 | "@biomejs/cli-win32-arm64@npm:1.9.0": 86 | version: 1.9.0 87 | resolution: "@biomejs/cli-win32-arm64@npm:1.9.0" 88 | conditions: os=win32 & cpu=arm64 89 | languageName: node 90 | linkType: hard 91 | 92 | "@biomejs/cli-win32-x64@npm:1.9.0": 93 | version: 1.9.0 94 | resolution: "@biomejs/cli-win32-x64@npm:1.9.0" 95 | conditions: os=win32 & cpu=x64 96 | languageName: node 97 | linkType: hard 98 | 99 | "@esbuild/aix-ppc64@npm:0.25.0": 100 | version: 0.25.0 101 | resolution: "@esbuild/aix-ppc64@npm:0.25.0" 102 | conditions: os=aix & cpu=ppc64 103 | languageName: node 104 | linkType: hard 105 | 106 | "@esbuild/android-arm64@npm:0.25.0": 107 | version: 0.25.0 108 | resolution: "@esbuild/android-arm64@npm:0.25.0" 109 | conditions: os=android & cpu=arm64 110 | languageName: node 111 | linkType: hard 112 | 113 | "@esbuild/android-arm@npm:0.25.0": 114 | version: 0.25.0 115 | resolution: "@esbuild/android-arm@npm:0.25.0" 116 | conditions: os=android & cpu=arm 117 | languageName: node 118 | linkType: hard 119 | 120 | "@esbuild/android-x64@npm:0.25.0": 121 | version: 0.25.0 122 | resolution: "@esbuild/android-x64@npm:0.25.0" 123 | conditions: os=android & cpu=x64 124 | languageName: node 125 | linkType: hard 126 | 127 | "@esbuild/darwin-arm64@npm:0.25.0": 128 | version: 0.25.0 129 | resolution: "@esbuild/darwin-arm64@npm:0.25.0" 130 | conditions: os=darwin & cpu=arm64 131 | languageName: node 132 | linkType: hard 133 | 134 | "@esbuild/darwin-x64@npm:0.25.0": 135 | version: 0.25.0 136 | resolution: "@esbuild/darwin-x64@npm:0.25.0" 137 | conditions: os=darwin & cpu=x64 138 | languageName: node 139 | linkType: hard 140 | 141 | "@esbuild/freebsd-arm64@npm:0.25.0": 142 | version: 0.25.0 143 | resolution: "@esbuild/freebsd-arm64@npm:0.25.0" 144 | conditions: os=freebsd & cpu=arm64 145 | languageName: node 146 | linkType: hard 147 | 148 | "@esbuild/freebsd-x64@npm:0.25.0": 149 | version: 0.25.0 150 | resolution: "@esbuild/freebsd-x64@npm:0.25.0" 151 | conditions: os=freebsd & cpu=x64 152 | languageName: node 153 | linkType: hard 154 | 155 | "@esbuild/linux-arm64@npm:0.25.0": 156 | version: 0.25.0 157 | resolution: "@esbuild/linux-arm64@npm:0.25.0" 158 | conditions: os=linux & cpu=arm64 159 | languageName: node 160 | linkType: hard 161 | 162 | "@esbuild/linux-arm@npm:0.25.0": 163 | version: 0.25.0 164 | resolution: "@esbuild/linux-arm@npm:0.25.0" 165 | conditions: os=linux & cpu=arm 166 | languageName: node 167 | linkType: hard 168 | 169 | "@esbuild/linux-ia32@npm:0.25.0": 170 | version: 0.25.0 171 | resolution: "@esbuild/linux-ia32@npm:0.25.0" 172 | conditions: os=linux & cpu=ia32 173 | languageName: node 174 | linkType: hard 175 | 176 | "@esbuild/linux-loong64@npm:0.25.0": 177 | version: 0.25.0 178 | resolution: "@esbuild/linux-loong64@npm:0.25.0" 179 | conditions: os=linux & cpu=loong64 180 | languageName: node 181 | linkType: hard 182 | 183 | "@esbuild/linux-mips64el@npm:0.25.0": 184 | version: 0.25.0 185 | resolution: "@esbuild/linux-mips64el@npm:0.25.0" 186 | conditions: os=linux & cpu=mips64el 187 | languageName: node 188 | linkType: hard 189 | 190 | "@esbuild/linux-ppc64@npm:0.25.0": 191 | version: 0.25.0 192 | resolution: "@esbuild/linux-ppc64@npm:0.25.0" 193 | conditions: os=linux & cpu=ppc64 194 | languageName: node 195 | linkType: hard 196 | 197 | "@esbuild/linux-riscv64@npm:0.25.0": 198 | version: 0.25.0 199 | resolution: "@esbuild/linux-riscv64@npm:0.25.0" 200 | conditions: os=linux & cpu=riscv64 201 | languageName: node 202 | linkType: hard 203 | 204 | "@esbuild/linux-s390x@npm:0.25.0": 205 | version: 0.25.0 206 | resolution: "@esbuild/linux-s390x@npm:0.25.0" 207 | conditions: os=linux & cpu=s390x 208 | languageName: node 209 | linkType: hard 210 | 211 | "@esbuild/linux-x64@npm:0.25.0": 212 | version: 0.25.0 213 | resolution: "@esbuild/linux-x64@npm:0.25.0" 214 | conditions: os=linux & cpu=x64 215 | languageName: node 216 | linkType: hard 217 | 218 | "@esbuild/netbsd-arm64@npm:0.25.0": 219 | version: 0.25.0 220 | resolution: "@esbuild/netbsd-arm64@npm:0.25.0" 221 | conditions: os=netbsd & cpu=arm64 222 | languageName: node 223 | linkType: hard 224 | 225 | "@esbuild/netbsd-x64@npm:0.25.0": 226 | version: 0.25.0 227 | resolution: "@esbuild/netbsd-x64@npm:0.25.0" 228 | conditions: os=netbsd & cpu=x64 229 | languageName: node 230 | linkType: hard 231 | 232 | "@esbuild/openbsd-arm64@npm:0.25.0": 233 | version: 0.25.0 234 | resolution: "@esbuild/openbsd-arm64@npm:0.25.0" 235 | conditions: os=openbsd & cpu=arm64 236 | languageName: node 237 | linkType: hard 238 | 239 | "@esbuild/openbsd-x64@npm:0.25.0": 240 | version: 0.25.0 241 | resolution: "@esbuild/openbsd-x64@npm:0.25.0" 242 | conditions: os=openbsd & cpu=x64 243 | languageName: node 244 | linkType: hard 245 | 246 | "@esbuild/sunos-x64@npm:0.25.0": 247 | version: 0.25.0 248 | resolution: "@esbuild/sunos-x64@npm:0.25.0" 249 | conditions: os=sunos & cpu=x64 250 | languageName: node 251 | linkType: hard 252 | 253 | "@esbuild/win32-arm64@npm:0.25.0": 254 | version: 0.25.0 255 | resolution: "@esbuild/win32-arm64@npm:0.25.0" 256 | conditions: os=win32 & cpu=arm64 257 | languageName: node 258 | linkType: hard 259 | 260 | "@esbuild/win32-ia32@npm:0.25.0": 261 | version: 0.25.0 262 | resolution: "@esbuild/win32-ia32@npm:0.25.0" 263 | conditions: os=win32 & cpu=ia32 264 | languageName: node 265 | linkType: hard 266 | 267 | "@esbuild/win32-x64@npm:0.25.0": 268 | version: 0.25.0 269 | resolution: "@esbuild/win32-x64@npm:0.25.0" 270 | conditions: os=win32 & cpu=x64 271 | languageName: node 272 | linkType: hard 273 | 274 | "@isaacs/cliui@npm:^8.0.2": 275 | version: 8.0.2 276 | resolution: "@isaacs/cliui@npm:8.0.2" 277 | dependencies: 278 | string-width: "npm:^5.1.2" 279 | string-width-cjs: "npm:string-width@^4.2.0" 280 | strip-ansi: "npm:^7.0.1" 281 | strip-ansi-cjs: "npm:strip-ansi@^6.0.1" 282 | wrap-ansi: "npm:^8.1.0" 283 | wrap-ansi-cjs: "npm:wrap-ansi@^7.0.0" 284 | checksum: 10c0/b1bf42535d49f11dc137f18d5e4e63a28c5569de438a221c369483731e9dac9fb797af554e8bf02b6192d1e5eba6e6402cf93900c3d0ac86391d00d04876789e 285 | languageName: node 286 | linkType: hard 287 | 288 | "@isaacs/fs-minipass@npm:^4.0.0": 289 | version: 4.0.1 290 | resolution: "@isaacs/fs-minipass@npm:4.0.1" 291 | dependencies: 292 | minipass: "npm:^7.0.4" 293 | checksum: 10c0/c25b6dc1598790d5b55c0947a9b7d111cfa92594db5296c3b907e2f533c033666f692a3939eadac17b1c7c40d362d0b0635dc874cbfe3e70db7c2b07cc97a5d2 294 | languageName: node 295 | linkType: hard 296 | 297 | "@jridgewell/sourcemap-codec@npm:^1.5.0": 298 | version: 1.5.0 299 | resolution: "@jridgewell/sourcemap-codec@npm:1.5.0" 300 | checksum: 10c0/2eb864f276eb1096c3c11da3e9bb518f6d9fc0023c78344cdc037abadc725172c70314bdb360f2d4b7bffec7f5d657ce006816bc5d4ecb35e61b66132db00c18 301 | languageName: node 302 | linkType: hard 303 | 304 | "@npmcli/agent@npm:^3.0.0": 305 | version: 3.0.0 306 | resolution: "@npmcli/agent@npm:3.0.0" 307 | dependencies: 308 | agent-base: "npm:^7.1.0" 309 | http-proxy-agent: "npm:^7.0.0" 310 | https-proxy-agent: "npm:^7.0.1" 311 | lru-cache: "npm:^10.0.1" 312 | socks-proxy-agent: "npm:^8.0.3" 313 | checksum: 10c0/efe37b982f30740ee77696a80c196912c274ecd2cb243bc6ae7053a50c733ce0f6c09fda085145f33ecf453be19654acca74b69e81eaad4c90f00ccffe2f9271 314 | languageName: node 315 | linkType: hard 316 | 317 | "@npmcli/fs@npm:^4.0.0": 318 | version: 4.0.0 319 | resolution: "@npmcli/fs@npm:4.0.0" 320 | dependencies: 321 | semver: "npm:^7.3.5" 322 | checksum: 10c0/c90935d5ce670c87b6b14fab04a965a3b8137e585f8b2a6257263bd7f97756dd736cb165bb470e5156a9e718ecd99413dccc54b1138c1a46d6ec7cf325982fe5 323 | languageName: node 324 | linkType: hard 325 | 326 | "@pkgjs/parseargs@npm:^0.11.0": 327 | version: 0.11.0 328 | resolution: "@pkgjs/parseargs@npm:0.11.0" 329 | checksum: 10c0/5bd7576bb1b38a47a7fc7b51ac9f38748e772beebc56200450c4a817d712232b8f1d3ef70532c80840243c657d491cf6a6be1e3a214cff907645819fdc34aadd 330 | languageName: node 331 | linkType: hard 332 | 333 | "@rollup/rollup-android-arm-eabi@npm:4.34.9": 334 | version: 4.34.9 335 | resolution: "@rollup/rollup-android-arm-eabi@npm:4.34.9" 336 | conditions: os=android & cpu=arm 337 | languageName: node 338 | linkType: hard 339 | 340 | "@rollup/rollup-android-arm64@npm:4.34.9": 341 | version: 4.34.9 342 | resolution: "@rollup/rollup-android-arm64@npm:4.34.9" 343 | conditions: os=android & cpu=arm64 344 | languageName: node 345 | linkType: hard 346 | 347 | "@rollup/rollup-darwin-arm64@npm:4.34.9": 348 | version: 4.34.9 349 | resolution: "@rollup/rollup-darwin-arm64@npm:4.34.9" 350 | conditions: os=darwin & cpu=arm64 351 | languageName: node 352 | linkType: hard 353 | 354 | "@rollup/rollup-darwin-x64@npm:4.34.9": 355 | version: 4.34.9 356 | resolution: "@rollup/rollup-darwin-x64@npm:4.34.9" 357 | conditions: os=darwin & cpu=x64 358 | languageName: node 359 | linkType: hard 360 | 361 | "@rollup/rollup-freebsd-arm64@npm:4.34.9": 362 | version: 4.34.9 363 | resolution: "@rollup/rollup-freebsd-arm64@npm:4.34.9" 364 | conditions: os=freebsd & cpu=arm64 365 | languageName: node 366 | linkType: hard 367 | 368 | "@rollup/rollup-freebsd-x64@npm:4.34.9": 369 | version: 4.34.9 370 | resolution: "@rollup/rollup-freebsd-x64@npm:4.34.9" 371 | conditions: os=freebsd & cpu=x64 372 | languageName: node 373 | linkType: hard 374 | 375 | "@rollup/rollup-linux-arm-gnueabihf@npm:4.34.9": 376 | version: 4.34.9 377 | resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.34.9" 378 | conditions: os=linux & cpu=arm & libc=glibc 379 | languageName: node 380 | linkType: hard 381 | 382 | "@rollup/rollup-linux-arm-musleabihf@npm:4.34.9": 383 | version: 4.34.9 384 | resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.34.9" 385 | conditions: os=linux & cpu=arm & libc=musl 386 | languageName: node 387 | linkType: hard 388 | 389 | "@rollup/rollup-linux-arm64-gnu@npm:4.34.9": 390 | version: 4.34.9 391 | resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.34.9" 392 | conditions: os=linux & cpu=arm64 & libc=glibc 393 | languageName: node 394 | linkType: hard 395 | 396 | "@rollup/rollup-linux-arm64-musl@npm:4.34.9": 397 | version: 4.34.9 398 | resolution: "@rollup/rollup-linux-arm64-musl@npm:4.34.9" 399 | conditions: os=linux & cpu=arm64 & libc=musl 400 | languageName: node 401 | linkType: hard 402 | 403 | "@rollup/rollup-linux-loongarch64-gnu@npm:4.34.9": 404 | version: 4.34.9 405 | resolution: "@rollup/rollup-linux-loongarch64-gnu@npm:4.34.9" 406 | conditions: os=linux & cpu=loong64 & libc=glibc 407 | languageName: node 408 | linkType: hard 409 | 410 | "@rollup/rollup-linux-powerpc64le-gnu@npm:4.34.9": 411 | version: 4.34.9 412 | resolution: "@rollup/rollup-linux-powerpc64le-gnu@npm:4.34.9" 413 | conditions: os=linux & cpu=ppc64 & libc=glibc 414 | languageName: node 415 | linkType: hard 416 | 417 | "@rollup/rollup-linux-riscv64-gnu@npm:4.34.9": 418 | version: 4.34.9 419 | resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.34.9" 420 | conditions: os=linux & cpu=riscv64 & libc=glibc 421 | languageName: node 422 | linkType: hard 423 | 424 | "@rollup/rollup-linux-s390x-gnu@npm:4.34.9": 425 | version: 4.34.9 426 | resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.34.9" 427 | conditions: os=linux & cpu=s390x & libc=glibc 428 | languageName: node 429 | linkType: hard 430 | 431 | "@rollup/rollup-linux-x64-gnu@npm:4.34.9": 432 | version: 4.34.9 433 | resolution: "@rollup/rollup-linux-x64-gnu@npm:4.34.9" 434 | conditions: os=linux & cpu=x64 & libc=glibc 435 | languageName: node 436 | linkType: hard 437 | 438 | "@rollup/rollup-linux-x64-musl@npm:4.34.9": 439 | version: 4.34.9 440 | resolution: "@rollup/rollup-linux-x64-musl@npm:4.34.9" 441 | conditions: os=linux & cpu=x64 & libc=musl 442 | languageName: node 443 | linkType: hard 444 | 445 | "@rollup/rollup-win32-arm64-msvc@npm:4.34.9": 446 | version: 4.34.9 447 | resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.34.9" 448 | conditions: os=win32 & cpu=arm64 449 | languageName: node 450 | linkType: hard 451 | 452 | "@rollup/rollup-win32-ia32-msvc@npm:4.34.9": 453 | version: 4.34.9 454 | resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.34.9" 455 | conditions: os=win32 & cpu=ia32 456 | languageName: node 457 | linkType: hard 458 | 459 | "@rollup/rollup-win32-x64-msvc@npm:4.34.9": 460 | version: 4.34.9 461 | resolution: "@rollup/rollup-win32-x64-msvc@npm:4.34.9" 462 | conditions: os=win32 & cpu=x64 463 | languageName: node 464 | linkType: hard 465 | 466 | "@types/estree@npm:1.0.6, @types/estree@npm:^1.0.0": 467 | version: 1.0.6 468 | resolution: "@types/estree@npm:1.0.6" 469 | checksum: 10c0/cdfd751f6f9065442cd40957c07fd80361c962869aa853c1c2fd03e101af8b9389d8ff4955a43a6fcfa223dd387a089937f95be0f3eec21ca527039fd2d9859a 470 | languageName: node 471 | linkType: hard 472 | 473 | "@vitest/expect@npm:3.0.5": 474 | version: 3.0.5 475 | resolution: "@vitest/expect@npm:3.0.5" 476 | dependencies: 477 | "@vitest/spy": "npm:3.0.5" 478 | "@vitest/utils": "npm:3.0.5" 479 | chai: "npm:^5.1.2" 480 | tinyrainbow: "npm:^2.0.0" 481 | checksum: 10c0/d5af9c63d70ddfc72b63ce03ea82ed0086a307c50154f38b0ad1c6c23215705e5f7d6547edf027748b7b442274707ca4321bc0941effa0264b026a8d4f70ee0d 482 | languageName: node 483 | linkType: hard 484 | 485 | "@vitest/mocker@npm:3.0.5": 486 | version: 3.0.5 487 | resolution: "@vitest/mocker@npm:3.0.5" 488 | dependencies: 489 | "@vitest/spy": "npm:3.0.5" 490 | estree-walker: "npm:^3.0.3" 491 | magic-string: "npm:^0.30.17" 492 | peerDependencies: 493 | msw: ^2.4.9 494 | vite: ^5.0.0 || ^6.0.0 495 | peerDependenciesMeta: 496 | msw: 497 | optional: true 498 | vite: 499 | optional: true 500 | checksum: 10c0/64a27bfa959a33fd2a992837022026cf221f1a04812d4cd6f8abf3ff15781923ff1223f76a9a97dfffe157600813b16e90a6e1f1c60e45ba465e1f4e48603c47 501 | languageName: node 502 | linkType: hard 503 | 504 | "@vitest/pretty-format@npm:3.0.5, @vitest/pretty-format@npm:^3.0.5": 505 | version: 3.0.5 506 | resolution: "@vitest/pretty-format@npm:3.0.5" 507 | dependencies: 508 | tinyrainbow: "npm:^2.0.0" 509 | checksum: 10c0/94dbe3dfffd53f880e2c1fc35da3c998b768e88a37d4248a1e531ec465d4a19ec917dd56c5ccf4f24bb1984b1376ffc55fe710c2b07ef94f9ebf61ca028a2177 510 | languageName: node 511 | linkType: hard 512 | 513 | "@vitest/runner@npm:3.0.5": 514 | version: 3.0.5 515 | resolution: "@vitest/runner@npm:3.0.5" 516 | dependencies: 517 | "@vitest/utils": "npm:3.0.5" 518 | pathe: "npm:^2.0.2" 519 | checksum: 10c0/fa8705bc82e1b22ea55d505863f60eeefabf560c3aff4fb0180f1e3e34c4dc822fbe4e9eb1f18ef8409095950ea8fd46fa3fda4a43ec1d1a804457cc551a30fe 520 | languageName: node 521 | linkType: hard 522 | 523 | "@vitest/snapshot@npm:3.0.5": 524 | version: 3.0.5 525 | resolution: "@vitest/snapshot@npm:3.0.5" 526 | dependencies: 527 | "@vitest/pretty-format": "npm:3.0.5" 528 | magic-string: "npm:^0.30.17" 529 | pathe: "npm:^2.0.2" 530 | checksum: 10c0/8b517299107218619429ac7b3b13e223822f60cdf207eb5f5be4eabdd29934e25f4624f8376b50b3535281227761d68a5ae15d90ef24d9edc19eaf5b9d52c76c 531 | languageName: node 532 | linkType: hard 533 | 534 | "@vitest/spy@npm:3.0.5": 535 | version: 3.0.5 536 | resolution: "@vitest/spy@npm:3.0.5" 537 | dependencies: 538 | tinyspy: "npm:^3.0.2" 539 | checksum: 10c0/f85c628cbf0de66f87faa86a69c658b2b67dcc0cfb21989312f465f16e86dfa4f8f2166339bbcc82226e31dd35dc0a336f64e5b8170f8ff8a9127f9822c82247 540 | languageName: node 541 | linkType: hard 542 | 543 | "@vitest/utils@npm:3.0.5": 544 | version: 3.0.5 545 | resolution: "@vitest/utils@npm:3.0.5" 546 | dependencies: 547 | "@vitest/pretty-format": "npm:3.0.5" 548 | loupe: "npm:^3.1.2" 549 | tinyrainbow: "npm:^2.0.0" 550 | checksum: 10c0/3c18657e6f9c58b75139b19789d7e628688efa7422a16e52670ffd5cb84ce7ced856508ddc01d2e978c64f1ee316c09fbb8d12c29557d0db0f65b9888664918b 551 | languageName: node 552 | linkType: hard 553 | 554 | "abbrev@npm:^3.0.0": 555 | version: 3.0.0 556 | resolution: "abbrev@npm:3.0.0" 557 | checksum: 10c0/049704186396f571650eb7b22ed3627b77a5aedf98bb83caf2eac81ca2a3e25e795394b0464cfb2d6076df3db6a5312139eac5b6a126ca296ac53c5008069c28 558 | languageName: node 559 | linkType: hard 560 | 561 | "agent-base@npm:^7.0.2, agent-base@npm:^7.1.0, agent-base@npm:^7.1.2": 562 | version: 7.1.3 563 | resolution: "agent-base@npm:7.1.3" 564 | checksum: 10c0/6192b580c5b1d8fb399b9c62bf8343d76654c2dd62afcb9a52b2cf44a8b6ace1e3b704d3fe3547d91555c857d3df02603341ff2cb961b9cfe2b12f9f3c38ee11 565 | languageName: node 566 | linkType: hard 567 | 568 | "ansi-regex@npm:^5.0.1": 569 | version: 5.0.1 570 | resolution: "ansi-regex@npm:5.0.1" 571 | checksum: 10c0/9a64bb8627b434ba9327b60c027742e5d17ac69277960d041898596271d992d4d52ba7267a63ca10232e29f6107fc8a835f6ce8d719b88c5f8493f8254813737 572 | languageName: node 573 | linkType: hard 574 | 575 | "ansi-regex@npm:^6.0.1": 576 | version: 6.0.1 577 | resolution: "ansi-regex@npm:6.0.1" 578 | checksum: 10c0/cbe16dbd2c6b2735d1df7976a7070dd277326434f0212f43abf6d87674095d247968209babdaad31bb00882fa68807256ba9be340eec2f1004de14ca75f52a08 579 | languageName: node 580 | linkType: hard 581 | 582 | "ansi-styles@npm:^4.0.0": 583 | version: 4.3.0 584 | resolution: "ansi-styles@npm:4.3.0" 585 | dependencies: 586 | color-convert: "npm:^2.0.1" 587 | checksum: 10c0/895a23929da416f2bd3de7e9cb4eabd340949328ab85ddd6e484a637d8f6820d485f53933446f5291c3b760cbc488beb8e88573dd0f9c7daf83dccc8fe81b041 588 | languageName: node 589 | linkType: hard 590 | 591 | "ansi-styles@npm:^6.1.0": 592 | version: 6.2.1 593 | resolution: "ansi-styles@npm:6.2.1" 594 | checksum: 10c0/5d1ec38c123984bcedd996eac680d548f31828bd679a66db2bdf11844634dde55fec3efa9c6bb1d89056a5e79c1ac540c4c784d592ea1d25028a92227d2f2d5c 595 | languageName: node 596 | linkType: hard 597 | 598 | "assertion-error@npm:^2.0.1": 599 | version: 2.0.1 600 | resolution: "assertion-error@npm:2.0.1" 601 | checksum: 10c0/bbbcb117ac6480138f8c93cf7f535614282dea9dc828f540cdece85e3c665e8f78958b96afac52f29ff883c72638e6a87d469ecc9fe5bc902df03ed24a55dba8 602 | languageName: node 603 | linkType: hard 604 | 605 | "balanced-match@npm:^1.0.0": 606 | version: 1.0.2 607 | resolution: "balanced-match@npm:1.0.2" 608 | checksum: 10c0/9308baf0a7e4838a82bbfd11e01b1cb0f0cf2893bc1676c27c2a8c0e70cbae1c59120c3268517a8ae7fb6376b4639ef81ca22582611dbee4ed28df945134aaee 609 | languageName: node 610 | linkType: hard 611 | 612 | "brace-expansion@npm:^2.0.1": 613 | version: 2.0.1 614 | resolution: "brace-expansion@npm:2.0.1" 615 | dependencies: 616 | balanced-match: "npm:^1.0.0" 617 | checksum: 10c0/b358f2fe060e2d7a87aa015979ecea07f3c37d4018f8d6deb5bd4c229ad3a0384fe6029bb76cd8be63c81e516ee52d1a0673edbe2023d53a5191732ae3c3e49f 618 | languageName: node 619 | linkType: hard 620 | 621 | "cac@npm:^6.7.14": 622 | version: 6.7.14 623 | resolution: "cac@npm:6.7.14" 624 | checksum: 10c0/4ee06aaa7bab8981f0d54e5f5f9d4adcd64058e9697563ce336d8a3878ed018ee18ebe5359b2430eceae87e0758e62ea2019c3f52ae6e211b1bd2e133856cd10 625 | languageName: node 626 | linkType: hard 627 | 628 | "cacache@npm:^19.0.1": 629 | version: 19.0.1 630 | resolution: "cacache@npm:19.0.1" 631 | dependencies: 632 | "@npmcli/fs": "npm:^4.0.0" 633 | fs-minipass: "npm:^3.0.0" 634 | glob: "npm:^10.2.2" 635 | lru-cache: "npm:^10.0.1" 636 | minipass: "npm:^7.0.3" 637 | minipass-collect: "npm:^2.0.1" 638 | minipass-flush: "npm:^1.0.5" 639 | minipass-pipeline: "npm:^1.2.4" 640 | p-map: "npm:^7.0.2" 641 | ssri: "npm:^12.0.0" 642 | tar: "npm:^7.4.3" 643 | unique-filename: "npm:^4.0.0" 644 | checksum: 10c0/01f2134e1bd7d3ab68be851df96c8d63b492b1853b67f2eecb2c37bb682d37cb70bb858a16f2f0554d3c0071be6dfe21456a1ff6fa4b7eed996570d6a25ffe9c 645 | languageName: node 646 | linkType: hard 647 | 648 | "chai@npm:^5.1.2": 649 | version: 5.1.2 650 | resolution: "chai@npm:5.1.2" 651 | dependencies: 652 | assertion-error: "npm:^2.0.1" 653 | check-error: "npm:^2.1.1" 654 | deep-eql: "npm:^5.0.1" 655 | loupe: "npm:^3.1.0" 656 | pathval: "npm:^2.0.0" 657 | checksum: 10c0/6c04ff8495b6e535df9c1b062b6b094828454e9a3c9493393e55b2f4dbff7aa2a29a4645133cad160fb00a16196c4dc03dc9bb37e1f4ba9df3b5f50d7533a736 658 | languageName: node 659 | linkType: hard 660 | 661 | "check-error@npm:^2.1.1": 662 | version: 2.1.1 663 | resolution: "check-error@npm:2.1.1" 664 | checksum: 10c0/979f13eccab306cf1785fa10941a590b4e7ea9916ea2a4f8c87f0316fc3eab07eabefb6e587424ef0f88cbcd3805791f172ea739863ca3d7ce2afc54641c7f0e 665 | languageName: node 666 | linkType: hard 667 | 668 | "chownr@npm:^3.0.0": 669 | version: 3.0.0 670 | resolution: "chownr@npm:3.0.0" 671 | checksum: 10c0/43925b87700f7e3893296c8e9c56cc58f926411cce3a6e5898136daaf08f08b9a8eb76d37d3267e707d0dcc17aed2e2ebdf5848c0c3ce95cf910a919935c1b10 672 | languageName: node 673 | linkType: hard 674 | 675 | "color-convert@npm:^2.0.1": 676 | version: 2.0.1 677 | resolution: "color-convert@npm:2.0.1" 678 | dependencies: 679 | color-name: "npm:~1.1.4" 680 | checksum: 10c0/37e1150172f2e311fe1b2df62c6293a342ee7380da7b9cfdba67ea539909afbd74da27033208d01d6d5cfc65ee7868a22e18d7e7648e004425441c0f8a15a7d7 681 | languageName: node 682 | linkType: hard 683 | 684 | "color-name@npm:~1.1.4": 685 | version: 1.1.4 686 | resolution: "color-name@npm:1.1.4" 687 | checksum: 10c0/a1a3f914156960902f46f7f56bc62effc6c94e84b2cae157a526b1c1f74b677a47ec602bf68a61abfa2b42d15b7c5651c6dbe72a43af720bc588dff885b10f95 688 | languageName: node 689 | linkType: hard 690 | 691 | "cross-spawn@npm:^7.0.0": 692 | version: 7.0.6 693 | resolution: "cross-spawn@npm:7.0.6" 694 | dependencies: 695 | path-key: "npm:^3.1.0" 696 | shebang-command: "npm:^2.0.0" 697 | which: "npm:^2.0.1" 698 | checksum: 10c0/053ea8b2135caff68a9e81470e845613e374e7309a47731e81639de3eaeb90c3d01af0e0b44d2ab9d50b43467223b88567dfeb3262db942dc063b9976718ffc1 699 | languageName: node 700 | linkType: hard 701 | 702 | "debug@npm:4, debug@npm:^4.3.4, debug@npm:^4.4.0": 703 | version: 4.4.0 704 | resolution: "debug@npm:4.4.0" 705 | dependencies: 706 | ms: "npm:^2.1.3" 707 | peerDependenciesMeta: 708 | supports-color: 709 | optional: true 710 | checksum: 10c0/db94f1a182bf886f57b4755f85b3a74c39b5114b9377b7ab375dc2cfa3454f09490cc6c30f829df3fc8042bc8b8995f6567ce5cd96f3bc3688bd24027197d9de 711 | languageName: node 712 | linkType: hard 713 | 714 | "deep-eql@npm:^5.0.1": 715 | version: 5.0.2 716 | resolution: "deep-eql@npm:5.0.2" 717 | checksum: 10c0/7102cf3b7bb719c6b9c0db2e19bf0aa9318d141581befe8c7ce8ccd39af9eaa4346e5e05adef7f9bd7015da0f13a3a25dcfe306ef79dc8668aedbecb658dd247 718 | languageName: node 719 | linkType: hard 720 | 721 | "eastasianwidth@npm:^0.2.0": 722 | version: 0.2.0 723 | resolution: "eastasianwidth@npm:0.2.0" 724 | checksum: 10c0/26f364ebcdb6395f95124fda411f63137a4bfb5d3a06453f7f23dfe52502905bd84e0488172e0f9ec295fdc45f05c23d5d91baf16bd26f0fe9acd777a188dc39 725 | languageName: node 726 | linkType: hard 727 | 728 | "emoji-regex@npm:^8.0.0": 729 | version: 8.0.0 730 | resolution: "emoji-regex@npm:8.0.0" 731 | checksum: 10c0/b6053ad39951c4cf338f9092d7bfba448cdfd46fe6a2a034700b149ac9ffbc137e361cbd3c442297f86bed2e5f7576c1b54cc0a6bf8ef5106cc62f496af35010 732 | languageName: node 733 | linkType: hard 734 | 735 | "emoji-regex@npm:^9.2.2": 736 | version: 9.2.2 737 | resolution: "emoji-regex@npm:9.2.2" 738 | checksum: 10c0/af014e759a72064cf66e6e694a7fc6b0ed3d8db680427b021a89727689671cefe9d04151b2cad51dbaf85d5ba790d061cd167f1cf32eb7b281f6368b3c181639 739 | languageName: node 740 | linkType: hard 741 | 742 | "encoding@npm:^0.1.13": 743 | version: 0.1.13 744 | resolution: "encoding@npm:0.1.13" 745 | dependencies: 746 | iconv-lite: "npm:^0.6.2" 747 | checksum: 10c0/36d938712ff00fe1f4bac88b43bcffb5930c1efa57bbcdca9d67e1d9d6c57cfb1200fb01efe0f3109b2ce99b231f90779532814a81370a1bd3274a0f58585039 748 | languageName: node 749 | linkType: hard 750 | 751 | "env-paths@npm:^2.2.0": 752 | version: 2.2.1 753 | resolution: "env-paths@npm:2.2.1" 754 | checksum: 10c0/285325677bf00e30845e330eec32894f5105529db97496ee3f598478e50f008c5352a41a30e5e72ec9de8a542b5a570b85699cd63bd2bc646dbcb9f311d83bc4 755 | languageName: node 756 | linkType: hard 757 | 758 | "err-code@npm:^2.0.2": 759 | version: 2.0.3 760 | resolution: "err-code@npm:2.0.3" 761 | checksum: 10c0/b642f7b4dd4a376e954947550a3065a9ece6733ab8e51ad80db727aaae0817c2e99b02a97a3d6cecc648a97848305e728289cf312d09af395403a90c9d4d8a66 762 | languageName: node 763 | linkType: hard 764 | 765 | "es-module-lexer@npm:^1.6.0": 766 | version: 1.6.0 767 | resolution: "es-module-lexer@npm:1.6.0" 768 | checksum: 10c0/667309454411c0b95c476025929881e71400d74a746ffa1ff4cb450bd87f8e33e8eef7854d68e401895039ac0bac64e7809acbebb6253e055dd49ea9e3ea9212 769 | languageName: node 770 | linkType: hard 771 | 772 | "es-toolkit@npm:^1.20.0": 773 | version: 1.20.0 774 | resolution: "es-toolkit@npm:1.20.0" 775 | checksum: 10c0/566a517ec97d4b2431d220d4eb9a7cc37a1b397521b4e230c9e53d647c2b4e0b8c2e91030e1de6e8080c30f9f05ee5281d13d3c2dd37ec1193a13bc24e2fd70c 776 | languageName: node 777 | linkType: hard 778 | 779 | "esbuild@npm:^0.25.0": 780 | version: 0.25.0 781 | resolution: "esbuild@npm:0.25.0" 782 | dependencies: 783 | "@esbuild/aix-ppc64": "npm:0.25.0" 784 | "@esbuild/android-arm": "npm:0.25.0" 785 | "@esbuild/android-arm64": "npm:0.25.0" 786 | "@esbuild/android-x64": "npm:0.25.0" 787 | "@esbuild/darwin-arm64": "npm:0.25.0" 788 | "@esbuild/darwin-x64": "npm:0.25.0" 789 | "@esbuild/freebsd-arm64": "npm:0.25.0" 790 | "@esbuild/freebsd-x64": "npm:0.25.0" 791 | "@esbuild/linux-arm": "npm:0.25.0" 792 | "@esbuild/linux-arm64": "npm:0.25.0" 793 | "@esbuild/linux-ia32": "npm:0.25.0" 794 | "@esbuild/linux-loong64": "npm:0.25.0" 795 | "@esbuild/linux-mips64el": "npm:0.25.0" 796 | "@esbuild/linux-ppc64": "npm:0.25.0" 797 | "@esbuild/linux-riscv64": "npm:0.25.0" 798 | "@esbuild/linux-s390x": "npm:0.25.0" 799 | "@esbuild/linux-x64": "npm:0.25.0" 800 | "@esbuild/netbsd-arm64": "npm:0.25.0" 801 | "@esbuild/netbsd-x64": "npm:0.25.0" 802 | "@esbuild/openbsd-arm64": "npm:0.25.0" 803 | "@esbuild/openbsd-x64": "npm:0.25.0" 804 | "@esbuild/sunos-x64": "npm:0.25.0" 805 | "@esbuild/win32-arm64": "npm:0.25.0" 806 | "@esbuild/win32-ia32": "npm:0.25.0" 807 | "@esbuild/win32-x64": "npm:0.25.0" 808 | dependenciesMeta: 809 | "@esbuild/aix-ppc64": 810 | optional: true 811 | "@esbuild/android-arm": 812 | optional: true 813 | "@esbuild/android-arm64": 814 | optional: true 815 | "@esbuild/android-x64": 816 | optional: true 817 | "@esbuild/darwin-arm64": 818 | optional: true 819 | "@esbuild/darwin-x64": 820 | optional: true 821 | "@esbuild/freebsd-arm64": 822 | optional: true 823 | "@esbuild/freebsd-x64": 824 | optional: true 825 | "@esbuild/linux-arm": 826 | optional: true 827 | "@esbuild/linux-arm64": 828 | optional: true 829 | "@esbuild/linux-ia32": 830 | optional: true 831 | "@esbuild/linux-loong64": 832 | optional: true 833 | "@esbuild/linux-mips64el": 834 | optional: true 835 | "@esbuild/linux-ppc64": 836 | optional: true 837 | "@esbuild/linux-riscv64": 838 | optional: true 839 | "@esbuild/linux-s390x": 840 | optional: true 841 | "@esbuild/linux-x64": 842 | optional: true 843 | "@esbuild/netbsd-arm64": 844 | optional: true 845 | "@esbuild/netbsd-x64": 846 | optional: true 847 | "@esbuild/openbsd-arm64": 848 | optional: true 849 | "@esbuild/openbsd-x64": 850 | optional: true 851 | "@esbuild/sunos-x64": 852 | optional: true 853 | "@esbuild/win32-arm64": 854 | optional: true 855 | "@esbuild/win32-ia32": 856 | optional: true 857 | "@esbuild/win32-x64": 858 | optional: true 859 | bin: 860 | esbuild: bin/esbuild 861 | checksum: 10c0/5767b72da46da3cfec51661647ec850ddbf8a8d0662771139f10ef0692a8831396a0004b2be7966cecdb08264fb16bdc16290dcecd92396fac5f12d722fa013d 862 | languageName: node 863 | linkType: hard 864 | 865 | "estree-walker@npm:^3.0.3": 866 | version: 3.0.3 867 | resolution: "estree-walker@npm:3.0.3" 868 | dependencies: 869 | "@types/estree": "npm:^1.0.0" 870 | checksum: 10c0/c12e3c2b2642d2bcae7d5aa495c60fa2f299160946535763969a1c83fc74518ffa9c2cd3a8b69ac56aea547df6a8aac25f729a342992ef0bbac5f1c73e78995d 871 | languageName: node 872 | linkType: hard 873 | 874 | "expect-type@npm:^1.1.0": 875 | version: 1.1.0 876 | resolution: "expect-type@npm:1.1.0" 877 | checksum: 10c0/5af0febbe8fe18da05a6d51e3677adafd75213512285408156b368ca471252565d5ca6e59e4bddab25121f3cfcbbebc6a5489f8cc9db131cc29e69dcdcc7ae15 878 | languageName: node 879 | linkType: hard 880 | 881 | "exponential-backoff@npm:^3.1.1": 882 | version: 3.1.1 883 | resolution: "exponential-backoff@npm:3.1.1" 884 | checksum: 10c0/160456d2d647e6019640bd07111634d8c353038d9fa40176afb7cd49b0548bdae83b56d05e907c2cce2300b81cae35d800ef92fefb9d0208e190fa3b7d6bb579 885 | languageName: node 886 | linkType: hard 887 | 888 | "foreground-child@npm:^3.1.0": 889 | version: 3.1.1 890 | resolution: "foreground-child@npm:3.1.1" 891 | dependencies: 892 | cross-spawn: "npm:^7.0.0" 893 | signal-exit: "npm:^4.0.1" 894 | checksum: 10c0/9700a0285628abaeb37007c9a4d92bd49f67210f09067638774338e146c8e9c825c5c877f072b2f75f41dc6a2d0be8664f79ffc03f6576649f54a84fb9b47de0 895 | languageName: node 896 | linkType: hard 897 | 898 | "fs-minipass@npm:^3.0.0": 899 | version: 3.0.3 900 | resolution: "fs-minipass@npm:3.0.3" 901 | dependencies: 902 | minipass: "npm:^7.0.3" 903 | checksum: 10c0/63e80da2ff9b621e2cb1596abcb9207f1cf82b968b116ccd7b959e3323144cce7fb141462200971c38bbf2ecca51695069db45265705bed09a7cd93ae5b89f94 904 | languageName: node 905 | linkType: hard 906 | 907 | "fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": 908 | version: 2.3.3 909 | resolution: "fsevents@npm:2.3.3" 910 | dependencies: 911 | node-gyp: "npm:latest" 912 | checksum: 10c0/a1f0c44595123ed717febbc478aa952e47adfc28e2092be66b8ab1635147254ca6cfe1df792a8997f22716d4cbafc73309899ff7bfac2ac3ad8cf2e4ecc3ec60 913 | conditions: os=darwin 914 | languageName: node 915 | linkType: hard 916 | 917 | "fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": 918 | version: 2.3.3 919 | resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" 920 | dependencies: 921 | node-gyp: "npm:latest" 922 | conditions: os=darwin 923 | languageName: node 924 | linkType: hard 925 | 926 | "glob@npm:^10.2.2, glob@npm:^10.3.10": 927 | version: 10.3.10 928 | resolution: "glob@npm:10.3.10" 929 | dependencies: 930 | foreground-child: "npm:^3.1.0" 931 | jackspeak: "npm:^2.3.5" 932 | minimatch: "npm:^9.0.1" 933 | minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" 934 | path-scurry: "npm:^1.10.1" 935 | bin: 936 | glob: dist/esm/bin.mjs 937 | checksum: 10c0/13d8a1feb7eac7945f8c8480e11cd4a44b24d26503d99a8d8ac8d5aefbf3e9802a2b6087318a829fad04cb4e829f25c5f4f1110c68966c498720dd261c7e344d 938 | languageName: node 939 | linkType: hard 940 | 941 | "graceful-fs@npm:^4.2.6": 942 | version: 4.2.11 943 | resolution: "graceful-fs@npm:4.2.11" 944 | checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 945 | languageName: node 946 | linkType: hard 947 | 948 | "http-cache-semantics@npm:^4.1.1": 949 | version: 4.1.1 950 | resolution: "http-cache-semantics@npm:4.1.1" 951 | checksum: 10c0/ce1319b8a382eb3cbb4a37c19f6bfe14e5bb5be3d09079e885e8c513ab2d3cd9214902f8a31c9dc4e37022633ceabfc2d697405deeaf1b8f3552bb4ed996fdfc 952 | languageName: node 953 | linkType: hard 954 | 955 | "http-proxy-agent@npm:^7.0.0": 956 | version: 7.0.0 957 | resolution: "http-proxy-agent@npm:7.0.0" 958 | dependencies: 959 | agent-base: "npm:^7.1.0" 960 | debug: "npm:^4.3.4" 961 | checksum: 10c0/a11574ff39436cee3c7bc67f259444097b09474605846ddd8edf0bf4ad8644be8533db1aa463426e376865047d05dc22755e638632819317c0c2f1b2196657c8 962 | languageName: node 963 | linkType: hard 964 | 965 | "https-proxy-agent@npm:^7.0.1": 966 | version: 7.0.2 967 | resolution: "https-proxy-agent@npm:7.0.2" 968 | dependencies: 969 | agent-base: "npm:^7.0.2" 970 | debug: "npm:4" 971 | checksum: 10c0/7735eb90073db087e7e79312e3d97c8c04baf7ea7ca7b013382b6a45abbaa61b281041a98f4e13c8c80d88f843785bcc84ba189165b4b4087b1e3496ba656d77 972 | languageName: node 973 | linkType: hard 974 | 975 | "husky@npm:^9.0.0": 976 | version: 9.0.7 977 | resolution: "husky@npm:9.0.7" 978 | bin: 979 | husky: bin.js 980 | checksum: 10c0/ac36838bc230b42ca878eeb6993cba5499b858700581fa9e8b579227af9ad47bdbf4c050f4145f51f33f77c16d359f329622b7050150c78a7c52be26cc24174e 981 | languageName: node 982 | linkType: hard 983 | 984 | "iconv-lite@npm:^0.6.2": 985 | version: 0.6.3 986 | resolution: "iconv-lite@npm:0.6.3" 987 | dependencies: 988 | safer-buffer: "npm:>= 2.1.2 < 3.0.0" 989 | checksum: 10c0/98102bc66b33fcf5ac044099d1257ba0b7ad5e3ccd3221f34dd508ab4070edff183276221684e1e0555b145fce0850c9f7d2b60a9fcac50fbb4ea0d6e845a3b1 990 | languageName: node 991 | linkType: hard 992 | 993 | "imurmurhash@npm:^0.1.4": 994 | version: 0.1.4 995 | resolution: "imurmurhash@npm:0.1.4" 996 | checksum: 10c0/8b51313850dd33605c6c9d3fd9638b714f4c4c40250cff658209f30d40da60f78992fb2df5dabee4acf589a6a82bbc79ad5486550754bd9ec4e3fc0d4a57d6a6 997 | languageName: node 998 | linkType: hard 999 | 1000 | "ip-address@npm:^9.0.5": 1001 | version: 9.0.5 1002 | resolution: "ip-address@npm:9.0.5" 1003 | dependencies: 1004 | jsbn: "npm:1.1.0" 1005 | sprintf-js: "npm:^1.1.3" 1006 | checksum: 10c0/331cd07fafcb3b24100613e4b53e1a2b4feab11e671e655d46dc09ee233da5011284d09ca40c4ecbdfe1d0004f462958675c224a804259f2f78d2465a87824bc 1007 | languageName: node 1008 | linkType: hard 1009 | 1010 | "is-fullwidth-code-point@npm:^3.0.0": 1011 | version: 3.0.0 1012 | resolution: "is-fullwidth-code-point@npm:3.0.0" 1013 | checksum: 10c0/bb11d825e049f38e04c06373a8d72782eee0205bda9d908cc550ccb3c59b99d750ff9537982e01733c1c94a58e35400661f57042158ff5e8f3e90cf936daf0fc 1014 | languageName: node 1015 | linkType: hard 1016 | 1017 | "isexe@npm:^2.0.0": 1018 | version: 2.0.0 1019 | resolution: "isexe@npm:2.0.0" 1020 | checksum: 10c0/228cfa503fadc2c31596ab06ed6aa82c9976eec2bfd83397e7eaf06d0ccf42cd1dfd6743bf9aeb01aebd4156d009994c5f76ea898d2832c1fe342da923ca457d 1021 | languageName: node 1022 | linkType: hard 1023 | 1024 | "isexe@npm:^3.1.1": 1025 | version: 3.1.1 1026 | resolution: "isexe@npm:3.1.1" 1027 | checksum: 10c0/9ec257654093443eb0a528a9c8cbba9c0ca7616ccb40abd6dde7202734d96bb86e4ac0d764f0f8cd965856aacbff2f4ce23e730dc19dfb41e3b0d865ca6fdcc7 1028 | languageName: node 1029 | linkType: hard 1030 | 1031 | "jackspeak@npm:^2.3.5": 1032 | version: 2.3.6 1033 | resolution: "jackspeak@npm:2.3.6" 1034 | dependencies: 1035 | "@isaacs/cliui": "npm:^8.0.2" 1036 | "@pkgjs/parseargs": "npm:^0.11.0" 1037 | dependenciesMeta: 1038 | "@pkgjs/parseargs": 1039 | optional: true 1040 | checksum: 10c0/f01d8f972d894cd7638bc338e9ef5ddb86f7b208ce177a36d718eac96ec86638a6efa17d0221b10073e64b45edc2ce15340db9380b1f5d5c5d000cbc517dc111 1041 | languageName: node 1042 | linkType: hard 1043 | 1044 | "jsbn@npm:1.1.0": 1045 | version: 1.1.0 1046 | resolution: "jsbn@npm:1.1.0" 1047 | checksum: 10c0/4f907fb78d7b712e11dea8c165fe0921f81a657d3443dde75359ed52eb2b5d33ce6773d97985a089f09a65edd80b11cb75c767b57ba47391fee4c969f7215c96 1048 | languageName: node 1049 | linkType: hard 1050 | 1051 | "loupe@npm:^3.1.0, loupe@npm:^3.1.2": 1052 | version: 3.1.2 1053 | resolution: "loupe@npm:3.1.2" 1054 | checksum: 10c0/b13c02e3ddd6a9d5f8bf84133b3242de556512d824dddeea71cce2dbd6579c8f4d672381c4e742d45cf4423d0701765b4a6e5fbc24701def16bc2b40f8daa96a 1055 | languageName: node 1056 | linkType: hard 1057 | 1058 | "lru-cache@npm:^10.0.1, lru-cache@npm:^9.1.1 || ^10.0.0": 1059 | version: 10.2.0 1060 | resolution: "lru-cache@npm:10.2.0" 1061 | checksum: 10c0/c9847612aa2daaef102d30542a8d6d9b2c2bb36581c1bf0dc3ebf5e5f3352c772a749e604afae2e46873b930a9e9523743faac4e5b937c576ab29196774712ee 1062 | languageName: node 1063 | linkType: hard 1064 | 1065 | "magic-string@npm:^0.30.17": 1066 | version: 0.30.17 1067 | resolution: "magic-string@npm:0.30.17" 1068 | dependencies: 1069 | "@jridgewell/sourcemap-codec": "npm:^1.5.0" 1070 | checksum: 10c0/16826e415d04b88378f200fe022b53e638e3838b9e496edda6c0e086d7753a44a6ed187adc72d19f3623810589bf139af1a315541cd6a26ae0771a0193eaf7b8 1071 | languageName: node 1072 | linkType: hard 1073 | 1074 | "make-fetch-happen@npm:^14.0.3": 1075 | version: 14.0.3 1076 | resolution: "make-fetch-happen@npm:14.0.3" 1077 | dependencies: 1078 | "@npmcli/agent": "npm:^3.0.0" 1079 | cacache: "npm:^19.0.1" 1080 | http-cache-semantics: "npm:^4.1.1" 1081 | minipass: "npm:^7.0.2" 1082 | minipass-fetch: "npm:^4.0.0" 1083 | minipass-flush: "npm:^1.0.5" 1084 | minipass-pipeline: "npm:^1.2.4" 1085 | negotiator: "npm:^1.0.0" 1086 | proc-log: "npm:^5.0.0" 1087 | promise-retry: "npm:^2.0.1" 1088 | ssri: "npm:^12.0.0" 1089 | checksum: 10c0/c40efb5e5296e7feb8e37155bde8eb70bc57d731b1f7d90e35a092fde403d7697c56fb49334d92d330d6f1ca29a98142036d6480a12681133a0a1453164cb2f0 1090 | languageName: node 1091 | linkType: hard 1092 | 1093 | "minimatch@npm:^9.0.1": 1094 | version: 9.0.3 1095 | resolution: "minimatch@npm:9.0.3" 1096 | dependencies: 1097 | brace-expansion: "npm:^2.0.1" 1098 | checksum: 10c0/85f407dcd38ac3e180f425e86553911d101455ca3ad5544d6a7cec16286657e4f8a9aa6695803025c55e31e35a91a2252b5dc8e7d527211278b8b65b4dbd5eac 1099 | languageName: node 1100 | linkType: hard 1101 | 1102 | "minipass-collect@npm:^2.0.1": 1103 | version: 2.0.1 1104 | resolution: "minipass-collect@npm:2.0.1" 1105 | dependencies: 1106 | minipass: "npm:^7.0.3" 1107 | checksum: 10c0/5167e73f62bb74cc5019594709c77e6a742051a647fe9499abf03c71dca75515b7959d67a764bdc4f8b361cf897fbf25e2d9869ee039203ed45240f48b9aa06e 1108 | languageName: node 1109 | linkType: hard 1110 | 1111 | "minipass-fetch@npm:^4.0.0": 1112 | version: 4.0.0 1113 | resolution: "minipass-fetch@npm:4.0.0" 1114 | dependencies: 1115 | encoding: "npm:^0.1.13" 1116 | minipass: "npm:^7.0.3" 1117 | minipass-sized: "npm:^1.0.3" 1118 | minizlib: "npm:^3.0.1" 1119 | dependenciesMeta: 1120 | encoding: 1121 | optional: true 1122 | checksum: 10c0/7fa30ce7c373fb6f94c086b374fff1589fd7e78451855d2d06c2e2d9df936d131e73e952163063016592ed3081444bd8d1ea608533313b0149156ce23311da4b 1123 | languageName: node 1124 | linkType: hard 1125 | 1126 | "minipass-flush@npm:^1.0.5": 1127 | version: 1.0.5 1128 | resolution: "minipass-flush@npm:1.0.5" 1129 | dependencies: 1130 | minipass: "npm:^3.0.0" 1131 | checksum: 10c0/2a51b63feb799d2bb34669205eee7c0eaf9dce01883261a5b77410c9408aa447e478efd191b4de6fc1101e796ff5892f8443ef20d9544385819093dbb32d36bd 1132 | languageName: node 1133 | linkType: hard 1134 | 1135 | "minipass-pipeline@npm:^1.2.4": 1136 | version: 1.2.4 1137 | resolution: "minipass-pipeline@npm:1.2.4" 1138 | dependencies: 1139 | minipass: "npm:^3.0.0" 1140 | checksum: 10c0/cbda57cea20b140b797505dc2cac71581a70b3247b84480c1fed5ca5ba46c25ecc25f68bfc9e6dcb1a6e9017dab5c7ada5eab73ad4f0a49d84e35093e0c643f2 1141 | languageName: node 1142 | linkType: hard 1143 | 1144 | "minipass-sized@npm:^1.0.3": 1145 | version: 1.0.3 1146 | resolution: "minipass-sized@npm:1.0.3" 1147 | dependencies: 1148 | minipass: "npm:^3.0.0" 1149 | checksum: 10c0/298f124753efdc745cfe0f2bdfdd81ba25b9f4e753ca4a2066eb17c821f25d48acea607dfc997633ee5bf7b6dfffb4eee4f2051eb168663f0b99fad2fa4829cb 1150 | languageName: node 1151 | linkType: hard 1152 | 1153 | "minipass@npm:^3.0.0": 1154 | version: 3.3.6 1155 | resolution: "minipass@npm:3.3.6" 1156 | dependencies: 1157 | yallist: "npm:^4.0.0" 1158 | checksum: 10c0/a114746943afa1dbbca8249e706d1d38b85ed1298b530f5808ce51f8e9e941962e2a5ad2e00eae7dd21d8a4aae6586a66d4216d1a259385e9d0358f0c1eba16c 1159 | languageName: node 1160 | linkType: hard 1161 | 1162 | "minipass@npm:^5.0.0 || ^6.0.2 || ^7.0.0, minipass@npm:^7.0.2, minipass@npm:^7.0.3, minipass@npm:^7.0.4, minipass@npm:^7.1.2": 1163 | version: 7.1.2 1164 | resolution: "minipass@npm:7.1.2" 1165 | checksum: 10c0/b0fd20bb9fb56e5fa9a8bfac539e8915ae07430a619e4b86ff71f5fc757ef3924b23b2c4230393af1eda647ed3d75739e4e0acb250a6b1eb277cf7f8fe449557 1166 | languageName: node 1167 | linkType: hard 1168 | 1169 | "minizlib@npm:^3.0.1": 1170 | version: 3.0.2 1171 | resolution: "minizlib@npm:3.0.2" 1172 | dependencies: 1173 | minipass: "npm:^7.1.2" 1174 | checksum: 10c0/9f3bd35e41d40d02469cb30470c55ccc21cae0db40e08d1d0b1dff01cc8cc89a6f78e9c5d2b7c844e485ec0a8abc2238111213fdc5b2038e6d1012eacf316f78 1175 | languageName: node 1176 | linkType: hard 1177 | 1178 | "mkdirp@npm:^3.0.1": 1179 | version: 3.0.1 1180 | resolution: "mkdirp@npm:3.0.1" 1181 | bin: 1182 | mkdirp: dist/cjs/src/bin.js 1183 | checksum: 10c0/9f2b975e9246351f5e3a40dcfac99fcd0baa31fbfab615fe059fb11e51f10e4803c63de1f384c54d656e4db31d000e4767e9ef076a22e12a641357602e31d57d 1184 | languageName: node 1185 | linkType: hard 1186 | 1187 | "ms@npm:^2.1.3": 1188 | version: 2.1.3 1189 | resolution: "ms@npm:2.1.3" 1190 | checksum: 10c0/d924b57e7312b3b63ad21fc5b3dc0af5e78d61a1fc7cfb5457edaf26326bf62be5307cc87ffb6862ef1c2b33b0233cdb5d4f01c4c958cc0d660948b65a287a48 1191 | languageName: node 1192 | linkType: hard 1193 | 1194 | "nanoid@npm:^3.3.8": 1195 | version: 3.3.8 1196 | resolution: "nanoid@npm:3.3.8" 1197 | bin: 1198 | nanoid: bin/nanoid.cjs 1199 | checksum: 10c0/4b1bb29f6cfebf3be3bc4ad1f1296fb0a10a3043a79f34fbffe75d1621b4318319211cd420549459018ea3592f0d2f159247a6f874911d6d26eaaadda2478120 1200 | languageName: node 1201 | linkType: hard 1202 | 1203 | "negotiator@npm:^1.0.0": 1204 | version: 1.0.0 1205 | resolution: "negotiator@npm:1.0.0" 1206 | checksum: 10c0/4c559dd52669ea48e1914f9d634227c561221dd54734070791f999c52ed0ff36e437b2e07d5c1f6e32909fc625fe46491c16e4a8f0572567d4dd15c3a4fda04b 1207 | languageName: node 1208 | linkType: hard 1209 | 1210 | "node-gyp@npm:latest": 1211 | version: 11.0.0 1212 | resolution: "node-gyp@npm:11.0.0" 1213 | dependencies: 1214 | env-paths: "npm:^2.2.0" 1215 | exponential-backoff: "npm:^3.1.1" 1216 | glob: "npm:^10.3.10" 1217 | graceful-fs: "npm:^4.2.6" 1218 | make-fetch-happen: "npm:^14.0.3" 1219 | nopt: "npm:^8.0.0" 1220 | proc-log: "npm:^5.0.0" 1221 | semver: "npm:^7.3.5" 1222 | tar: "npm:^7.4.3" 1223 | which: "npm:^5.0.0" 1224 | bin: 1225 | node-gyp: bin/node-gyp.js 1226 | checksum: 10c0/a3b885bbee2d271f1def32ba2e30ffcf4562a3db33af06b8b365e053153e2dd2051b9945783c3c8e852d26a0f20f65b251c7e83361623383a99635c0280ee573 1227 | languageName: node 1228 | linkType: hard 1229 | 1230 | "nopt@npm:^8.0.0": 1231 | version: 8.1.0 1232 | resolution: "nopt@npm:8.1.0" 1233 | dependencies: 1234 | abbrev: "npm:^3.0.0" 1235 | bin: 1236 | nopt: bin/nopt.js 1237 | checksum: 10c0/62e9ea70c7a3eb91d162d2c706b6606c041e4e7b547cbbb48f8b3695af457dd6479904d7ace600856bf923dd8d1ed0696f06195c8c20f02ac87c1da0e1d315ef 1238 | languageName: node 1239 | linkType: hard 1240 | 1241 | "p-map@npm:^7.0.2": 1242 | version: 7.0.3 1243 | resolution: "p-map@npm:7.0.3" 1244 | checksum: 10c0/46091610da2b38ce47bcd1d8b4835a6fa4e832848a6682cf1652bc93915770f4617afc844c10a77d1b3e56d2472bb2d5622353fa3ead01a7f42b04fc8e744a5c 1245 | languageName: node 1246 | linkType: hard 1247 | 1248 | "path-key@npm:^3.1.0": 1249 | version: 3.1.1 1250 | resolution: "path-key@npm:3.1.1" 1251 | checksum: 10c0/748c43efd5a569c039d7a00a03b58eecd1d75f3999f5a28303d75f521288df4823bc057d8784eb72358b2895a05f29a070bc9f1f17d28226cc4e62494cc58c4c 1252 | languageName: node 1253 | linkType: hard 1254 | 1255 | "path-scurry@npm:^1.10.1": 1256 | version: 1.10.1 1257 | resolution: "path-scurry@npm:1.10.1" 1258 | dependencies: 1259 | lru-cache: "npm:^9.1.1 || ^10.0.0" 1260 | minipass: "npm:^5.0.0 || ^6.0.2 || ^7.0.0" 1261 | checksum: 10c0/e5dc78a7348d25eec61ab166317e9e9c7b46818aa2c2b9006c507a6ff48c672d011292d9662527213e558f5652ce0afcc788663a061d8b59ab495681840c0c1e 1262 | languageName: node 1263 | linkType: hard 1264 | 1265 | "pathe@npm:^2.0.2": 1266 | version: 2.0.2 1267 | resolution: "pathe@npm:2.0.2" 1268 | checksum: 10c0/21fce96ca9cebf037b075de8e5cc4ac6aa1009bce57946a72695f47ded84cf4b29f03bed721ea0f6e39b69eb1a0620bcee1f72eca46086765214a2965399b83a 1269 | languageName: node 1270 | linkType: hard 1271 | 1272 | "pathval@npm:^2.0.0": 1273 | version: 2.0.0 1274 | resolution: "pathval@npm:2.0.0" 1275 | checksum: 10c0/602e4ee347fba8a599115af2ccd8179836a63c925c23e04bd056d0674a64b39e3a081b643cc7bc0b84390517df2d800a46fcc5598d42c155fe4977095c2f77c5 1276 | languageName: node 1277 | linkType: hard 1278 | 1279 | "picocolors@npm:^1.1.1": 1280 | version: 1.1.1 1281 | resolution: "picocolors@npm:1.1.1" 1282 | checksum: 10c0/e2e3e8170ab9d7c7421969adaa7e1b31434f789afb9b3f115f6b96d91945041ac3ceb02e9ec6fe6510ff036bcc0bf91e69a1772edc0b707e12b19c0f2d6bcf58 1283 | languageName: node 1284 | linkType: hard 1285 | 1286 | "postcss@npm:^8.5.3": 1287 | version: 8.5.3 1288 | resolution: "postcss@npm:8.5.3" 1289 | dependencies: 1290 | nanoid: "npm:^3.3.8" 1291 | picocolors: "npm:^1.1.1" 1292 | source-map-js: "npm:^1.2.1" 1293 | checksum: 10c0/b75510d7b28c3ab728c8733dd01538314a18c52af426f199a3c9177e63eb08602a3938bfb66b62dc01350b9aed62087eabbf229af97a1659eb8d3513cec823b3 1294 | languageName: node 1295 | linkType: hard 1296 | 1297 | "proc-log@npm:^5.0.0": 1298 | version: 5.0.0 1299 | resolution: "proc-log@npm:5.0.0" 1300 | checksum: 10c0/bbe5edb944b0ad63387a1d5b1911ae93e05ce8d0f60de1035b218cdcceedfe39dbd2c697853355b70f1a090f8f58fe90da487c85216bf9671f9499d1a897e9e3 1301 | languageName: node 1302 | linkType: hard 1303 | 1304 | "promise-retry@npm:^2.0.1": 1305 | version: 2.0.1 1306 | resolution: "promise-retry@npm:2.0.1" 1307 | dependencies: 1308 | err-code: "npm:^2.0.2" 1309 | retry: "npm:^0.12.0" 1310 | checksum: 10c0/9c7045a1a2928094b5b9b15336dcd2a7b1c052f674550df63cc3f36cd44028e5080448175b6f6ca32b642de81150f5e7b1a98b728f15cb069f2dd60ac2616b96 1311 | languageName: node 1312 | linkType: hard 1313 | 1314 | "retry@npm:^0.12.0": 1315 | version: 0.12.0 1316 | resolution: "retry@npm:0.12.0" 1317 | checksum: 10c0/59933e8501727ba13ad73ef4a04d5280b3717fd650408460c987392efe9d7be2040778ed8ebe933c5cbd63da3dcc37919c141ef8af0a54a6e4fca5a2af177bfe 1318 | languageName: node 1319 | linkType: hard 1320 | 1321 | "rollup@npm:^4.30.1": 1322 | version: 4.34.9 1323 | resolution: "rollup@npm:4.34.9" 1324 | dependencies: 1325 | "@rollup/rollup-android-arm-eabi": "npm:4.34.9" 1326 | "@rollup/rollup-android-arm64": "npm:4.34.9" 1327 | "@rollup/rollup-darwin-arm64": "npm:4.34.9" 1328 | "@rollup/rollup-darwin-x64": "npm:4.34.9" 1329 | "@rollup/rollup-freebsd-arm64": "npm:4.34.9" 1330 | "@rollup/rollup-freebsd-x64": "npm:4.34.9" 1331 | "@rollup/rollup-linux-arm-gnueabihf": "npm:4.34.9" 1332 | "@rollup/rollup-linux-arm-musleabihf": "npm:4.34.9" 1333 | "@rollup/rollup-linux-arm64-gnu": "npm:4.34.9" 1334 | "@rollup/rollup-linux-arm64-musl": "npm:4.34.9" 1335 | "@rollup/rollup-linux-loongarch64-gnu": "npm:4.34.9" 1336 | "@rollup/rollup-linux-powerpc64le-gnu": "npm:4.34.9" 1337 | "@rollup/rollup-linux-riscv64-gnu": "npm:4.34.9" 1338 | "@rollup/rollup-linux-s390x-gnu": "npm:4.34.9" 1339 | "@rollup/rollup-linux-x64-gnu": "npm:4.34.9" 1340 | "@rollup/rollup-linux-x64-musl": "npm:4.34.9" 1341 | "@rollup/rollup-win32-arm64-msvc": "npm:4.34.9" 1342 | "@rollup/rollup-win32-ia32-msvc": "npm:4.34.9" 1343 | "@rollup/rollup-win32-x64-msvc": "npm:4.34.9" 1344 | "@types/estree": "npm:1.0.6" 1345 | fsevents: "npm:~2.3.2" 1346 | dependenciesMeta: 1347 | "@rollup/rollup-android-arm-eabi": 1348 | optional: true 1349 | "@rollup/rollup-android-arm64": 1350 | optional: true 1351 | "@rollup/rollup-darwin-arm64": 1352 | optional: true 1353 | "@rollup/rollup-darwin-x64": 1354 | optional: true 1355 | "@rollup/rollup-freebsd-arm64": 1356 | optional: true 1357 | "@rollup/rollup-freebsd-x64": 1358 | optional: true 1359 | "@rollup/rollup-linux-arm-gnueabihf": 1360 | optional: true 1361 | "@rollup/rollup-linux-arm-musleabihf": 1362 | optional: true 1363 | "@rollup/rollup-linux-arm64-gnu": 1364 | optional: true 1365 | "@rollup/rollup-linux-arm64-musl": 1366 | optional: true 1367 | "@rollup/rollup-linux-loongarch64-gnu": 1368 | optional: true 1369 | "@rollup/rollup-linux-powerpc64le-gnu": 1370 | optional: true 1371 | "@rollup/rollup-linux-riscv64-gnu": 1372 | optional: true 1373 | "@rollup/rollup-linux-s390x-gnu": 1374 | optional: true 1375 | "@rollup/rollup-linux-x64-gnu": 1376 | optional: true 1377 | "@rollup/rollup-linux-x64-musl": 1378 | optional: true 1379 | "@rollup/rollup-win32-arm64-msvc": 1380 | optional: true 1381 | "@rollup/rollup-win32-ia32-msvc": 1382 | optional: true 1383 | "@rollup/rollup-win32-x64-msvc": 1384 | optional: true 1385 | fsevents: 1386 | optional: true 1387 | bin: 1388 | rollup: dist/bin/rollup 1389 | checksum: 10c0/dd0be1f7c4f8a93040026be13ecc39259fb55313db0dac7eafd97a3ac01ab4584e6b1a8afd86b0259dcf391699d5560a678abe6c0729af0aa4f2d5df70f05c8c 1390 | languageName: node 1391 | linkType: hard 1392 | 1393 | "safer-buffer@npm:>= 2.1.2 < 3.0.0": 1394 | version: 2.1.2 1395 | resolution: "safer-buffer@npm:2.1.2" 1396 | checksum: 10c0/7e3c8b2e88a1841c9671094bbaeebd94448111dd90a81a1f606f3f67708a6ec57763b3b47f06da09fc6054193e0e6709e77325415dc8422b04497a8070fa02d4 1397 | languageName: node 1398 | linkType: hard 1399 | 1400 | "semver@npm:^7.3.5": 1401 | version: 7.6.3 1402 | resolution: "semver@npm:7.6.3" 1403 | bin: 1404 | semver: bin/semver.js 1405 | checksum: 10c0/88f33e148b210c153873cb08cfe1e281d518aaa9a666d4d148add6560db5cd3c582f3a08ccb91f38d5f379ead256da9931234ed122057f40bb5766e65e58adaf 1406 | languageName: node 1407 | linkType: hard 1408 | 1409 | "shebang-command@npm:^2.0.0": 1410 | version: 2.0.0 1411 | resolution: "shebang-command@npm:2.0.0" 1412 | dependencies: 1413 | shebang-regex: "npm:^3.0.0" 1414 | checksum: 10c0/a41692e7d89a553ef21d324a5cceb5f686d1f3c040759c50aab69688634688c5c327f26f3ecf7001ebfd78c01f3c7c0a11a7c8bfd0a8bc9f6240d4f40b224e4e 1415 | languageName: node 1416 | linkType: hard 1417 | 1418 | "shebang-regex@npm:^3.0.0": 1419 | version: 3.0.0 1420 | resolution: "shebang-regex@npm:3.0.0" 1421 | checksum: 10c0/1dbed0726dd0e1152a92696c76c7f06084eb32a90f0528d11acd764043aacf76994b2fb30aa1291a21bd019d6699164d048286309a278855ee7bec06cf6fb690 1422 | languageName: node 1423 | linkType: hard 1424 | 1425 | "siginfo@npm:^2.0.0": 1426 | version: 2.0.0 1427 | resolution: "siginfo@npm:2.0.0" 1428 | checksum: 10c0/3def8f8e516fbb34cb6ae415b07ccc5d9c018d85b4b8611e3dc6f8be6d1899f693a4382913c9ed51a06babb5201639d76453ab297d1c54a456544acf5c892e34 1429 | languageName: node 1430 | linkType: hard 1431 | 1432 | "signal-exit@npm:^4.0.1": 1433 | version: 4.1.0 1434 | resolution: "signal-exit@npm:4.1.0" 1435 | checksum: 10c0/41602dce540e46d599edba9d9860193398d135f7ff72cab629db5171516cfae628d21e7bfccde1bbfdf11c48726bc2a6d1a8fb8701125852fbfda7cf19c6aa83 1436 | languageName: node 1437 | linkType: hard 1438 | 1439 | "smart-buffer@npm:^4.2.0": 1440 | version: 4.2.0 1441 | resolution: "smart-buffer@npm:4.2.0" 1442 | checksum: 10c0/a16775323e1404dd43fabafe7460be13a471e021637bc7889468eb45ce6a6b207261f454e4e530a19500cc962c4cc5348583520843b363f4193cee5c00e1e539 1443 | languageName: node 1444 | linkType: hard 1445 | 1446 | "socks-proxy-agent@npm:^8.0.3": 1447 | version: 8.0.5 1448 | resolution: "socks-proxy-agent@npm:8.0.5" 1449 | dependencies: 1450 | agent-base: "npm:^7.1.2" 1451 | debug: "npm:^4.3.4" 1452 | socks: "npm:^2.8.3" 1453 | checksum: 10c0/5d2c6cecba6821389aabf18728325730504bf9bb1d9e342e7987a5d13badd7a98838cc9a55b8ed3cb866ad37cc23e1086f09c4d72d93105ce9dfe76330e9d2a6 1454 | languageName: node 1455 | linkType: hard 1456 | 1457 | "socks@npm:^2.8.3": 1458 | version: 2.8.3 1459 | resolution: "socks@npm:2.8.3" 1460 | dependencies: 1461 | ip-address: "npm:^9.0.5" 1462 | smart-buffer: "npm:^4.2.0" 1463 | checksum: 10c0/d54a52bf9325165770b674a67241143a3d8b4e4c8884560c4e0e078aace2a728dffc7f70150660f51b85797c4e1a3b82f9b7aa25e0a0ceae1a243365da5c51a7 1464 | languageName: node 1465 | linkType: hard 1466 | 1467 | "source-map-js@npm:^1.2.1": 1468 | version: 1.2.1 1469 | resolution: "source-map-js@npm:1.2.1" 1470 | checksum: 10c0/7bda1fc4c197e3c6ff17de1b8b2c20e60af81b63a52cb32ec5a5d67a20a7d42651e2cb34ebe93833c5a2a084377e17455854fee3e21e7925c64a51b6a52b0faf 1471 | languageName: node 1472 | linkType: hard 1473 | 1474 | "sprintf-js@npm:^1.1.3": 1475 | version: 1.1.3 1476 | resolution: "sprintf-js@npm:1.1.3" 1477 | checksum: 10c0/09270dc4f30d479e666aee820eacd9e464215cdff53848b443964202bf4051490538e5dd1b42e1a65cf7296916ca17640aebf63dae9812749c7542ee5f288dec 1478 | languageName: node 1479 | linkType: hard 1480 | 1481 | "ssri@npm:^12.0.0": 1482 | version: 12.0.0 1483 | resolution: "ssri@npm:12.0.0" 1484 | dependencies: 1485 | minipass: "npm:^7.0.3" 1486 | checksum: 10c0/caddd5f544b2006e88fa6b0124d8d7b28208b83c72d7672d5ade44d794525d23b540f3396108c4eb9280dcb7c01f0bef50682f5b4b2c34291f7c5e211fd1417d 1487 | languageName: node 1488 | linkType: hard 1489 | 1490 | "stackback@npm:0.0.2": 1491 | version: 0.0.2 1492 | resolution: "stackback@npm:0.0.2" 1493 | checksum: 10c0/89a1416668f950236dd5ac9f9a6b2588e1b9b62b1b6ad8dff1bfc5d1a15dbf0aafc9b52d2226d00c28dffff212da464eaeebfc6b7578b9d180cef3e3782c5983 1494 | languageName: node 1495 | linkType: hard 1496 | 1497 | "std-env@npm:^3.8.0": 1498 | version: 3.8.0 1499 | resolution: "std-env@npm:3.8.0" 1500 | checksum: 10c0/f560a2902fd0fa3d648d7d0acecbd19d664006f7372c1fba197ed4c216b4c9e48db6e2769b5fe1616d42a9333c9f066c5011935035e85c59f45dc4f796272040 1501 | languageName: node 1502 | linkType: hard 1503 | 1504 | "string-width-cjs@npm:string-width@^4.2.0, string-width@npm:^4.1.0": 1505 | version: 4.2.3 1506 | resolution: "string-width@npm:4.2.3" 1507 | dependencies: 1508 | emoji-regex: "npm:^8.0.0" 1509 | is-fullwidth-code-point: "npm:^3.0.0" 1510 | strip-ansi: "npm:^6.0.1" 1511 | checksum: 10c0/1e525e92e5eae0afd7454086eed9c818ee84374bb80328fc41217ae72ff5f065ef1c9d7f72da41de40c75fa8bb3dee63d92373fd492c84260a552c636392a47b 1512 | languageName: node 1513 | linkType: hard 1514 | 1515 | "string-width@npm:^5.0.1, string-width@npm:^5.1.2": 1516 | version: 5.1.2 1517 | resolution: "string-width@npm:5.1.2" 1518 | dependencies: 1519 | eastasianwidth: "npm:^0.2.0" 1520 | emoji-regex: "npm:^9.2.2" 1521 | strip-ansi: "npm:^7.0.1" 1522 | checksum: 10c0/ab9c4264443d35b8b923cbdd513a089a60de339216d3b0ed3be3ba57d6880e1a192b70ae17225f764d7adbf5994e9bb8df253a944736c15a0240eff553c678ca 1523 | languageName: node 1524 | linkType: hard 1525 | 1526 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1, strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": 1527 | version: 6.0.1 1528 | resolution: "strip-ansi@npm:6.0.1" 1529 | dependencies: 1530 | ansi-regex: "npm:^5.0.1" 1531 | checksum: 10c0/1ae5f212a126fe5b167707f716942490e3933085a5ff6c008ab97ab2f272c8025d3aa218b7bd6ab25729ca20cc81cddb252102f8751e13482a5199e873680952 1532 | languageName: node 1533 | linkType: hard 1534 | 1535 | "strip-ansi@npm:^7.0.1": 1536 | version: 7.1.0 1537 | resolution: "strip-ansi@npm:7.1.0" 1538 | dependencies: 1539 | ansi-regex: "npm:^6.0.1" 1540 | checksum: 10c0/a198c3762e8832505328cbf9e8c8381de14a4fa50a4f9b2160138158ea88c0f5549fb50cb13c651c3088f47e63a108b34622ec18c0499b6c8c3a5ddf6b305ac4 1541 | languageName: node 1542 | linkType: hard 1543 | 1544 | "tar@npm:^7.4.3": 1545 | version: 7.4.3 1546 | resolution: "tar@npm:7.4.3" 1547 | dependencies: 1548 | "@isaacs/fs-minipass": "npm:^4.0.0" 1549 | chownr: "npm:^3.0.0" 1550 | minipass: "npm:^7.1.2" 1551 | minizlib: "npm:^3.0.1" 1552 | mkdirp: "npm:^3.0.1" 1553 | yallist: "npm:^5.0.0" 1554 | checksum: 10c0/d4679609bb2a9b48eeaf84632b6d844128d2412b95b6de07d53d8ee8baf4ca0857c9331dfa510390a0727b550fd543d4d1a10995ad86cdf078423fbb8d99831d 1555 | languageName: node 1556 | linkType: hard 1557 | 1558 | "tinybench@npm:^2.9.0": 1559 | version: 2.9.0 1560 | resolution: "tinybench@npm:2.9.0" 1561 | checksum: 10c0/c3500b0f60d2eb8db65250afe750b66d51623057ee88720b7f064894a6cb7eb93360ca824a60a31ab16dab30c7b1f06efe0795b352e37914a9d4bad86386a20c 1562 | languageName: node 1563 | linkType: hard 1564 | 1565 | "tinyexec@npm:^0.3.2": 1566 | version: 0.3.2 1567 | resolution: "tinyexec@npm:0.3.2" 1568 | checksum: 10c0/3efbf791a911be0bf0821eab37a3445c2ba07acc1522b1fa84ae1e55f10425076f1290f680286345ed919549ad67527d07281f1c19d584df3b74326909eb1f90 1569 | languageName: node 1570 | linkType: hard 1571 | 1572 | "tinypool@npm:^1.0.2": 1573 | version: 1.0.2 1574 | resolution: "tinypool@npm:1.0.2" 1575 | checksum: 10c0/31ac184c0ff1cf9a074741254fe9ea6de95026749eb2b8ec6fd2b9d8ca94abdccda731f8e102e7f32e72ed3b36d32c6975fd5f5523df3f1b6de6c3d8dfd95e63 1576 | languageName: node 1577 | linkType: hard 1578 | 1579 | "tinyrainbow@npm:^2.0.0": 1580 | version: 2.0.0 1581 | resolution: "tinyrainbow@npm:2.0.0" 1582 | checksum: 10c0/c83c52bef4e0ae7fb8ec6a722f70b5b6fa8d8be1c85792e829f56c0e1be94ab70b293c032dc5048d4d37cfe678f1f5babb04bdc65fd123098800148ca989184f 1583 | languageName: node 1584 | linkType: hard 1585 | 1586 | "tinyspy@npm:^3.0.2": 1587 | version: 3.0.2 1588 | resolution: "tinyspy@npm:3.0.2" 1589 | checksum: 10c0/55ffad24e346622b59292e097c2ee30a63919d5acb7ceca87fc0d1c223090089890587b426e20054733f97a58f20af2c349fb7cc193697203868ab7ba00bcea0 1590 | languageName: node 1591 | linkType: hard 1592 | 1593 | "typescript@npm:^5.5.2": 1594 | version: 5.5.2 1595 | resolution: "typescript@npm:5.5.2" 1596 | bin: 1597 | tsc: bin/tsc 1598 | tsserver: bin/tsserver 1599 | checksum: 10c0/8ca39b27b5f9bd7f32db795045933ab5247897660627251e8254180b792a395bf061ea7231947d5d7ffa5cb4cc771970fd4ef543275f9b559f08c9325cccfce3 1600 | languageName: node 1601 | linkType: hard 1602 | 1603 | "typescript@patch:typescript@npm%3A^5.5.2#optional!builtin": 1604 | version: 5.5.2 1605 | resolution: "typescript@patch:typescript@npm%3A5.5.2#optional!builtin::version=5.5.2&hash=379a07" 1606 | bin: 1607 | tsc: bin/tsc 1608 | tsserver: bin/tsserver 1609 | checksum: 10c0/a7b7ede75dc7fc32a76d0d0af6b91f5fbd8620890d84c906f663d8783bf3de6d7bd50f0430b8bb55eac88a38934af847ff709e7156e5138b95ae94cbd5f73e5b 1610 | languageName: node 1611 | linkType: hard 1612 | 1613 | "unique-filename@npm:^4.0.0": 1614 | version: 4.0.0 1615 | resolution: "unique-filename@npm:4.0.0" 1616 | dependencies: 1617 | unique-slug: "npm:^5.0.0" 1618 | checksum: 10c0/38ae681cceb1408ea0587b6b01e29b00eee3c84baee1e41fd5c16b9ed443b80fba90c40e0ba69627e30855570a34ba8b06702d4a35035d4b5e198bf5a64c9ddc 1619 | languageName: node 1620 | linkType: hard 1621 | 1622 | "unique-slug@npm:^5.0.0": 1623 | version: 5.0.0 1624 | resolution: "unique-slug@npm:5.0.0" 1625 | dependencies: 1626 | imurmurhash: "npm:^0.1.4" 1627 | checksum: 10c0/d324c5a44887bd7e105ce800fcf7533d43f29c48757ac410afd42975de82cc38ea2035c0483f4de82d186691bf3208ef35c644f73aa2b1b20b8e651be5afd293 1628 | languageName: node 1629 | linkType: hard 1630 | 1631 | "vite-node@npm:3.0.5": 1632 | version: 3.0.5 1633 | resolution: "vite-node@npm:3.0.5" 1634 | dependencies: 1635 | cac: "npm:^6.7.14" 1636 | debug: "npm:^4.4.0" 1637 | es-module-lexer: "npm:^1.6.0" 1638 | pathe: "npm:^2.0.2" 1639 | vite: "npm:^5.0.0 || ^6.0.0" 1640 | bin: 1641 | vite-node: vite-node.mjs 1642 | checksum: 10c0/8ea2d482d5e257d2052a92e52b7ffdbc379d9e8310a9349ef5e9a62e4a522069d5c0bef071e4a121fb1ab404b0896d588d594d50af3f2be6432782751f4ccb0a 1643 | languageName: node 1644 | linkType: hard 1645 | 1646 | "vite-plugin-es-toolkit@workspace:.": 1647 | version: 0.0.0-use.local 1648 | resolution: "vite-plugin-es-toolkit@workspace:." 1649 | dependencies: 1650 | "@biomejs/biome": "npm:1.9.0" 1651 | es-toolkit: "npm:^1.20.0" 1652 | husky: "npm:^9.0.0" 1653 | typescript: "npm:^5.5.2" 1654 | vite: "npm:^6.2.4" 1655 | vitest: "npm:^3.0.5" 1656 | peerDependencies: 1657 | es-toolkit: ^1.11.0 1658 | vite: ^2.3.0 || ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 1659 | languageName: unknown 1660 | linkType: soft 1661 | 1662 | "vite@npm:^5.0.0 || ^6.0.0, vite@npm:^6.2.4": 1663 | version: 6.2.4 1664 | resolution: "vite@npm:6.2.4" 1665 | dependencies: 1666 | esbuild: "npm:^0.25.0" 1667 | fsevents: "npm:~2.3.3" 1668 | postcss: "npm:^8.5.3" 1669 | rollup: "npm:^4.30.1" 1670 | peerDependencies: 1671 | "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 1672 | jiti: ">=1.21.0" 1673 | less: "*" 1674 | lightningcss: ^1.21.0 1675 | sass: "*" 1676 | sass-embedded: "*" 1677 | stylus: "*" 1678 | sugarss: "*" 1679 | terser: ^5.16.0 1680 | tsx: ^4.8.1 1681 | yaml: ^2.4.2 1682 | dependenciesMeta: 1683 | fsevents: 1684 | optional: true 1685 | peerDependenciesMeta: 1686 | "@types/node": 1687 | optional: true 1688 | jiti: 1689 | optional: true 1690 | less: 1691 | optional: true 1692 | lightningcss: 1693 | optional: true 1694 | sass: 1695 | optional: true 1696 | sass-embedded: 1697 | optional: true 1698 | stylus: 1699 | optional: true 1700 | sugarss: 1701 | optional: true 1702 | terser: 1703 | optional: true 1704 | tsx: 1705 | optional: true 1706 | yaml: 1707 | optional: true 1708 | bin: 1709 | vite: bin/vite.js 1710 | checksum: 10c0/5a011ee5cce91de023a22564a314f04bf64d0d02b420d92c3d539d10257448d60e98e52b491404656426fba4a50dc25f107282540d7388fc5303dc441280155e 1711 | languageName: node 1712 | linkType: hard 1713 | 1714 | "vitest@npm:^3.0.5": 1715 | version: 3.0.5 1716 | resolution: "vitest@npm:3.0.5" 1717 | dependencies: 1718 | "@vitest/expect": "npm:3.0.5" 1719 | "@vitest/mocker": "npm:3.0.5" 1720 | "@vitest/pretty-format": "npm:^3.0.5" 1721 | "@vitest/runner": "npm:3.0.5" 1722 | "@vitest/snapshot": "npm:3.0.5" 1723 | "@vitest/spy": "npm:3.0.5" 1724 | "@vitest/utils": "npm:3.0.5" 1725 | chai: "npm:^5.1.2" 1726 | debug: "npm:^4.4.0" 1727 | expect-type: "npm:^1.1.0" 1728 | magic-string: "npm:^0.30.17" 1729 | pathe: "npm:^2.0.2" 1730 | std-env: "npm:^3.8.0" 1731 | tinybench: "npm:^2.9.0" 1732 | tinyexec: "npm:^0.3.2" 1733 | tinypool: "npm:^1.0.2" 1734 | tinyrainbow: "npm:^2.0.0" 1735 | vite: "npm:^5.0.0 || ^6.0.0" 1736 | vite-node: "npm:3.0.5" 1737 | why-is-node-running: "npm:^2.3.0" 1738 | peerDependencies: 1739 | "@edge-runtime/vm": "*" 1740 | "@types/debug": ^4.1.12 1741 | "@types/node": ^18.0.0 || ^20.0.0 || >=22.0.0 1742 | "@vitest/browser": 3.0.5 1743 | "@vitest/ui": 3.0.5 1744 | happy-dom: "*" 1745 | jsdom: "*" 1746 | peerDependenciesMeta: 1747 | "@edge-runtime/vm": 1748 | optional: true 1749 | "@types/debug": 1750 | optional: true 1751 | "@types/node": 1752 | optional: true 1753 | "@vitest/browser": 1754 | optional: true 1755 | "@vitest/ui": 1756 | optional: true 1757 | happy-dom: 1758 | optional: true 1759 | jsdom: 1760 | optional: true 1761 | bin: 1762 | vitest: vitest.mjs 1763 | checksum: 10c0/9218bb91a1fb6710fb7e47b0b663397bdf2c906a7d7ec43cf603b39151f8ff8d276163f7b77c55eb4d109ef1dc1b3eddb77696d2dd46a850b7d9b695ae2fca5d 1764 | languageName: node 1765 | linkType: hard 1766 | 1767 | "which@npm:^2.0.1": 1768 | version: 2.0.2 1769 | resolution: "which@npm:2.0.2" 1770 | dependencies: 1771 | isexe: "npm:^2.0.0" 1772 | bin: 1773 | node-which: ./bin/node-which 1774 | checksum: 10c0/66522872a768b60c2a65a57e8ad184e5372f5b6a9ca6d5f033d4b0dc98aff63995655a7503b9c0a2598936f532120e81dd8cc155e2e92ed662a2b9377cc4374f 1775 | languageName: node 1776 | linkType: hard 1777 | 1778 | "which@npm:^5.0.0": 1779 | version: 5.0.0 1780 | resolution: "which@npm:5.0.0" 1781 | dependencies: 1782 | isexe: "npm:^3.1.1" 1783 | bin: 1784 | node-which: bin/which.js 1785 | checksum: 10c0/e556e4cd8b7dbf5df52408c9a9dd5ac6518c8c5267c8953f5b0564073c66ed5bf9503b14d876d0e9c7844d4db9725fb0dcf45d6e911e17e26ab363dc3965ae7b 1786 | languageName: node 1787 | linkType: hard 1788 | 1789 | "why-is-node-running@npm:^2.3.0": 1790 | version: 2.3.0 1791 | resolution: "why-is-node-running@npm:2.3.0" 1792 | dependencies: 1793 | siginfo: "npm:^2.0.0" 1794 | stackback: "npm:0.0.2" 1795 | bin: 1796 | why-is-node-running: cli.js 1797 | checksum: 10c0/1cde0b01b827d2cf4cb11db962f3958b9175d5d9e7ac7361d1a7b0e2dc6069a263e69118bd974c4f6d0a890ef4eedfe34cf3d5167ec14203dbc9a18620537054 1798 | languageName: node 1799 | linkType: hard 1800 | 1801 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0": 1802 | version: 7.0.0 1803 | resolution: "wrap-ansi@npm:7.0.0" 1804 | dependencies: 1805 | ansi-styles: "npm:^4.0.0" 1806 | string-width: "npm:^4.1.0" 1807 | strip-ansi: "npm:^6.0.0" 1808 | checksum: 10c0/d15fc12c11e4cbc4044a552129ebc75ee3f57aa9c1958373a4db0292d72282f54373b536103987a4a7594db1ef6a4f10acf92978f79b98c49306a4b58c77d4da 1809 | languageName: node 1810 | linkType: hard 1811 | 1812 | "wrap-ansi@npm:^8.1.0": 1813 | version: 8.1.0 1814 | resolution: "wrap-ansi@npm:8.1.0" 1815 | dependencies: 1816 | ansi-styles: "npm:^6.1.0" 1817 | string-width: "npm:^5.0.1" 1818 | strip-ansi: "npm:^7.0.1" 1819 | checksum: 10c0/138ff58a41d2f877eae87e3282c0630fc2789012fc1af4d6bd626eeb9a2f9a65ca92005e6e69a75c7b85a68479fe7443c7dbe1eb8fbaa681a4491364b7c55c60 1820 | languageName: node 1821 | linkType: hard 1822 | 1823 | "yallist@npm:^4.0.0": 1824 | version: 4.0.0 1825 | resolution: "yallist@npm:4.0.0" 1826 | checksum: 10c0/2286b5e8dbfe22204ab66e2ef5cc9bbb1e55dfc873bbe0d568aa943eb255d131890dfd5bf243637273d31119b870f49c18fcde2c6ffbb7a7a092b870dc90625a 1827 | languageName: node 1828 | linkType: hard 1829 | 1830 | "yallist@npm:^5.0.0": 1831 | version: 5.0.0 1832 | resolution: "yallist@npm:5.0.0" 1833 | checksum: 10c0/a499c81ce6d4a1d260d4ea0f6d49ab4da09681e32c3f0472dee16667ed69d01dae63a3b81745a24bd78476ec4fcf856114cb4896ace738e01da34b2c42235416 1834 | languageName: node 1835 | linkType: hard 1836 | --------------------------------------------------------------------------------