├── dist ├── types.mjs ├── index.d.ts ├── types.d.ts └── index.mjs ├── .gitignore ├── pnpm-workspace.yaml ├── .prettierrc.json ├── src ├── types.ts └── index.ts ├── rename-to-mjs.js ├── LICENSE ├── .github └── workflows │ └── close-dependabot-prs.yml ├── package.json ├── README.md ├── tsconfig.json └── pnpm-lock.yaml /dist/types.mjs: -------------------------------------------------------------------------------- 1 | export {}; 2 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | 3 | .DS_Store 4 | -------------------------------------------------------------------------------- /pnpm-workspace.yaml: -------------------------------------------------------------------------------- 1 | onlyBuiltDependencies: 2 | - esbuild 3 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true, 3 | "semi": false, 4 | "arrowParens": "avoid", 5 | "trailingComma": "none", 6 | "endOfLine": "auto" 7 | } 8 | -------------------------------------------------------------------------------- /dist/index.d.ts: -------------------------------------------------------------------------------- 1 | import { Plugin } from 'vite'; 2 | import { Options } from './types'; 3 | declare const oxlintPlugin: (options?: Options) => Plugin; 4 | export default oxlintPlugin; 5 | -------------------------------------------------------------------------------- /src/types.ts: -------------------------------------------------------------------------------- 1 | export interface Options { 2 | path?: string 3 | ignorePattern?: string 4 | configFile?: string 5 | deny?: string[] 6 | allow?: string[] 7 | warn?: string[] 8 | params?: string 9 | oxlintPath?: string 10 | } 11 | -------------------------------------------------------------------------------- /dist/types.d.ts: -------------------------------------------------------------------------------- 1 | export interface Options { 2 | path?: string; 3 | ignorePattern?: string; 4 | configFile?: string; 5 | deny?: string[]; 6 | allow?: string[]; 7 | warn?: string[]; 8 | params?: string; 9 | oxlintPath?: string; 10 | } 11 | -------------------------------------------------------------------------------- /rename-to-mjs.js: -------------------------------------------------------------------------------- 1 | const fs = require('fs') 2 | const path = require('path') 3 | 4 | const directory = path.join(__dirname, 'dist') 5 | 6 | fs.readdir(directory, (err, files) => { 7 | if (err) { 8 | console.error('Error listing directory contents.', err) 9 | return 10 | } 11 | 12 | files.forEach((file) => { 13 | if (file.endsWith('.js')) { 14 | const filePath = path.join(directory, file) 15 | const newFilePath = filePath.replace('.js', '.mjs') 16 | 17 | fs.rename(filePath, newFilePath, (err) => { 18 | if (err) { 19 | console.error(`Error renaming file: ${file}`, err) 20 | } else { 21 | console.log(`Renamed ${file} to ${path.basename(newFilePath)}`) 22 | } 23 | }) 24 | } 25 | }) 26 | }) 27 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2024-present Arnaud Riu 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 | -------------------------------------------------------------------------------- /.github/workflows/close-dependabot-prs.yml: -------------------------------------------------------------------------------- 1 | name: Close Dependabot PRs 2 | 3 | on: 4 | pull_request: 5 | types: [opened, reopened, synchronize] 6 | 7 | jobs: 8 | close_dependabot_prs: 9 | runs-on: ubuntu-latest 10 | if: github.actor == 'dependabot[bot]' 11 | permissions: 12 | pull-requests: write 13 | issues: write 14 | steps: 15 | - name: Comment and close Dependabot PR 16 | uses: actions/github-script@v7 17 | with: 18 | github-token: ${{ secrets.GITHUB_TOKEN }} 19 | script: | 20 | await github.rest.issues.createComment({ 21 | owner: context.repo.owner, 22 | repo: context.repo.repo, 23 | issue_number: context.issue.number, 24 | body: "👋 This PR has been automatically closed.\n\n" + 25 | "**Reason**: This repository maintains its dependencies manually on a regular basis.\n" + 26 | "Dependabot is enabled at the organization level but is not needed here.\n\n" + 27 | "Security updates are tracked through our internal process." 28 | }); 29 | 30 | await github.rest.pulls.update({ 31 | owner: context.repo.owner, 32 | repo: context.repo.repo, 33 | pull_number: context.issue.number, 34 | state: 'closed' 35 | }); 36 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "vite-plugin-oxlint", 3 | "version": "1.5.0", 4 | "description": "Oxlint plugin for vite.", 5 | "author": "Arnaud Riu", 6 | "license": "MIT", 7 | "homepage": "https://github.com/52-entertainment/vite-plugin-oxlint", 8 | "repository": { 9 | "type": "git", 10 | "url": "git+https://github.com/52-entertainment/vite-plugin-oxlint.git" 11 | }, 12 | "main": "./dist/index.mjs", 13 | "module": "./dist/index.mjs", 14 | "types": "dist/index.d.ts", 15 | "exports": { 16 | ".": { 17 | "types": "./dist/index.d.ts", 18 | "import": "./dist/index.mjs", 19 | "require": "./dist/index.js" 20 | } 21 | }, 22 | "files": [ 23 | "dist" 24 | ], 25 | "scripts": { 26 | "build": "tsc && node rename-to-mjs.js", 27 | "test": "echo \"Error: no test specified\" && exit 1" 28 | }, 29 | "keywords": [ 30 | "oxlint", 31 | "vite", 32 | "vite-plugin" 33 | ], 34 | "dependencies": { 35 | "@types/cross-spawn": "^6.0.6", 36 | "cross-spawn": "^7.0.6", 37 | "oxlint": "^1.29.0", 38 | "package-manager-detector": "^1.5.0" 39 | }, 40 | "devDependencies": { 41 | "@types/node": "^24.10.1", 42 | "typescript": "^5.9.3", 43 | "vite": "^7.2.4" 44 | }, 45 | "peerDependencies": { 46 | "vite": "^7.2.2" 47 | }, 48 | "packageManager": "pnpm@10.22.0+sha512.bf049efe995b28f527fd2b41ae0474ce29186f7edcb3bf545087bd61fbbebb2bf75362d1307fda09c2d288e1e499787ac12d4fcb617a974718a6051f2eee741c" 49 | } 50 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import { Plugin } from 'vite' 2 | import { spawn } from 'cross-spawn' 3 | import nodePath from 'path' 4 | import { existsSync } from 'fs' 5 | import { Options } from './types' 6 | import { detect } from 'package-manager-detector/detect' 7 | import { resolveCommand } from 'package-manager-detector/commands' 8 | 9 | const oxlintPlugin = (options: Options = {}): Plugin => { 10 | let timeoutId: NodeJS.Timeout | null = null 11 | const debounceTime = 300 12 | 13 | const executeCommand = async () => { 14 | const { 15 | path = '', 16 | ignorePattern = '', 17 | configFile = 'oxlintrc.json', 18 | deny = [], 19 | allow = [], 20 | warn = [], 21 | params = '', 22 | oxlintPath = '' 23 | } = options 24 | 25 | const args: string[] = [] 26 | if (ignorePattern) { 27 | args.push(`--ignore-pattern=${ignorePattern}`) 28 | } 29 | deny.forEach(d => args.push('-D', d)) 30 | allow.forEach(a => args.push('-A', a)) 31 | warn.forEach(w => args.push('-W', w)) 32 | 33 | const configFilePath = nodePath.join(process.cwd(), configFile) 34 | if (existsSync(configFilePath)) { 35 | args.push('-c', configFilePath) 36 | } 37 | 38 | if (params) { 39 | args.push(...params.split(' ').filter(Boolean)) 40 | } 41 | 42 | const cwd = nodePath.join(process.cwd(), path) 43 | 44 | const pm = await detect() 45 | if (!pm) throw new Error('Could not detect package manager') 46 | 47 | return new Promise((resolve, reject) => { 48 | let isExecuteLocal = true 49 | 50 | const executeWithFallback = (useExecuteLocal: boolean) => { 51 | const { command: cmd, args: cmdArgs } = resolveCommand( 52 | pm.agent, 53 | useExecuteLocal ? 'execute-local' : 'execute', 54 | [useExecuteLocal ? oxlintPath || 'oxlint' : 'oxlint', ...args] 55 | ) as { command: string; args: string[] } 56 | 57 | const child = spawn(cmd, cmdArgs, { 58 | cwd, 59 | stdio: 'pipe', 60 | shell: false, 61 | env: { 62 | ...process.env, 63 | FORCE_COLOR: '1' 64 | } 65 | }) 66 | 67 | // child.stdout?.pipe(process.stdout) 68 | 69 | let stderrOutput = '' 70 | child.stdout?.on('data', data => { 71 | const dataString = data.toString() 72 | 73 | if ( 74 | !dataString.includes('undefined') && 75 | !(dataString.includes('not found') && useExecuteLocal) 76 | ) { 77 | stderrOutput += dataString 78 | process.stdout.write(data) 79 | } 80 | }) 81 | 82 | child.stderr?.on('data', data => { 83 | stderrOutput += data.toString() 84 | process.stderr.write(data) 85 | }) 86 | 87 | child.on('error', error => { 88 | console.error(`oxlint Error: ${error.message}`) 89 | reject(error) 90 | }) 91 | 92 | child.on('exit', code => { 93 | if (code === 0) { 94 | console.log('\nOxlint successfully finished.') 95 | resolve() 96 | } else if (useExecuteLocal && code !== 1) { 97 | isExecuteLocal = false 98 | executeWithFallback(isExecuteLocal) 99 | } else { 100 | console.warn( 101 | `\n\x1b[33mOxlint finished with exit code: ${code}\x1b[0m` 102 | ) 103 | resolve() 104 | } 105 | }) 106 | } 107 | 108 | executeWithFallback(isExecuteLocal) 109 | }) 110 | } 111 | 112 | const handleCommandExecution = async () => { 113 | if (timeoutId) { 114 | clearTimeout(timeoutId) 115 | } 116 | 117 | timeoutId = setTimeout(async () => { 118 | try { 119 | await executeCommand() 120 | } catch (error) { 121 | console.error('Error executing command:', error) 122 | } 123 | }, debounceTime) 124 | } 125 | 126 | return { 127 | name: 'vite-plugin-oxlint', 128 | async buildStart() { 129 | await handleCommandExecution() 130 | }, 131 | async handleHotUpdate() { 132 | await handleCommandExecution() 133 | } 134 | } 135 | } 136 | 137 | export default oxlintPlugin 138 | -------------------------------------------------------------------------------- /dist/index.mjs: -------------------------------------------------------------------------------- 1 | import { spawn } from 'cross-spawn'; 2 | import nodePath from 'path'; 3 | import { existsSync } from 'fs'; 4 | import { detect } from 'package-manager-detector/detect'; 5 | import { resolveCommand } from 'package-manager-detector/commands'; 6 | const oxlintPlugin = (options = {}) => { 7 | let timeoutId = null; 8 | const debounceTime = 300; 9 | const executeCommand = async () => { 10 | const { path = '', ignorePattern = '', configFile = 'oxlintrc.json', deny = [], allow = [], warn = [], params = '', oxlintPath = '' } = options; 11 | const args = []; 12 | if (ignorePattern) { 13 | args.push(`--ignore-pattern=${ignorePattern}`); 14 | } 15 | deny.forEach(d => args.push('-D', d)); 16 | allow.forEach(a => args.push('-A', a)); 17 | warn.forEach(w => args.push('-W', w)); 18 | const configFilePath = nodePath.join(process.cwd(), configFile); 19 | if (existsSync(configFilePath)) { 20 | args.push('-c', configFilePath); 21 | } 22 | if (params) { 23 | args.push(...params.split(' ').filter(Boolean)); 24 | } 25 | const cwd = nodePath.join(process.cwd(), path); 26 | const pm = await detect(); 27 | if (!pm) 28 | throw new Error('Could not detect package manager'); 29 | return new Promise((resolve, reject) => { 30 | let isExecuteLocal = true; 31 | const executeWithFallback = (useExecuteLocal) => { 32 | const { command: cmd, args: cmdArgs } = resolveCommand(pm.agent, useExecuteLocal ? 'execute-local' : 'execute', [useExecuteLocal ? oxlintPath || 'oxlint' : 'oxlint', ...args]); 33 | const child = spawn(cmd, cmdArgs, { 34 | cwd, 35 | stdio: 'pipe', 36 | shell: false, 37 | env: { 38 | ...process.env, 39 | FORCE_COLOR: '1' 40 | } 41 | }); 42 | // child.stdout?.pipe(process.stdout) 43 | let stderrOutput = ''; 44 | child.stdout?.on('data', data => { 45 | const dataString = data.toString(); 46 | if (!dataString.includes('undefined') && 47 | !(dataString.includes('not found') && useExecuteLocal)) { 48 | stderrOutput += dataString; 49 | process.stdout.write(data); 50 | } 51 | }); 52 | child.stderr?.on('data', data => { 53 | stderrOutput += data.toString(); 54 | process.stderr.write(data); 55 | }); 56 | child.on('error', error => { 57 | console.error(`oxlint Error: ${error.message}`); 58 | reject(error); 59 | }); 60 | child.on('exit', code => { 61 | if (code === 0) { 62 | console.log('\nOxlint successfully finished.'); 63 | resolve(); 64 | } 65 | else if (useExecuteLocal && code !== 1) { 66 | isExecuteLocal = false; 67 | executeWithFallback(isExecuteLocal); 68 | } 69 | else { 70 | console.warn(`\n\x1b[33mOxlint finished with exit code: ${code}\x1b[0m`); 71 | resolve(); 72 | } 73 | }); 74 | }; 75 | executeWithFallback(isExecuteLocal); 76 | }); 77 | }; 78 | const handleCommandExecution = async () => { 79 | if (timeoutId) { 80 | clearTimeout(timeoutId); 81 | } 82 | timeoutId = setTimeout(async () => { 83 | try { 84 | await executeCommand(); 85 | } 86 | catch (error) { 87 | console.error('Error executing command:', error); 88 | } 89 | }, debounceTime); 90 | }; 91 | return { 92 | name: 'vite-plugin-oxlint', 93 | async buildStart() { 94 | await handleCommandExecution(); 95 | }, 96 | async handleHotUpdate() { 97 | await handleCommandExecution(); 98 | } 99 | }; 100 | }; 101 | export default oxlintPlugin; 102 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # ⚓️+⚡️Vite Plugin Oxlint 2 | 3 | This is a Vite plugin for integrating the [Oxlint](https://oxc-project.github.io) linter into your Vite project. 4 | 5 | ## Installation 6 | 7 | ```bash 8 | npm install vite-plugin-oxlint oxlint 9 | ``` 10 | 11 | ## Usage 12 | 13 | Add the plugin to your `vite.config.js` file. 14 | 15 | ```javascript 16 | import oxlintPlugin from 'vite-plugin-oxlint' 17 | 18 | export default { 19 | plugins: [oxlintPlugin()] 20 | } 21 | ``` 22 | 23 | ## Advanced Usage 24 | 25 | ### Oxlint Configuration File 26 | 27 | You can use a configuration file. See [Oxlint configuration file](https://oxc.rs/docs/guide/usage/linter/config.html). 28 | 29 | [Allow / Deny / Warn](#allow--deny--warn-rules) will override config file rules. 30 | 31 | Default is `oxlintrc.json`. 32 | 33 | ```javascript 34 | import oxlintPlugin from 'vite-plugin-oxlint' 35 | 36 | export default { 37 | plugins: [ 38 | oxlintPlugin({ 39 | configFile: 'eslintrc.json' 40 | }) 41 | ] 42 | } 43 | ``` 44 | 45 | ### Change working directory 46 | 47 | You can change the directory where oxlint will run. 48 | Default is the root of your project. 49 | 50 | Example: only lint files in your `src` directory. 51 | 52 | ```javascript 53 | import oxlintPlugin from 'vite-plugin-oxlint' 54 | 55 | export default { 56 | plugins: [ 57 | oxlintPlugin({ 58 | path: 'src' 59 | }) 60 | ] 61 | } 62 | ``` 63 | 64 | ### Ignore patterns 65 | 66 | You can specify patterns of files to ignore. The supported syntax is the same as for `.eslintignore` and `.gitignore` files. You should quote your patterns to avoid shell interpretation of glob patterns. 67 | See [oxlint ignore](https://oxc.rs/docs/guide/usage/linter/cli.html#ignore-files) 68 | 69 | Example: lint files in your `src` directory, but not `test.js` files: 70 | 71 | ```javascript 72 | import oxlintPlugin from 'vite-plugin-oxlint' 73 | 74 | export default { 75 | plugins: [ 76 | oxlintPlugin({ 77 | path: 'src', 78 | ignorePattern: '"test.js"' 79 | }) 80 | ] 81 | } 82 | ``` 83 | 84 | ### Allow / Deny / Warn rules 85 | 86 | You can allow, deny or warn oxlint rules or categories. 87 | To see the list of available rules and categories, run: 88 | `npx oxlint --rules` 89 | This will override [config file](#oxlint-configuration-file) rules. 90 | 91 | Example: deny (turn on) `correctness` and `perf` rules and allow (turn off) the `debugger` and `eqeqeq` rules. 92 | 93 | ```javascript 94 | import oxlintPlugin from 'vite-plugin-oxlint' 95 | 96 | export default { 97 | plugins: [ 98 | oxlintPlugin({ 99 | deny: ['correctness', 'perf'], 100 | allow: ['debugger', 'eqeqeq'], 101 | warn: [] 102 | }) 103 | ] 104 | } 105 | ``` 106 | 107 | ### Additional oxlint config: 108 | 109 | You can pass any additional oxlint config as a string. 110 | See [oxlint options](https://oxc-project.github.io/docs/guide/usage/linter.html#useful-options) for a list of available options. 111 | 112 | Example: add the `--deny-warnings` and `--quiet` options to the `vite-plugin-oxlint` config: 113 | 114 | ```javascript 115 | import oxlintPlugin from 'vite-plugin-oxlint' 116 | 117 | export default { 118 | plugins: [ 119 | oxlintPlugin({ 120 | params: '--deny-warnings --quiet' 121 | }) 122 | ] 123 | } 124 | ``` 125 | 126 | ### Change oxlint path 127 | 128 | If you're using this plugin in a monorepo and encountering "command not found: oxlint" errors, you can manually specify the path to the oxlint binary. 129 | 130 | If no local oxlint binary is found, the plugin will gracefully fall back to using npx (or the equivalent command for your package manager). 131 | 132 | ```javascript 133 | import oxlintPlugin from 'vite-plugin-oxlint' 134 | 135 | export default { 136 | plugins: [ 137 | oxlintPlugin({ 138 | oxlintPath: '/path/to/your/monorepo/node_modules/.bin/oxlint' 139 | }) 140 | ] 141 | } 142 | ``` 143 | 144 | ## Integration with ESLint 145 | 146 | If your project still needs ESLint, you can use [vite-plugin-eslint](https://github.com/gxmari007/vite-plugin-eslint) and configure ESLint with [eslint-plugin-oxlint](https://github.com/oxc-project/eslint-plugin-oxlint) to turn off rules already supported by oxlint. 147 | 148 | ```javascript 149 | import oxlintPlugin from 'vite-plugin-oxlint' 150 | import eslintPlugin from 'vite-plugin-eslint' 151 | 152 | export default { 153 | plugins: [oxlintPlugin(), eslintPlugin()] 154 | } 155 | ``` 156 | 157 | ## License 158 | 159 | [MIT LICENSE](LICENSE) 160 | 161 | [GitHub](https://github.com/52-entertainment/vite-plugin-oxlint) 162 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "ESNext", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "ESNext", /* Specify what module code is generated. */ 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | "moduleResolution": "node", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 40 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 41 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 42 | // "resolveJsonModule": true, /* Enable importing .json files. */ 43 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 44 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 45 | 46 | /* JavaScript Support */ 47 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 48 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 49 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 50 | 51 | /* Emit */ 52 | "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 53 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 54 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 55 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 56 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 57 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 58 | "outDir": "./dist", /* Specify an output folder for all emitted files. */ 59 | // "removeComments": true, /* Disable emitting comments. */ 60 | // "noEmit": true, /* Disable emitting files from a compilation. */ 61 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 62 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 63 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 64 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 65 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 66 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 67 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 68 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 69 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 70 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 71 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 72 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 73 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 74 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 75 | 76 | /* Interop Constraints */ 77 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 78 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 79 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 80 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 81 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 82 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 83 | 84 | /* Type Checking */ 85 | "strict": true, /* Enable all strict type-checking options. */ 86 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 87 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 88 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 89 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 90 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 91 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 92 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 93 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 94 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 95 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 96 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 97 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 98 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 99 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 100 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 101 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 102 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 103 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 104 | 105 | /* Completeness */ 106 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 107 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 108 | }, 109 | "include": ["src/**/*", "rename-to-mjs.js"], 110 | "exclude": ["node_modules", "dist"] 111 | } 112 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@types/cross-spawn': 12 | specifier: ^6.0.6 13 | version: 6.0.6 14 | cross-spawn: 15 | specifier: ^7.0.6 16 | version: 7.0.6 17 | oxlint: 18 | specifier: ^1.29.0 19 | version: 1.29.0 20 | package-manager-detector: 21 | specifier: ^1.5.0 22 | version: 1.5.0 23 | devDependencies: 24 | '@types/node': 25 | specifier: ^24.10.1 26 | version: 24.10.1 27 | typescript: 28 | specifier: ^5.9.3 29 | version: 5.9.3 30 | vite: 31 | specifier: ^7.2.4 32 | version: 7.2.4(@types/node@24.10.1) 33 | 34 | packages: 35 | 36 | '@esbuild/aix-ppc64@0.25.12': 37 | resolution: {integrity: sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==} 38 | engines: {node: '>=18'} 39 | cpu: [ppc64] 40 | os: [aix] 41 | 42 | '@esbuild/android-arm64@0.25.12': 43 | resolution: {integrity: sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==} 44 | engines: {node: '>=18'} 45 | cpu: [arm64] 46 | os: [android] 47 | 48 | '@esbuild/android-arm@0.25.12': 49 | resolution: {integrity: sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==} 50 | engines: {node: '>=18'} 51 | cpu: [arm] 52 | os: [android] 53 | 54 | '@esbuild/android-x64@0.25.12': 55 | resolution: {integrity: sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==} 56 | engines: {node: '>=18'} 57 | cpu: [x64] 58 | os: [android] 59 | 60 | '@esbuild/darwin-arm64@0.25.12': 61 | resolution: {integrity: sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==} 62 | engines: {node: '>=18'} 63 | cpu: [arm64] 64 | os: [darwin] 65 | 66 | '@esbuild/darwin-x64@0.25.12': 67 | resolution: {integrity: sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==} 68 | engines: {node: '>=18'} 69 | cpu: [x64] 70 | os: [darwin] 71 | 72 | '@esbuild/freebsd-arm64@0.25.12': 73 | resolution: {integrity: sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==} 74 | engines: {node: '>=18'} 75 | cpu: [arm64] 76 | os: [freebsd] 77 | 78 | '@esbuild/freebsd-x64@0.25.12': 79 | resolution: {integrity: sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==} 80 | engines: {node: '>=18'} 81 | cpu: [x64] 82 | os: [freebsd] 83 | 84 | '@esbuild/linux-arm64@0.25.12': 85 | resolution: {integrity: sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==} 86 | engines: {node: '>=18'} 87 | cpu: [arm64] 88 | os: [linux] 89 | 90 | '@esbuild/linux-arm@0.25.12': 91 | resolution: {integrity: sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==} 92 | engines: {node: '>=18'} 93 | cpu: [arm] 94 | os: [linux] 95 | 96 | '@esbuild/linux-ia32@0.25.12': 97 | resolution: {integrity: sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==} 98 | engines: {node: '>=18'} 99 | cpu: [ia32] 100 | os: [linux] 101 | 102 | '@esbuild/linux-loong64@0.25.12': 103 | resolution: {integrity: sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==} 104 | engines: {node: '>=18'} 105 | cpu: [loong64] 106 | os: [linux] 107 | 108 | '@esbuild/linux-mips64el@0.25.12': 109 | resolution: {integrity: sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==} 110 | engines: {node: '>=18'} 111 | cpu: [mips64el] 112 | os: [linux] 113 | 114 | '@esbuild/linux-ppc64@0.25.12': 115 | resolution: {integrity: sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==} 116 | engines: {node: '>=18'} 117 | cpu: [ppc64] 118 | os: [linux] 119 | 120 | '@esbuild/linux-riscv64@0.25.12': 121 | resolution: {integrity: sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==} 122 | engines: {node: '>=18'} 123 | cpu: [riscv64] 124 | os: [linux] 125 | 126 | '@esbuild/linux-s390x@0.25.12': 127 | resolution: {integrity: sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==} 128 | engines: {node: '>=18'} 129 | cpu: [s390x] 130 | os: [linux] 131 | 132 | '@esbuild/linux-x64@0.25.12': 133 | resolution: {integrity: sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==} 134 | engines: {node: '>=18'} 135 | cpu: [x64] 136 | os: [linux] 137 | 138 | '@esbuild/netbsd-arm64@0.25.12': 139 | resolution: {integrity: sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==} 140 | engines: {node: '>=18'} 141 | cpu: [arm64] 142 | os: [netbsd] 143 | 144 | '@esbuild/netbsd-x64@0.25.12': 145 | resolution: {integrity: sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==} 146 | engines: {node: '>=18'} 147 | cpu: [x64] 148 | os: [netbsd] 149 | 150 | '@esbuild/openbsd-arm64@0.25.12': 151 | resolution: {integrity: sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==} 152 | engines: {node: '>=18'} 153 | cpu: [arm64] 154 | os: [openbsd] 155 | 156 | '@esbuild/openbsd-x64@0.25.12': 157 | resolution: {integrity: sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==} 158 | engines: {node: '>=18'} 159 | cpu: [x64] 160 | os: [openbsd] 161 | 162 | '@esbuild/openharmony-arm64@0.25.12': 163 | resolution: {integrity: sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==} 164 | engines: {node: '>=18'} 165 | cpu: [arm64] 166 | os: [openharmony] 167 | 168 | '@esbuild/sunos-x64@0.25.12': 169 | resolution: {integrity: sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==} 170 | engines: {node: '>=18'} 171 | cpu: [x64] 172 | os: [sunos] 173 | 174 | '@esbuild/win32-arm64@0.25.12': 175 | resolution: {integrity: sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==} 176 | engines: {node: '>=18'} 177 | cpu: [arm64] 178 | os: [win32] 179 | 180 | '@esbuild/win32-ia32@0.25.12': 181 | resolution: {integrity: sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==} 182 | engines: {node: '>=18'} 183 | cpu: [ia32] 184 | os: [win32] 185 | 186 | '@esbuild/win32-x64@0.25.12': 187 | resolution: {integrity: sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==} 188 | engines: {node: '>=18'} 189 | cpu: [x64] 190 | os: [win32] 191 | 192 | '@oxlint/darwin-arm64@1.29.0': 193 | resolution: {integrity: sha512-XYsieDAI0kXJyvayHnmOW1qVydqklRRVT4O5eZmO/rdNCku5CoXsZvBvkPc3U8/9V1mRuen1sxbM9T5JsZqhdA==} 194 | cpu: [arm64] 195 | os: [darwin] 196 | 197 | '@oxlint/darwin-x64@1.29.0': 198 | resolution: {integrity: sha512-s+Ch5/4zDJ6wsOk95xY3BS5mtE2JzHLz7gVZ9OWA9EvhVO84wz2YbDp2JaA314yyqhlX5SAkZ6fj3BRMIcQIqg==} 199 | cpu: [x64] 200 | os: [darwin] 201 | 202 | '@oxlint/linux-arm64-gnu@1.29.0': 203 | resolution: {integrity: sha512-qLCgdUkDBG8muK1o3mPgf31rvCPzj1Xff9DHlJjfv+B0ee/hJ2LAoK8EIsQedfQuuiAccOe9GG65BivGCTgKOg==} 204 | cpu: [arm64] 205 | os: [linux] 206 | 207 | '@oxlint/linux-arm64-musl@1.29.0': 208 | resolution: {integrity: sha512-qe62yb1fyW51wo1VBpx9AJJ1Ih1T8NYDeR9AmpNGkrmKN8u3pPbcGXM4mCrOwpwJUG9M/oFvCIlIz2RhawHlkA==} 209 | cpu: [arm64] 210 | os: [linux] 211 | 212 | '@oxlint/linux-x64-gnu@1.29.0': 213 | resolution: {integrity: sha512-4x7p2iVoSE2aT9qI1JOLxUAv3UuzMYGBYWBA4ZF8ln99AdUo1eo0snFacPNd6I/ZZNcv5TegXC+0EUhp5MfYBw==} 214 | cpu: [x64] 215 | os: [linux] 216 | 217 | '@oxlint/linux-x64-musl@1.29.0': 218 | resolution: {integrity: sha512-BdH5gdRpaYpyZn2Zm+MCS4b1YmXNe7QyQhw0fawuou+N1LrdAyELgvqI5xXZ1MXCgWDOa6WJaoE6VOPaDc29GA==} 219 | cpu: [x64] 220 | os: [linux] 221 | 222 | '@oxlint/win32-arm64@1.29.0': 223 | resolution: {integrity: sha512-y+j9ZDrnMxvRTNIstZKFY7gJD07nT++c4cGmub1ENvhoHVToiQAAZQUOLDhXXRzCrFoG/cFJXJf72uowHZPbcg==} 224 | cpu: [arm64] 225 | os: [win32] 226 | 227 | '@oxlint/win32-x64@1.29.0': 228 | resolution: {integrity: sha512-F1iRtq8VT96lT8hqOubLyV0GxgIK/XdXk2kFLXdCspiI2ngXeNmTTvmPxrj+WFL6fpJPgv7VKWRb/zEHJnNOrg==} 229 | cpu: [x64] 230 | os: [win32] 231 | 232 | '@rollup/rollup-android-arm-eabi@4.53.3': 233 | resolution: {integrity: sha512-mRSi+4cBjrRLoaal2PnqH82Wqyb+d3HsPUN/W+WslCXsZsyHa9ZeQQX/pQsZaVIWDkPcpV6jJ+3KLbTbgnwv8w==} 234 | cpu: [arm] 235 | os: [android] 236 | 237 | '@rollup/rollup-android-arm64@4.53.3': 238 | resolution: {integrity: sha512-CbDGaMpdE9sh7sCmTrTUyllhrg65t6SwhjlMJsLr+J8YjFuPmCEjbBSx4Z/e4SmDyH3aB5hGaJUP2ltV/vcs4w==} 239 | cpu: [arm64] 240 | os: [android] 241 | 242 | '@rollup/rollup-darwin-arm64@4.53.3': 243 | resolution: {integrity: sha512-Nr7SlQeqIBpOV6BHHGZgYBuSdanCXuw09hon14MGOLGmXAFYjx1wNvquVPmpZnl0tLjg25dEdr4IQ6GgyToCUA==} 244 | cpu: [arm64] 245 | os: [darwin] 246 | 247 | '@rollup/rollup-darwin-x64@4.53.3': 248 | resolution: {integrity: sha512-DZ8N4CSNfl965CmPktJ8oBnfYr3F8dTTNBQkRlffnUarJ2ohudQD17sZBa097J8xhQ26AwhHJ5mvUyQW8ddTsQ==} 249 | cpu: [x64] 250 | os: [darwin] 251 | 252 | '@rollup/rollup-freebsd-arm64@4.53.3': 253 | resolution: {integrity: sha512-yMTrCrK92aGyi7GuDNtGn2sNW+Gdb4vErx4t3Gv/Tr+1zRb8ax4z8GWVRfr3Jw8zJWvpGHNpss3vVlbF58DZ4w==} 254 | cpu: [arm64] 255 | os: [freebsd] 256 | 257 | '@rollup/rollup-freebsd-x64@4.53.3': 258 | resolution: {integrity: sha512-lMfF8X7QhdQzseM6XaX0vbno2m3hlyZFhwcndRMw8fbAGUGL3WFMBdK0hbUBIUYcEcMhVLr1SIamDeuLBnXS+Q==} 259 | cpu: [x64] 260 | os: [freebsd] 261 | 262 | '@rollup/rollup-linux-arm-gnueabihf@4.53.3': 263 | resolution: {integrity: sha512-k9oD15soC/Ln6d2Wv/JOFPzZXIAIFLp6B+i14KhxAfnq76ajt0EhYc5YPeX6W1xJkAdItcVT+JhKl1QZh44/qw==} 264 | cpu: [arm] 265 | os: [linux] 266 | 267 | '@rollup/rollup-linux-arm-musleabihf@4.53.3': 268 | resolution: {integrity: sha512-vTNlKq+N6CK/8UktsrFuc+/7NlEYVxgaEgRXVUVK258Z5ymho29skzW1sutgYjqNnquGwVUObAaxae8rZ6YMhg==} 269 | cpu: [arm] 270 | os: [linux] 271 | 272 | '@rollup/rollup-linux-arm64-gnu@4.53.3': 273 | resolution: {integrity: sha512-RGrFLWgMhSxRs/EWJMIFM1O5Mzuz3Xy3/mnxJp/5cVhZ2XoCAxJnmNsEyeMJtpK+wu0FJFWz+QF4mjCA7AUQ3w==} 274 | cpu: [arm64] 275 | os: [linux] 276 | 277 | '@rollup/rollup-linux-arm64-musl@4.53.3': 278 | resolution: {integrity: sha512-kASyvfBEWYPEwe0Qv4nfu6pNkITLTb32p4yTgzFCocHnJLAHs+9LjUu9ONIhvfT/5lv4YS5muBHyuV84epBo/A==} 279 | cpu: [arm64] 280 | os: [linux] 281 | 282 | '@rollup/rollup-linux-loong64-gnu@4.53.3': 283 | resolution: {integrity: sha512-JiuKcp2teLJwQ7vkJ95EwESWkNRFJD7TQgYmCnrPtlu50b4XvT5MOmurWNrCj3IFdyjBQ5p9vnrX4JM6I8OE7g==} 284 | cpu: [loong64] 285 | os: [linux] 286 | 287 | '@rollup/rollup-linux-ppc64-gnu@4.53.3': 288 | resolution: {integrity: sha512-EoGSa8nd6d3T7zLuqdojxC20oBfNT8nexBbB/rkxgKj5T5vhpAQKKnD+h3UkoMuTyXkP5jTjK/ccNRmQrPNDuw==} 289 | cpu: [ppc64] 290 | os: [linux] 291 | 292 | '@rollup/rollup-linux-riscv64-gnu@4.53.3': 293 | resolution: {integrity: sha512-4s+Wped2IHXHPnAEbIB0YWBv7SDohqxobiiPA1FIWZpX+w9o2i4LezzH/NkFUl8LRci/8udci6cLq+jJQlh+0g==} 294 | cpu: [riscv64] 295 | os: [linux] 296 | 297 | '@rollup/rollup-linux-riscv64-musl@4.53.3': 298 | resolution: {integrity: sha512-68k2g7+0vs2u9CxDt5ktXTngsxOQkSEV/xBbwlqYcUrAVh6P9EgMZvFsnHy4SEiUl46Xf0IObWVbMvPrr2gw8A==} 299 | cpu: [riscv64] 300 | os: [linux] 301 | 302 | '@rollup/rollup-linux-s390x-gnu@4.53.3': 303 | resolution: {integrity: sha512-VYsFMpULAz87ZW6BVYw3I6sWesGpsP9OPcyKe8ofdg9LHxSbRMd7zrVrr5xi/3kMZtpWL/wC+UIJWJYVX5uTKg==} 304 | cpu: [s390x] 305 | os: [linux] 306 | 307 | '@rollup/rollup-linux-x64-gnu@4.53.3': 308 | resolution: {integrity: sha512-3EhFi1FU6YL8HTUJZ51imGJWEX//ajQPfqWLI3BQq4TlvHy4X0MOr5q3D2Zof/ka0d5FNdPwZXm3Yyib/UEd+w==} 309 | cpu: [x64] 310 | os: [linux] 311 | 312 | '@rollup/rollup-linux-x64-musl@4.53.3': 313 | resolution: {integrity: sha512-eoROhjcc6HbZCJr+tvVT8X4fW3/5g/WkGvvmwz/88sDtSJzO7r/blvoBDgISDiCjDRZmHpwud7h+6Q9JxFwq1Q==} 314 | cpu: [x64] 315 | os: [linux] 316 | 317 | '@rollup/rollup-openharmony-arm64@4.53.3': 318 | resolution: {integrity: sha512-OueLAWgrNSPGAdUdIjSWXw+u/02BRTcnfw9PN41D2vq/JSEPnJnVuBgw18VkN8wcd4fjUs+jFHVM4t9+kBSNLw==} 319 | cpu: [arm64] 320 | os: [openharmony] 321 | 322 | '@rollup/rollup-win32-arm64-msvc@4.53.3': 323 | resolution: {integrity: sha512-GOFuKpsxR/whszbF/bzydebLiXIHSgsEUp6M0JI8dWvi+fFa1TD6YQa4aSZHtpmh2/uAlj/Dy+nmby3TJ3pkTw==} 324 | cpu: [arm64] 325 | os: [win32] 326 | 327 | '@rollup/rollup-win32-ia32-msvc@4.53.3': 328 | resolution: {integrity: sha512-iah+THLcBJdpfZ1TstDFbKNznlzoxa8fmnFYK4V67HvmuNYkVdAywJSoteUszvBQ9/HqN2+9AZghbajMsFT+oA==} 329 | cpu: [ia32] 330 | os: [win32] 331 | 332 | '@rollup/rollup-win32-x64-gnu@4.53.3': 333 | resolution: {integrity: sha512-J9QDiOIZlZLdcot5NXEepDkstocktoVjkaKUtqzgzpt2yWjGlbYiKyp05rWwk4nypbYUNoFAztEgixoLaSETkg==} 334 | cpu: [x64] 335 | os: [win32] 336 | 337 | '@rollup/rollup-win32-x64-msvc@4.53.3': 338 | resolution: {integrity: sha512-UhTd8u31dXadv0MopwGgNOBpUVROFKWVQgAg5N1ESyCz8AuBcMqm4AuTjrwgQKGDfoFuz02EuMRHQIw/frmYKQ==} 339 | cpu: [x64] 340 | os: [win32] 341 | 342 | '@types/cross-spawn@6.0.6': 343 | resolution: {integrity: sha512-fXRhhUkG4H3TQk5dBhQ7m/JDdSNHKwR2BBia62lhwEIq9xGiQKLxd6LymNhn47SjXhsUEPmxi+PKw2OkW4LLjA==} 344 | 345 | '@types/estree@1.0.8': 346 | resolution: {integrity: sha512-dWHzHa2WqEXI/O1E9OjrocMTKJl2mSrEolh1Iomrv6U+JuNwaHXsXx9bLu5gG7BUWFIN0skIQJQ/L1rIex4X6w==} 347 | 348 | '@types/node@24.10.1': 349 | resolution: {integrity: sha512-GNWcUTRBgIRJD5zj+Tq0fKOJ5XZajIiBroOF0yvj2bSU1WvNdYS/dn9UxwsujGW4JX06dnHyjV2y9rRaybH0iQ==} 350 | 351 | cross-spawn@7.0.6: 352 | resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} 353 | engines: {node: '>= 8'} 354 | 355 | esbuild@0.25.12: 356 | resolution: {integrity: sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==} 357 | engines: {node: '>=18'} 358 | hasBin: true 359 | 360 | fdir@6.5.0: 361 | resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} 362 | engines: {node: '>=12.0.0'} 363 | peerDependencies: 364 | picomatch: ^3 || ^4 365 | peerDependenciesMeta: 366 | picomatch: 367 | optional: true 368 | 369 | fsevents@2.3.3: 370 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 371 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 372 | os: [darwin] 373 | 374 | isexe@2.0.0: 375 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 376 | 377 | nanoid@3.3.11: 378 | resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} 379 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 380 | hasBin: true 381 | 382 | oxlint@1.29.0: 383 | resolution: {integrity: sha512-YqUVUhTYDqazV2qu3QSQn/H4Z1OP+fTnedgZWDk1/lDZxGfR0b1MqRVaEm3rRjBMLHP0zXlriIWUx+DD6UMaPA==} 384 | engines: {node: ^20.19.0 || >=22.12.0} 385 | hasBin: true 386 | peerDependencies: 387 | oxlint-tsgolint: '>=0.7.1' 388 | peerDependenciesMeta: 389 | oxlint-tsgolint: 390 | optional: true 391 | 392 | package-manager-detector@1.5.0: 393 | resolution: {integrity: sha512-uBj69dVlYe/+wxj8JOpr97XfsxH/eumMt6HqjNTmJDf/6NO9s+0uxeOneIz3AsPt2m6y9PqzDzd3ATcU17MNfw==} 394 | 395 | path-key@3.1.1: 396 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 397 | engines: {node: '>=8'} 398 | 399 | picocolors@1.1.1: 400 | resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} 401 | 402 | picomatch@4.0.3: 403 | resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} 404 | engines: {node: '>=12'} 405 | 406 | postcss@8.5.6: 407 | resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} 408 | engines: {node: ^10 || ^12 || >=14} 409 | 410 | rollup@4.53.3: 411 | resolution: {integrity: sha512-w8GmOxZfBmKknvdXU1sdM9NHcoQejwF/4mNgj2JuEEdRaHwwF12K7e9eXn1nLZ07ad+du76mkVsyeb2rKGllsA==} 412 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 413 | hasBin: true 414 | 415 | shebang-command@2.0.0: 416 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 417 | engines: {node: '>=8'} 418 | 419 | shebang-regex@3.0.0: 420 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 421 | engines: {node: '>=8'} 422 | 423 | source-map-js@1.2.1: 424 | resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} 425 | engines: {node: '>=0.10.0'} 426 | 427 | tinyglobby@0.2.15: 428 | resolution: {integrity: sha512-j2Zq4NyQYG5XMST4cbs02Ak8iJUdxRM0XI5QyxXuZOzKOINmWurp3smXu3y5wDcJrptwpSjgXHzIQxR0omXljQ==} 429 | engines: {node: '>=12.0.0'} 430 | 431 | typescript@5.9.3: 432 | resolution: {integrity: sha512-jl1vZzPDinLr9eUt3J/t7V6FgNEw9QjvBPdysz9KfQDD41fQrC2Y4vKQdiaUpFT4bXlb1RHhLpp8wtm6M5TgSw==} 433 | engines: {node: '>=14.17'} 434 | hasBin: true 435 | 436 | undici-types@7.16.0: 437 | resolution: {integrity: sha512-Zz+aZWSj8LE6zoxD+xrjh4VfkIG8Ya6LvYkZqtUQGJPZjYl53ypCaUwWqo7eI0x66KBGeRo+mlBEkMSeSZ38Nw==} 438 | 439 | vite@7.2.4: 440 | resolution: {integrity: sha512-NL8jTlbo0Tn4dUEXEsUg8KeyG/Lkmc4Fnzb8JXN/Ykm9G4HNImjtABMJgkQoVjOBN/j2WAwDTRytdqJbZsah7w==} 441 | engines: {node: ^20.19.0 || >=22.12.0} 442 | hasBin: true 443 | peerDependencies: 444 | '@types/node': ^20.19.0 || >=22.12.0 445 | jiti: '>=1.21.0' 446 | less: ^4.0.0 447 | lightningcss: ^1.21.0 448 | sass: ^1.70.0 449 | sass-embedded: ^1.70.0 450 | stylus: '>=0.54.8' 451 | sugarss: ^5.0.0 452 | terser: ^5.16.0 453 | tsx: ^4.8.1 454 | yaml: ^2.4.2 455 | peerDependenciesMeta: 456 | '@types/node': 457 | optional: true 458 | jiti: 459 | optional: true 460 | less: 461 | optional: true 462 | lightningcss: 463 | optional: true 464 | sass: 465 | optional: true 466 | sass-embedded: 467 | optional: true 468 | stylus: 469 | optional: true 470 | sugarss: 471 | optional: true 472 | terser: 473 | optional: true 474 | tsx: 475 | optional: true 476 | yaml: 477 | optional: true 478 | 479 | which@2.0.2: 480 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 481 | engines: {node: '>= 8'} 482 | hasBin: true 483 | 484 | snapshots: 485 | 486 | '@esbuild/aix-ppc64@0.25.12': 487 | optional: true 488 | 489 | '@esbuild/android-arm64@0.25.12': 490 | optional: true 491 | 492 | '@esbuild/android-arm@0.25.12': 493 | optional: true 494 | 495 | '@esbuild/android-x64@0.25.12': 496 | optional: true 497 | 498 | '@esbuild/darwin-arm64@0.25.12': 499 | optional: true 500 | 501 | '@esbuild/darwin-x64@0.25.12': 502 | optional: true 503 | 504 | '@esbuild/freebsd-arm64@0.25.12': 505 | optional: true 506 | 507 | '@esbuild/freebsd-x64@0.25.12': 508 | optional: true 509 | 510 | '@esbuild/linux-arm64@0.25.12': 511 | optional: true 512 | 513 | '@esbuild/linux-arm@0.25.12': 514 | optional: true 515 | 516 | '@esbuild/linux-ia32@0.25.12': 517 | optional: true 518 | 519 | '@esbuild/linux-loong64@0.25.12': 520 | optional: true 521 | 522 | '@esbuild/linux-mips64el@0.25.12': 523 | optional: true 524 | 525 | '@esbuild/linux-ppc64@0.25.12': 526 | optional: true 527 | 528 | '@esbuild/linux-riscv64@0.25.12': 529 | optional: true 530 | 531 | '@esbuild/linux-s390x@0.25.12': 532 | optional: true 533 | 534 | '@esbuild/linux-x64@0.25.12': 535 | optional: true 536 | 537 | '@esbuild/netbsd-arm64@0.25.12': 538 | optional: true 539 | 540 | '@esbuild/netbsd-x64@0.25.12': 541 | optional: true 542 | 543 | '@esbuild/openbsd-arm64@0.25.12': 544 | optional: true 545 | 546 | '@esbuild/openbsd-x64@0.25.12': 547 | optional: true 548 | 549 | '@esbuild/openharmony-arm64@0.25.12': 550 | optional: true 551 | 552 | '@esbuild/sunos-x64@0.25.12': 553 | optional: true 554 | 555 | '@esbuild/win32-arm64@0.25.12': 556 | optional: true 557 | 558 | '@esbuild/win32-ia32@0.25.12': 559 | optional: true 560 | 561 | '@esbuild/win32-x64@0.25.12': 562 | optional: true 563 | 564 | '@oxlint/darwin-arm64@1.29.0': 565 | optional: true 566 | 567 | '@oxlint/darwin-x64@1.29.0': 568 | optional: true 569 | 570 | '@oxlint/linux-arm64-gnu@1.29.0': 571 | optional: true 572 | 573 | '@oxlint/linux-arm64-musl@1.29.0': 574 | optional: true 575 | 576 | '@oxlint/linux-x64-gnu@1.29.0': 577 | optional: true 578 | 579 | '@oxlint/linux-x64-musl@1.29.0': 580 | optional: true 581 | 582 | '@oxlint/win32-arm64@1.29.0': 583 | optional: true 584 | 585 | '@oxlint/win32-x64@1.29.0': 586 | optional: true 587 | 588 | '@rollup/rollup-android-arm-eabi@4.53.3': 589 | optional: true 590 | 591 | '@rollup/rollup-android-arm64@4.53.3': 592 | optional: true 593 | 594 | '@rollup/rollup-darwin-arm64@4.53.3': 595 | optional: true 596 | 597 | '@rollup/rollup-darwin-x64@4.53.3': 598 | optional: true 599 | 600 | '@rollup/rollup-freebsd-arm64@4.53.3': 601 | optional: true 602 | 603 | '@rollup/rollup-freebsd-x64@4.53.3': 604 | optional: true 605 | 606 | '@rollup/rollup-linux-arm-gnueabihf@4.53.3': 607 | optional: true 608 | 609 | '@rollup/rollup-linux-arm-musleabihf@4.53.3': 610 | optional: true 611 | 612 | '@rollup/rollup-linux-arm64-gnu@4.53.3': 613 | optional: true 614 | 615 | '@rollup/rollup-linux-arm64-musl@4.53.3': 616 | optional: true 617 | 618 | '@rollup/rollup-linux-loong64-gnu@4.53.3': 619 | optional: true 620 | 621 | '@rollup/rollup-linux-ppc64-gnu@4.53.3': 622 | optional: true 623 | 624 | '@rollup/rollup-linux-riscv64-gnu@4.53.3': 625 | optional: true 626 | 627 | '@rollup/rollup-linux-riscv64-musl@4.53.3': 628 | optional: true 629 | 630 | '@rollup/rollup-linux-s390x-gnu@4.53.3': 631 | optional: true 632 | 633 | '@rollup/rollup-linux-x64-gnu@4.53.3': 634 | optional: true 635 | 636 | '@rollup/rollup-linux-x64-musl@4.53.3': 637 | optional: true 638 | 639 | '@rollup/rollup-openharmony-arm64@4.53.3': 640 | optional: true 641 | 642 | '@rollup/rollup-win32-arm64-msvc@4.53.3': 643 | optional: true 644 | 645 | '@rollup/rollup-win32-ia32-msvc@4.53.3': 646 | optional: true 647 | 648 | '@rollup/rollup-win32-x64-gnu@4.53.3': 649 | optional: true 650 | 651 | '@rollup/rollup-win32-x64-msvc@4.53.3': 652 | optional: true 653 | 654 | '@types/cross-spawn@6.0.6': 655 | dependencies: 656 | '@types/node': 24.10.1 657 | 658 | '@types/estree@1.0.8': {} 659 | 660 | '@types/node@24.10.1': 661 | dependencies: 662 | undici-types: 7.16.0 663 | 664 | cross-spawn@7.0.6: 665 | dependencies: 666 | path-key: 3.1.1 667 | shebang-command: 2.0.0 668 | which: 2.0.2 669 | 670 | esbuild@0.25.12: 671 | optionalDependencies: 672 | '@esbuild/aix-ppc64': 0.25.12 673 | '@esbuild/android-arm': 0.25.12 674 | '@esbuild/android-arm64': 0.25.12 675 | '@esbuild/android-x64': 0.25.12 676 | '@esbuild/darwin-arm64': 0.25.12 677 | '@esbuild/darwin-x64': 0.25.12 678 | '@esbuild/freebsd-arm64': 0.25.12 679 | '@esbuild/freebsd-x64': 0.25.12 680 | '@esbuild/linux-arm': 0.25.12 681 | '@esbuild/linux-arm64': 0.25.12 682 | '@esbuild/linux-ia32': 0.25.12 683 | '@esbuild/linux-loong64': 0.25.12 684 | '@esbuild/linux-mips64el': 0.25.12 685 | '@esbuild/linux-ppc64': 0.25.12 686 | '@esbuild/linux-riscv64': 0.25.12 687 | '@esbuild/linux-s390x': 0.25.12 688 | '@esbuild/linux-x64': 0.25.12 689 | '@esbuild/netbsd-arm64': 0.25.12 690 | '@esbuild/netbsd-x64': 0.25.12 691 | '@esbuild/openbsd-arm64': 0.25.12 692 | '@esbuild/openbsd-x64': 0.25.12 693 | '@esbuild/openharmony-arm64': 0.25.12 694 | '@esbuild/sunos-x64': 0.25.12 695 | '@esbuild/win32-arm64': 0.25.12 696 | '@esbuild/win32-ia32': 0.25.12 697 | '@esbuild/win32-x64': 0.25.12 698 | 699 | fdir@6.5.0(picomatch@4.0.3): 700 | optionalDependencies: 701 | picomatch: 4.0.3 702 | 703 | fsevents@2.3.3: 704 | optional: true 705 | 706 | isexe@2.0.0: {} 707 | 708 | nanoid@3.3.11: {} 709 | 710 | oxlint@1.29.0: 711 | optionalDependencies: 712 | '@oxlint/darwin-arm64': 1.29.0 713 | '@oxlint/darwin-x64': 1.29.0 714 | '@oxlint/linux-arm64-gnu': 1.29.0 715 | '@oxlint/linux-arm64-musl': 1.29.0 716 | '@oxlint/linux-x64-gnu': 1.29.0 717 | '@oxlint/linux-x64-musl': 1.29.0 718 | '@oxlint/win32-arm64': 1.29.0 719 | '@oxlint/win32-x64': 1.29.0 720 | 721 | package-manager-detector@1.5.0: {} 722 | 723 | path-key@3.1.1: {} 724 | 725 | picocolors@1.1.1: {} 726 | 727 | picomatch@4.0.3: {} 728 | 729 | postcss@8.5.6: 730 | dependencies: 731 | nanoid: 3.3.11 732 | picocolors: 1.1.1 733 | source-map-js: 1.2.1 734 | 735 | rollup@4.53.3: 736 | dependencies: 737 | '@types/estree': 1.0.8 738 | optionalDependencies: 739 | '@rollup/rollup-android-arm-eabi': 4.53.3 740 | '@rollup/rollup-android-arm64': 4.53.3 741 | '@rollup/rollup-darwin-arm64': 4.53.3 742 | '@rollup/rollup-darwin-x64': 4.53.3 743 | '@rollup/rollup-freebsd-arm64': 4.53.3 744 | '@rollup/rollup-freebsd-x64': 4.53.3 745 | '@rollup/rollup-linux-arm-gnueabihf': 4.53.3 746 | '@rollup/rollup-linux-arm-musleabihf': 4.53.3 747 | '@rollup/rollup-linux-arm64-gnu': 4.53.3 748 | '@rollup/rollup-linux-arm64-musl': 4.53.3 749 | '@rollup/rollup-linux-loong64-gnu': 4.53.3 750 | '@rollup/rollup-linux-ppc64-gnu': 4.53.3 751 | '@rollup/rollup-linux-riscv64-gnu': 4.53.3 752 | '@rollup/rollup-linux-riscv64-musl': 4.53.3 753 | '@rollup/rollup-linux-s390x-gnu': 4.53.3 754 | '@rollup/rollup-linux-x64-gnu': 4.53.3 755 | '@rollup/rollup-linux-x64-musl': 4.53.3 756 | '@rollup/rollup-openharmony-arm64': 4.53.3 757 | '@rollup/rollup-win32-arm64-msvc': 4.53.3 758 | '@rollup/rollup-win32-ia32-msvc': 4.53.3 759 | '@rollup/rollup-win32-x64-gnu': 4.53.3 760 | '@rollup/rollup-win32-x64-msvc': 4.53.3 761 | fsevents: 2.3.3 762 | 763 | shebang-command@2.0.0: 764 | dependencies: 765 | shebang-regex: 3.0.0 766 | 767 | shebang-regex@3.0.0: {} 768 | 769 | source-map-js@1.2.1: {} 770 | 771 | tinyglobby@0.2.15: 772 | dependencies: 773 | fdir: 6.5.0(picomatch@4.0.3) 774 | picomatch: 4.0.3 775 | 776 | typescript@5.9.3: {} 777 | 778 | undici-types@7.16.0: {} 779 | 780 | vite@7.2.4(@types/node@24.10.1): 781 | dependencies: 782 | esbuild: 0.25.12 783 | fdir: 6.5.0(picomatch@4.0.3) 784 | picomatch: 4.0.3 785 | postcss: 8.5.6 786 | rollup: 4.53.3 787 | tinyglobby: 0.2.15 788 | optionalDependencies: 789 | '@types/node': 24.10.1 790 | fsevents: 2.3.3 791 | 792 | which@2.0.2: 793 | dependencies: 794 | isexe: 2.0.0 795 | --------------------------------------------------------------------------------