├── .eslintrc ├── .github └── workflows │ └── ci.yaml ├── .gitignore ├── .npmignore ├── .prettierrc ├── LICENSE ├── README.md ├── __test__ ├── bin.spec.ts ├── example.graphql └── index.spec.ts ├── bin └── cli.js ├── package.json ├── pnpm-lock.yaml ├── src └── index.ts ├── tsconfig.json └── vitest.config.ts /.eslintrc: -------------------------------------------------------------------------------- 1 | { 2 | "parser": "@typescript-eslint/parser", 3 | "extends": ["plugin:@typescript-eslint/recommended", "prettier"], 4 | "plugins": ["@typescript-eslint", "prettier"], 5 | } 6 | -------------------------------------------------------------------------------- /.github/workflows/ci.yaml: -------------------------------------------------------------------------------- 1 | name: ci 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | 9 | concurrency: 10 | group: ci-${{ github.ref }} 11 | cancel-in-progress: true 12 | 13 | jobs: 14 | lint: 15 | runs-on: ubuntu-latest 16 | steps: 17 | - uses: actions/checkout@v4 18 | - uses: actions/setup-node@v4 19 | with: 20 | node-version: 20 21 | - uses: pnpm/action-setup@v2 22 | with: 23 | version: latest 24 | - run: pnpm install 25 | - run: pnpm run lint 26 | test: 27 | runs-on: ubuntu-latest 28 | steps: 29 | - uses: actions/checkout@v4 30 | - uses: actions/setup-node@v4 31 | with: 32 | node-version: 20 33 | - uses: pnpm/action-setup@v2 34 | with: 35 | version: latest 36 | - run: pnpm install 37 | - run: pnpm run build 38 | - run: pnpm test 39 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | __test__/example.min.graphql 2 | dist 3 | node_modules 4 | -------------------------------------------------------------------------------- /.npmignore: -------------------------------------------------------------------------------- 1 | __test__ 2 | .eslintrc 3 | .github 4 | .prettierrc 5 | vitest.config.ts 6 | -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "singleQuote": true 3 | } 4 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright 2020 Drew Powers 2 | 3 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 4 | 5 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 6 | 7 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 8 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![version (scoped)](https://img.shields.io/npm/v/gqlmin.svg)](https://www.npmjs.com/package/gqlmin) 2 | [![minzip](https://badgen.net/bundlephobia/minzip/gqlmin)](https://bundlephobia.com/gqlmin) 3 | [![codecov](https://codecov.io/gh/drwpow/gqlmin/branch/master/graph/badge.svg)](https://codecov.io/gh/drwpow/gqlmin) 4 | 5 | # 🗜 gqlmin 6 | 7 | `< 1 kB` GraphQL query minifier (`3.4 kB` (gzip) if you include its only dependency, [Moo][moo]). 8 | 9 | This library removes all insignificant whitespace within a GraphQL query, as well as comments. 10 | 11 | ## Usage 12 | 13 | ### ES Modules 14 | 15 | ```bash 16 | npm install gqlmin 17 | ``` 18 | 19 | ```js 20 | import gqlmin from 'gqlmin'; 21 | 22 | const query = ` 23 | query allProducts { 24 | products { 25 | name 26 | price 27 | image { 28 | medium 29 | large 30 | } 31 | } 32 | } 33 | `; 34 | 35 | const minified = gqlmin(query); 36 | console.log(minified); 37 | // query allProducts{products{name price … 38 | ``` 39 | 40 | ### CLI 41 | 42 | ``` 43 | npx gqlmin ./query.graphql -o ./query.min.graphql 44 | ``` 45 | 46 | ## FAQ 47 | 48 | ### Why do I need this? 49 | 50 | If you don’t know if you need this, you probably don’t. In many apps, the whitespace within graphql 51 | queries isn’t significant. However, there are 2 scenarios where this can have big benefits: 52 | 53 | - **You have a LOT of GraphQL** such that stripping out whitespace actually does result in 54 | significant size reduction of your app 55 | - **You are using `GET` requests and need better caching.** An underused feature of many GraphQL 56 | servers is the ability to send `GET` rather than `POST` requests for queries (mutations don’t 57 | support this). Minifying your GraphQL queries here can have some big benefits in reducing 58 | unnecessary URL length, as well as deduplicating caches where queries differ by whitespace only. 59 | 60 | This library is useful because it can run at runtime (ES Modules) or as a build step (CLI). 61 | 62 | ### Are there any drawbacks? 63 | 64 | Because the goals of this library are **small file size** and **performance**, it’s important to 65 | note **this doesn’t validate GraphQL queries**. This library assumes you have already done that. 66 | 67 | This means that if you minify a malformed GraphQL query, it won’t err; it will just silently output 68 | the wrong thing. It’s assumed if you have a bad GraphQL query, your problems are probably bigger 69 | than minification. Either way, validation won’t be a part of this project because it would add 70 | weight. 71 | 72 | [moo]: https://github.com/no-context/moo 73 | -------------------------------------------------------------------------------- /__test__/bin.spec.ts: -------------------------------------------------------------------------------- 1 | import { execa } from 'execa'; 2 | import fs from 'node:fs'; 3 | import { fileURLToPath } from 'node:url'; 4 | import { describe, expect, it } from 'vitest'; 5 | 6 | describe('gqlmin bin', () => { 7 | it('basic', async () => { 8 | const cwd = fileURLToPath(new URL('../', import.meta.url)); 9 | await execa( 10 | 'node', 11 | [ 12 | './bin/cli.js', 13 | './__test__/example.graphql', 14 | '-o', 15 | './__test__/example.min.graphql', 16 | ], 17 | { cwd }, 18 | ); 19 | 20 | expect( 21 | fs.readFileSync( 22 | new URL('./example.min.graphql', import.meta.url), 23 | 'utf8', 24 | ), 25 | ).toBe('query allProducts{products{name price tags image{medium large}}}'); 26 | }); 27 | }); 28 | -------------------------------------------------------------------------------- /__test__/example.graphql: -------------------------------------------------------------------------------- 1 | query allProducts { 2 | products { 3 | name 4 | price 5 | tags 6 | image { 7 | medium 8 | large 9 | } 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /__test__/index.spec.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, it } from 'vitest'; 2 | import minify from '../src/index'; 3 | 4 | describe('minify function', () => { 5 | describe('minification', () => { 6 | it('basic', () => { 7 | const query = ` 8 | query LIST_PRODUCTS { 9 | products( first: $first, after: $after ) { 10 | label 11 | displayName 12 | logo 13 | plans( first: $firstPlans ) { 14 | free 15 | } 16 | } 17 | } 18 | `; 19 | const minified = `query LIST_PRODUCTS{products(first:$first,after:$after){label displayName logo plans(first:$firstPlans){free}}}`; 20 | expect(minify(query)).toBe(minified); 21 | }); 22 | 23 | it('string', () => { 24 | const query = ` 25 | query GET_PRODUCT { 26 | product (displayName: "Two Spaces") { 27 | label 28 | displayName 29 | logo 30 | } 31 | } 32 | `; 33 | const minified = `query GET_PRODUCT{product(displayName:"Two Spaces"){label displayName logo}}`; 34 | expect(minify(query)).toBe(minified); 35 | }); 36 | 37 | it('removes comments', () => { 38 | const query = ` 39 | query GET_PRODUCT { 40 | # TODO: fix this 41 | product(displayName: "Timber Logging") { 42 | label # Also rename this 43 | displayName 44 | logo 45 | } 46 | } 47 | `; 48 | const minified = `query GET_PRODUCT{product(displayName:"Timber Logging"){label displayName logo}}`; 49 | expect(minify(query)).toBe(minified); 50 | }); 51 | 52 | it('removes descriptions', () => { 53 | const query = ` 54 | query GET_PRODUCT { 55 | """single line description""" 56 | product(displayName: "Timber Logging") { 57 | label 58 | """ 59 | multi 60 | line 61 | description 62 | """ 63 | displayName 64 | logo 65 | } 66 | } 67 | `; 68 | const minified = `query GET_PRODUCT{product(displayName:"Timber Logging"){label displayName logo}}`; 69 | expect(minify(query)).toBe(minified); 70 | }); 71 | 72 | it('preserves multiline queries', () => { 73 | const query = ` 74 | query GET_PRODUCT { 75 | product(valueHTML: """ 76 | multi 77 | line 78 | query""") { 79 | label 80 | displayName 81 | logo 82 | } 83 | } 84 | `; 85 | const minified = `query GET_PRODUCT{product(valueHTML:""" 86 | multi 87 | line 88 | query"""){label displayName logo}}`; 89 | expect(minify(query)).toBe(minified); 90 | }); 91 | }); 92 | }); 93 | -------------------------------------------------------------------------------- /bin/cli.js: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env node 2 | 3 | import fs from 'node:fs'; 4 | import chalk from 'chalk'; 5 | import gqlmin from '../dist/index.js'; 6 | import { fileURLToPath } from 'node:url'; 7 | 8 | const [, , ...args] = process.argv; 9 | 10 | if (args.includes('--help')) { 11 | console.log(`Usage 12 | $ gqlmin [input] [options] 13 | 14 | Options 15 | --help display this 16 | --output, -o specify output file 17 | `); 18 | process.exit(0); 19 | } 20 | 21 | let query = args[0] || stdin; 22 | 23 | // if input is a file, load it (otherwise assume inline) 24 | if (fs.existsSync(new URL(query, `file://${process.cwd()}/`))) { 25 | query = fs.readFileSync(new URL(query, `file://${process.cwd()}/`), 'utf8'); 26 | } 27 | 28 | const min = gqlmin(query); 29 | 30 | let output; 31 | for (const outputI of [args.indexOf('--output'), args.indexOf('-o')]) { 32 | if (outputI === -1 || !args[outputI + 1]) { 33 | continue; 34 | } 35 | output = new URL(args[outputI + 1], `file://${process.cwd()}/`); 36 | } 37 | 38 | // write to file if specifying output 39 | if (output) { 40 | const timeStart = process.hrtime(); 41 | fs.mkdirSync(new URL('.', output), { recursive: true }); 42 | fs.writeFileSync(output, min); 43 | 44 | const timeEnd = process.hrtime(timeStart); 45 | const time = timeEnd[0] + Math.round(timeEnd[1] / 1e6); 46 | console.log( 47 | chalk.green( 48 | `🚀 ${args[0]} -> ${chalk.bold(fileURLToPath(output))} [${time}ms]`, 49 | ), 50 | ); 51 | process.exit(0); 52 | } else { 53 | process.stdout(min); 54 | } 55 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "gqlmin", 3 | "version": "0.2.1", 4 | "description": "< 1 kB GraphQL query minifier", 5 | "type": "module", 6 | "repository": { 7 | "type": "git", 8 | "url": "git+https://github.com/drwpow/gqlmin.git" 9 | }, 10 | "keywords": [ 11 | "graphql", 12 | "gql", 13 | "query", 14 | "minify", 15 | "esm", 16 | "es", 17 | "modules" 18 | ], 19 | "bin": { 20 | "gqlmin": "bin/cli.js" 21 | }, 22 | "author": { 23 | "email": "drew@pow.rs", 24 | "name": "Drew Powers" 25 | }, 26 | "license": "MIT", 27 | "main": "./dist/index.js", 28 | "scripts": { 29 | "build": "pnpm run \"/^build:.*/\"", 30 | "build:ts": "tsc", 31 | "lint": "eslint --ext .js,.ts,.tsx src", 32 | "test": "vitest run", 33 | "version": "pnpm run build" 34 | }, 35 | "dependencies": { 36 | "@types/moo": "^0.5.9", 37 | "moo": "^0.5.2" 38 | }, 39 | "devDependencies": { 40 | "@types/node": "^20.11.30", 41 | "@typescript-eslint/eslint-plugin": "^7.3.1", 42 | "@typescript-eslint/parser": "^7.3.1", 43 | "chalk": "^5.3.0", 44 | "eslint": "^8.57.0", 45 | "eslint-config-prettier": "^9.1.0", 46 | "eslint-plugin-prettier": "^5.1.3", 47 | "execa": "^8.0.1", 48 | "prettier": "^3.2.5", 49 | "typescript": "^5.4.3", 50 | "vitest": "^1.4.0" 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '6.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | dependencies: 8 | '@types/moo': 9 | specifier: ^0.5.9 10 | version: 0.5.9 11 | moo: 12 | specifier: ^0.5.2 13 | version: 0.5.2 14 | 15 | devDependencies: 16 | '@types/node': 17 | specifier: ^20.11.30 18 | version: 20.11.30 19 | '@typescript-eslint/eslint-plugin': 20 | specifier: ^7.3.1 21 | version: 7.3.1(@typescript-eslint/parser@7.3.1)(eslint@8.57.0)(typescript@5.4.3) 22 | '@typescript-eslint/parser': 23 | specifier: ^7.3.1 24 | version: 7.3.1(eslint@8.57.0)(typescript@5.4.3) 25 | chalk: 26 | specifier: ^5.3.0 27 | version: 5.3.0 28 | eslint: 29 | specifier: ^8.57.0 30 | version: 8.57.0 31 | eslint-config-prettier: 32 | specifier: ^9.1.0 33 | version: 9.1.0(eslint@8.57.0) 34 | eslint-plugin-prettier: 35 | specifier: ^5.1.3 36 | version: 5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5) 37 | execa: 38 | specifier: ^8.0.1 39 | version: 8.0.1 40 | prettier: 41 | specifier: ^3.2.5 42 | version: 3.2.5 43 | typescript: 44 | specifier: ^5.4.3 45 | version: 5.4.3 46 | vitest: 47 | specifier: ^1.4.0 48 | version: 1.4.0(@types/node@20.11.30) 49 | 50 | packages: 51 | 52 | /@aashutoshrathi/word-wrap@1.2.6: 53 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} 54 | engines: {node: '>=0.10.0'} 55 | dev: true 56 | 57 | /@esbuild/aix-ppc64@0.20.2: 58 | resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} 59 | engines: {node: '>=12'} 60 | cpu: [ppc64] 61 | os: [aix] 62 | requiresBuild: true 63 | dev: true 64 | optional: true 65 | 66 | /@esbuild/android-arm64@0.20.2: 67 | resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} 68 | engines: {node: '>=12'} 69 | cpu: [arm64] 70 | os: [android] 71 | requiresBuild: true 72 | dev: true 73 | optional: true 74 | 75 | /@esbuild/android-arm@0.20.2: 76 | resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} 77 | engines: {node: '>=12'} 78 | cpu: [arm] 79 | os: [android] 80 | requiresBuild: true 81 | dev: true 82 | optional: true 83 | 84 | /@esbuild/android-x64@0.20.2: 85 | resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} 86 | engines: {node: '>=12'} 87 | cpu: [x64] 88 | os: [android] 89 | requiresBuild: true 90 | dev: true 91 | optional: true 92 | 93 | /@esbuild/darwin-arm64@0.20.2: 94 | resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} 95 | engines: {node: '>=12'} 96 | cpu: [arm64] 97 | os: [darwin] 98 | requiresBuild: true 99 | dev: true 100 | optional: true 101 | 102 | /@esbuild/darwin-x64@0.20.2: 103 | resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} 104 | engines: {node: '>=12'} 105 | cpu: [x64] 106 | os: [darwin] 107 | requiresBuild: true 108 | dev: true 109 | optional: true 110 | 111 | /@esbuild/freebsd-arm64@0.20.2: 112 | resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} 113 | engines: {node: '>=12'} 114 | cpu: [arm64] 115 | os: [freebsd] 116 | requiresBuild: true 117 | dev: true 118 | optional: true 119 | 120 | /@esbuild/freebsd-x64@0.20.2: 121 | resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} 122 | engines: {node: '>=12'} 123 | cpu: [x64] 124 | os: [freebsd] 125 | requiresBuild: true 126 | dev: true 127 | optional: true 128 | 129 | /@esbuild/linux-arm64@0.20.2: 130 | resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} 131 | engines: {node: '>=12'} 132 | cpu: [arm64] 133 | os: [linux] 134 | requiresBuild: true 135 | dev: true 136 | optional: true 137 | 138 | /@esbuild/linux-arm@0.20.2: 139 | resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} 140 | engines: {node: '>=12'} 141 | cpu: [arm] 142 | os: [linux] 143 | requiresBuild: true 144 | dev: true 145 | optional: true 146 | 147 | /@esbuild/linux-ia32@0.20.2: 148 | resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} 149 | engines: {node: '>=12'} 150 | cpu: [ia32] 151 | os: [linux] 152 | requiresBuild: true 153 | dev: true 154 | optional: true 155 | 156 | /@esbuild/linux-loong64@0.20.2: 157 | resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} 158 | engines: {node: '>=12'} 159 | cpu: [loong64] 160 | os: [linux] 161 | requiresBuild: true 162 | dev: true 163 | optional: true 164 | 165 | /@esbuild/linux-mips64el@0.20.2: 166 | resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} 167 | engines: {node: '>=12'} 168 | cpu: [mips64el] 169 | os: [linux] 170 | requiresBuild: true 171 | dev: true 172 | optional: true 173 | 174 | /@esbuild/linux-ppc64@0.20.2: 175 | resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} 176 | engines: {node: '>=12'} 177 | cpu: [ppc64] 178 | os: [linux] 179 | requiresBuild: true 180 | dev: true 181 | optional: true 182 | 183 | /@esbuild/linux-riscv64@0.20.2: 184 | resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} 185 | engines: {node: '>=12'} 186 | cpu: [riscv64] 187 | os: [linux] 188 | requiresBuild: true 189 | dev: true 190 | optional: true 191 | 192 | /@esbuild/linux-s390x@0.20.2: 193 | resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} 194 | engines: {node: '>=12'} 195 | cpu: [s390x] 196 | os: [linux] 197 | requiresBuild: true 198 | dev: true 199 | optional: true 200 | 201 | /@esbuild/linux-x64@0.20.2: 202 | resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} 203 | engines: {node: '>=12'} 204 | cpu: [x64] 205 | os: [linux] 206 | requiresBuild: true 207 | dev: true 208 | optional: true 209 | 210 | /@esbuild/netbsd-x64@0.20.2: 211 | resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} 212 | engines: {node: '>=12'} 213 | cpu: [x64] 214 | os: [netbsd] 215 | requiresBuild: true 216 | dev: true 217 | optional: true 218 | 219 | /@esbuild/openbsd-x64@0.20.2: 220 | resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} 221 | engines: {node: '>=12'} 222 | cpu: [x64] 223 | os: [openbsd] 224 | requiresBuild: true 225 | dev: true 226 | optional: true 227 | 228 | /@esbuild/sunos-x64@0.20.2: 229 | resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} 230 | engines: {node: '>=12'} 231 | cpu: [x64] 232 | os: [sunos] 233 | requiresBuild: true 234 | dev: true 235 | optional: true 236 | 237 | /@esbuild/win32-arm64@0.20.2: 238 | resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} 239 | engines: {node: '>=12'} 240 | cpu: [arm64] 241 | os: [win32] 242 | requiresBuild: true 243 | dev: true 244 | optional: true 245 | 246 | /@esbuild/win32-ia32@0.20.2: 247 | resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} 248 | engines: {node: '>=12'} 249 | cpu: [ia32] 250 | os: [win32] 251 | requiresBuild: true 252 | dev: true 253 | optional: true 254 | 255 | /@esbuild/win32-x64@0.20.2: 256 | resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} 257 | engines: {node: '>=12'} 258 | cpu: [x64] 259 | os: [win32] 260 | requiresBuild: true 261 | dev: true 262 | optional: true 263 | 264 | /@eslint-community/eslint-utils@4.4.0(eslint@8.57.0): 265 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 266 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 267 | peerDependencies: 268 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 269 | dependencies: 270 | eslint: 8.57.0 271 | eslint-visitor-keys: 3.4.3 272 | dev: true 273 | 274 | /@eslint-community/regexpp@4.10.0: 275 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 276 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 277 | dev: true 278 | 279 | /@eslint/eslintrc@2.1.4: 280 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 281 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 282 | dependencies: 283 | ajv: 6.12.6 284 | debug: 4.3.4 285 | espree: 9.6.1 286 | globals: 13.24.0 287 | ignore: 5.3.1 288 | import-fresh: 3.3.0 289 | js-yaml: 4.1.0 290 | minimatch: 3.1.2 291 | strip-json-comments: 3.1.1 292 | transitivePeerDependencies: 293 | - supports-color 294 | dev: true 295 | 296 | /@eslint/js@8.57.0: 297 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} 298 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 299 | dev: true 300 | 301 | /@humanwhocodes/config-array@0.11.14: 302 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 303 | engines: {node: '>=10.10.0'} 304 | dependencies: 305 | '@humanwhocodes/object-schema': 2.0.2 306 | debug: 4.3.4 307 | minimatch: 3.1.2 308 | transitivePeerDependencies: 309 | - supports-color 310 | dev: true 311 | 312 | /@humanwhocodes/module-importer@1.0.1: 313 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 314 | engines: {node: '>=12.22'} 315 | dev: true 316 | 317 | /@humanwhocodes/object-schema@2.0.2: 318 | resolution: {integrity: sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==} 319 | dev: true 320 | 321 | /@jest/schemas@29.6.3: 322 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 323 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 324 | dependencies: 325 | '@sinclair/typebox': 0.27.8 326 | dev: true 327 | 328 | /@jridgewell/sourcemap-codec@1.4.15: 329 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 330 | dev: true 331 | 332 | /@nodelib/fs.scandir@2.1.5: 333 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 334 | engines: {node: '>= 8'} 335 | dependencies: 336 | '@nodelib/fs.stat': 2.0.5 337 | run-parallel: 1.2.0 338 | dev: true 339 | 340 | /@nodelib/fs.stat@2.0.5: 341 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 342 | engines: {node: '>= 8'} 343 | dev: true 344 | 345 | /@nodelib/fs.walk@1.2.8: 346 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 347 | engines: {node: '>= 8'} 348 | dependencies: 349 | '@nodelib/fs.scandir': 2.1.5 350 | fastq: 1.17.1 351 | dev: true 352 | 353 | /@pkgr/core@0.1.1: 354 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 355 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 356 | dev: true 357 | 358 | /@rollup/rollup-android-arm-eabi@4.13.0: 359 | resolution: {integrity: sha512-5ZYPOuaAqEH/W3gYsRkxQATBW3Ii1MfaT4EQstTnLKViLi2gLSQmlmtTpGucNP3sXEpOiI5tdGhjdE111ekyEg==} 360 | cpu: [arm] 361 | os: [android] 362 | requiresBuild: true 363 | dev: true 364 | optional: true 365 | 366 | /@rollup/rollup-android-arm64@4.13.0: 367 | resolution: {integrity: sha512-BSbaCmn8ZadK3UAQdlauSvtaJjhlDEjS5hEVVIN3A4bbl3X+otyf/kOJV08bYiRxfejP3DXFzO2jz3G20107+Q==} 368 | cpu: [arm64] 369 | os: [android] 370 | requiresBuild: true 371 | dev: true 372 | optional: true 373 | 374 | /@rollup/rollup-darwin-arm64@4.13.0: 375 | resolution: {integrity: sha512-Ovf2evVaP6sW5Ut0GHyUSOqA6tVKfrTHddtmxGQc1CTQa1Cw3/KMCDEEICZBbyppcwnhMwcDce9ZRxdWRpVd6g==} 376 | cpu: [arm64] 377 | os: [darwin] 378 | requiresBuild: true 379 | dev: true 380 | optional: true 381 | 382 | /@rollup/rollup-darwin-x64@4.13.0: 383 | resolution: {integrity: sha512-U+Jcxm89UTK592vZ2J9st9ajRv/hrwHdnvyuJpa5A2ngGSVHypigidkQJP+YiGL6JODiUeMzkqQzbCG3At81Gg==} 384 | cpu: [x64] 385 | os: [darwin] 386 | requiresBuild: true 387 | dev: true 388 | optional: true 389 | 390 | /@rollup/rollup-linux-arm-gnueabihf@4.13.0: 391 | resolution: {integrity: sha512-8wZidaUJUTIR5T4vRS22VkSMOVooG0F4N+JSwQXWSRiC6yfEsFMLTYRFHvby5mFFuExHa/yAp9juSphQQJAijQ==} 392 | cpu: [arm] 393 | os: [linux] 394 | requiresBuild: true 395 | dev: true 396 | optional: true 397 | 398 | /@rollup/rollup-linux-arm64-gnu@4.13.0: 399 | resolution: {integrity: sha512-Iu0Kno1vrD7zHQDxOmvweqLkAzjxEVqNhUIXBsZ8hu8Oak7/5VTPrxOEZXYC1nmrBVJp0ZcL2E7lSuuOVaE3+w==} 400 | cpu: [arm64] 401 | os: [linux] 402 | requiresBuild: true 403 | dev: true 404 | optional: true 405 | 406 | /@rollup/rollup-linux-arm64-musl@4.13.0: 407 | resolution: {integrity: sha512-C31QrW47llgVyrRjIwiOwsHFcaIwmkKi3PCroQY5aVq4H0A5v/vVVAtFsI1nfBngtoRpeREvZOkIhmRwUKkAdw==} 408 | cpu: [arm64] 409 | os: [linux] 410 | requiresBuild: true 411 | dev: true 412 | optional: true 413 | 414 | /@rollup/rollup-linux-riscv64-gnu@4.13.0: 415 | resolution: {integrity: sha512-Oq90dtMHvthFOPMl7pt7KmxzX7E71AfyIhh+cPhLY9oko97Zf2C9tt/XJD4RgxhaGeAraAXDtqxvKE1y/j35lA==} 416 | cpu: [riscv64] 417 | os: [linux] 418 | requiresBuild: true 419 | dev: true 420 | optional: true 421 | 422 | /@rollup/rollup-linux-x64-gnu@4.13.0: 423 | resolution: {integrity: sha512-yUD/8wMffnTKuiIsl6xU+4IA8UNhQ/f1sAnQebmE/lyQ8abjsVyDkyRkWop0kdMhKMprpNIhPmYlCxgHrPoXoA==} 424 | cpu: [x64] 425 | os: [linux] 426 | requiresBuild: true 427 | dev: true 428 | optional: true 429 | 430 | /@rollup/rollup-linux-x64-musl@4.13.0: 431 | resolution: {integrity: sha512-9RyNqoFNdF0vu/qqX63fKotBh43fJQeYC98hCaf89DYQpv+xu0D8QFSOS0biA7cGuqJFOc1bJ+m2rhhsKcw1hw==} 432 | cpu: [x64] 433 | os: [linux] 434 | requiresBuild: true 435 | dev: true 436 | optional: true 437 | 438 | /@rollup/rollup-win32-arm64-msvc@4.13.0: 439 | resolution: {integrity: sha512-46ue8ymtm/5PUU6pCvjlic0z82qWkxv54GTJZgHrQUuZnVH+tvvSP0LsozIDsCBFO4VjJ13N68wqrKSeScUKdA==} 440 | cpu: [arm64] 441 | os: [win32] 442 | requiresBuild: true 443 | dev: true 444 | optional: true 445 | 446 | /@rollup/rollup-win32-ia32-msvc@4.13.0: 447 | resolution: {integrity: sha512-P5/MqLdLSlqxbeuJ3YDeX37srC8mCflSyTrUsgbU1c/U9j6l2g2GiIdYaGD9QjdMQPMSgYm7hgg0551wHyIluw==} 448 | cpu: [ia32] 449 | os: [win32] 450 | requiresBuild: true 451 | dev: true 452 | optional: true 453 | 454 | /@rollup/rollup-win32-x64-msvc@4.13.0: 455 | resolution: {integrity: sha512-UKXUQNbO3DOhzLRwHSpa0HnhhCgNODvfoPWv2FCXme8N/ANFfhIPMGuOT+QuKd16+B5yxZ0HdpNlqPvTMS1qfw==} 456 | cpu: [x64] 457 | os: [win32] 458 | requiresBuild: true 459 | dev: true 460 | optional: true 461 | 462 | /@sinclair/typebox@0.27.8: 463 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 464 | dev: true 465 | 466 | /@types/estree@1.0.5: 467 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 468 | dev: true 469 | 470 | /@types/json-schema@7.0.15: 471 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 472 | dev: true 473 | 474 | /@types/moo@0.5.9: 475 | resolution: {integrity: sha512-ZsFVecFi66jGQ6L41TonEaBhsIVeVftTz6iQKWTctzacHhzYHWvv9S0IyAJi4BhN7vb9qCQ3+kpStP2vbZqmDg==} 476 | dev: false 477 | 478 | /@types/node@20.11.30: 479 | resolution: {integrity: sha512-dHM6ZxwlmuZaRmUPfv1p+KrdD1Dci04FbdEm/9wEMouFqxYoFl5aMkt0VMAUtYRQDyYvD41WJLukhq/ha3YuTw==} 480 | dependencies: 481 | undici-types: 5.26.5 482 | dev: true 483 | 484 | /@types/semver@7.5.8: 485 | resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} 486 | dev: true 487 | 488 | /@typescript-eslint/eslint-plugin@7.3.1(@typescript-eslint/parser@7.3.1)(eslint@8.57.0)(typescript@5.4.3): 489 | resolution: {integrity: sha512-STEDMVQGww5lhCuNXVSQfbfuNII5E08QWkvAw5Qwf+bj2WT+JkG1uc+5/vXA3AOYMDHVOSpL+9rcbEUiHIm2dw==} 490 | engines: {node: ^18.18.0 || >=20.0.0} 491 | peerDependencies: 492 | '@typescript-eslint/parser': ^7.0.0 493 | eslint: ^8.56.0 494 | typescript: '*' 495 | peerDependenciesMeta: 496 | typescript: 497 | optional: true 498 | dependencies: 499 | '@eslint-community/regexpp': 4.10.0 500 | '@typescript-eslint/parser': 7.3.1(eslint@8.57.0)(typescript@5.4.3) 501 | '@typescript-eslint/scope-manager': 7.3.1 502 | '@typescript-eslint/type-utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) 503 | '@typescript-eslint/utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) 504 | '@typescript-eslint/visitor-keys': 7.3.1 505 | debug: 4.3.4 506 | eslint: 8.57.0 507 | graphemer: 1.4.0 508 | ignore: 5.3.1 509 | natural-compare: 1.4.0 510 | semver: 7.6.0 511 | ts-api-utils: 1.3.0(typescript@5.4.3) 512 | typescript: 5.4.3 513 | transitivePeerDependencies: 514 | - supports-color 515 | dev: true 516 | 517 | /@typescript-eslint/parser@7.3.1(eslint@8.57.0)(typescript@5.4.3): 518 | resolution: {integrity: sha512-Rq49+pq7viTRCH48XAbTA+wdLRrB/3sRq4Lpk0oGDm0VmnjBrAOVXH/Laalmwsv2VpekiEfVFwJYVk6/e8uvQw==} 519 | engines: {node: ^18.18.0 || >=20.0.0} 520 | peerDependencies: 521 | eslint: ^8.56.0 522 | typescript: '*' 523 | peerDependenciesMeta: 524 | typescript: 525 | optional: true 526 | dependencies: 527 | '@typescript-eslint/scope-manager': 7.3.1 528 | '@typescript-eslint/types': 7.3.1 529 | '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.3) 530 | '@typescript-eslint/visitor-keys': 7.3.1 531 | debug: 4.3.4 532 | eslint: 8.57.0 533 | typescript: 5.4.3 534 | transitivePeerDependencies: 535 | - supports-color 536 | dev: true 537 | 538 | /@typescript-eslint/scope-manager@7.3.1: 539 | resolution: {integrity: sha512-fVS6fPxldsKY2nFvyT7IP78UO1/I2huG+AYu5AMjCT9wtl6JFiDnsv4uad4jQ0GTFzcUV5HShVeN96/17bTBag==} 540 | engines: {node: ^18.18.0 || >=20.0.0} 541 | dependencies: 542 | '@typescript-eslint/types': 7.3.1 543 | '@typescript-eslint/visitor-keys': 7.3.1 544 | dev: true 545 | 546 | /@typescript-eslint/type-utils@7.3.1(eslint@8.57.0)(typescript@5.4.3): 547 | resolution: {integrity: sha512-iFhaysxFsMDQlzJn+vr3OrxN8NmdQkHks4WaqD4QBnt5hsq234wcYdyQ9uquzJJIDAj5W4wQne3yEsYA6OmXGw==} 548 | engines: {node: ^18.18.0 || >=20.0.0} 549 | peerDependencies: 550 | eslint: ^8.56.0 551 | typescript: '*' 552 | peerDependenciesMeta: 553 | typescript: 554 | optional: true 555 | dependencies: 556 | '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.3) 557 | '@typescript-eslint/utils': 7.3.1(eslint@8.57.0)(typescript@5.4.3) 558 | debug: 4.3.4 559 | eslint: 8.57.0 560 | ts-api-utils: 1.3.0(typescript@5.4.3) 561 | typescript: 5.4.3 562 | transitivePeerDependencies: 563 | - supports-color 564 | dev: true 565 | 566 | /@typescript-eslint/types@7.3.1: 567 | resolution: {integrity: sha512-2tUf3uWggBDl4S4183nivWQ2HqceOZh1U4hhu4p1tPiIJoRRXrab7Y+Y0p+dozYwZVvLPRI6r5wKe9kToF9FIw==} 568 | engines: {node: ^18.18.0 || >=20.0.0} 569 | dev: true 570 | 571 | /@typescript-eslint/typescript-estree@7.3.1(typescript@5.4.3): 572 | resolution: {integrity: sha512-tLpuqM46LVkduWP7JO7yVoWshpJuJzxDOPYIVWUUZbW+4dBpgGeUdl/fQkhuV0A8eGnphYw3pp8d2EnvPOfxmQ==} 573 | engines: {node: ^18.18.0 || >=20.0.0} 574 | peerDependencies: 575 | typescript: '*' 576 | peerDependenciesMeta: 577 | typescript: 578 | optional: true 579 | dependencies: 580 | '@typescript-eslint/types': 7.3.1 581 | '@typescript-eslint/visitor-keys': 7.3.1 582 | debug: 4.3.4 583 | globby: 11.1.0 584 | is-glob: 4.0.3 585 | minimatch: 9.0.3 586 | semver: 7.6.0 587 | ts-api-utils: 1.3.0(typescript@5.4.3) 588 | typescript: 5.4.3 589 | transitivePeerDependencies: 590 | - supports-color 591 | dev: true 592 | 593 | /@typescript-eslint/utils@7.3.1(eslint@8.57.0)(typescript@5.4.3): 594 | resolution: {integrity: sha512-jIERm/6bYQ9HkynYlNZvXpzmXWZGhMbrOvq3jJzOSOlKXsVjrrolzWBjDW6/TvT5Q3WqaN4EkmcfdQwi9tDjBQ==} 595 | engines: {node: ^18.18.0 || >=20.0.0} 596 | peerDependencies: 597 | eslint: ^8.56.0 598 | dependencies: 599 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 600 | '@types/json-schema': 7.0.15 601 | '@types/semver': 7.5.8 602 | '@typescript-eslint/scope-manager': 7.3.1 603 | '@typescript-eslint/types': 7.3.1 604 | '@typescript-eslint/typescript-estree': 7.3.1(typescript@5.4.3) 605 | eslint: 8.57.0 606 | semver: 7.6.0 607 | transitivePeerDependencies: 608 | - supports-color 609 | - typescript 610 | dev: true 611 | 612 | /@typescript-eslint/visitor-keys@7.3.1: 613 | resolution: {integrity: sha512-9RMXwQF8knsZvfv9tdi+4D/j7dMG28X/wMJ8Jj6eOHyHWwDW4ngQJcqEczSsqIKKjFiLFr40Mnr7a5ulDD3vmw==} 614 | engines: {node: ^18.18.0 || >=20.0.0} 615 | dependencies: 616 | '@typescript-eslint/types': 7.3.1 617 | eslint-visitor-keys: 3.4.3 618 | dev: true 619 | 620 | /@ungap/structured-clone@1.2.0: 621 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 622 | dev: true 623 | 624 | /@vitest/expect@1.4.0: 625 | resolution: {integrity: sha512-Jths0sWCJZ8BxjKe+p+eKsoqev1/T8lYcrjavEaz8auEJ4jAVY0GwW3JKmdVU4mmNPLPHixh4GNXP7GFtAiDHA==} 626 | dependencies: 627 | '@vitest/spy': 1.4.0 628 | '@vitest/utils': 1.4.0 629 | chai: 4.4.1 630 | dev: true 631 | 632 | /@vitest/runner@1.4.0: 633 | resolution: {integrity: sha512-EDYVSmesqlQ4RD2VvWo3hQgTJ7ZrFQ2VSJdfiJiArkCerDAGeyF1i6dHkmySqk573jLp6d/cfqCN+7wUB5tLgg==} 634 | dependencies: 635 | '@vitest/utils': 1.4.0 636 | p-limit: 5.0.0 637 | pathe: 1.1.2 638 | dev: true 639 | 640 | /@vitest/snapshot@1.4.0: 641 | resolution: {integrity: sha512-saAFnt5pPIA5qDGxOHxJ/XxhMFKkUSBJmVt5VgDsAqPTX6JP326r5C/c9UuCMPoXNzuudTPsYDZCoJ5ilpqG2A==} 642 | dependencies: 643 | magic-string: 0.30.8 644 | pathe: 1.1.2 645 | pretty-format: 29.7.0 646 | dev: true 647 | 648 | /@vitest/spy@1.4.0: 649 | resolution: {integrity: sha512-Ywau/Qs1DzM/8Uc+yA77CwSegizMlcgTJuYGAi0jujOteJOUf1ujunHThYo243KG9nAyWT3L9ifPYZ5+As/+6Q==} 650 | dependencies: 651 | tinyspy: 2.2.1 652 | dev: true 653 | 654 | /@vitest/utils@1.4.0: 655 | resolution: {integrity: sha512-mx3Yd1/6e2Vt/PUC98DcqTirtfxUyAZ32uK82r8rZzbtBeBo+nqgnjx/LvqQdWsrvNtm14VmurNgcf4nqY5gJg==} 656 | dependencies: 657 | diff-sequences: 29.6.3 658 | estree-walker: 3.0.3 659 | loupe: 2.3.7 660 | pretty-format: 29.7.0 661 | dev: true 662 | 663 | /acorn-jsx@5.3.2(acorn@8.11.3): 664 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 665 | peerDependencies: 666 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 667 | dependencies: 668 | acorn: 8.11.3 669 | dev: true 670 | 671 | /acorn-walk@8.3.2: 672 | resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} 673 | engines: {node: '>=0.4.0'} 674 | dev: true 675 | 676 | /acorn@8.11.3: 677 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 678 | engines: {node: '>=0.4.0'} 679 | hasBin: true 680 | dev: true 681 | 682 | /ajv@6.12.6: 683 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 684 | dependencies: 685 | fast-deep-equal: 3.1.3 686 | fast-json-stable-stringify: 2.1.0 687 | json-schema-traverse: 0.4.1 688 | uri-js: 4.4.1 689 | dev: true 690 | 691 | /ansi-regex@5.0.1: 692 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 693 | engines: {node: '>=8'} 694 | dev: true 695 | 696 | /ansi-styles@4.3.0: 697 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 698 | engines: {node: '>=8'} 699 | dependencies: 700 | color-convert: 2.0.1 701 | dev: true 702 | 703 | /ansi-styles@5.2.0: 704 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 705 | engines: {node: '>=10'} 706 | dev: true 707 | 708 | /argparse@2.0.1: 709 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 710 | dev: true 711 | 712 | /array-union@2.1.0: 713 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 714 | engines: {node: '>=8'} 715 | dev: true 716 | 717 | /assertion-error@1.1.0: 718 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 719 | dev: true 720 | 721 | /balanced-match@1.0.2: 722 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 723 | dev: true 724 | 725 | /brace-expansion@1.1.11: 726 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 727 | dependencies: 728 | balanced-match: 1.0.2 729 | concat-map: 0.0.1 730 | dev: true 731 | 732 | /brace-expansion@2.0.1: 733 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 734 | dependencies: 735 | balanced-match: 1.0.2 736 | dev: true 737 | 738 | /braces@3.0.2: 739 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 740 | engines: {node: '>=8'} 741 | dependencies: 742 | fill-range: 7.0.1 743 | dev: true 744 | 745 | /cac@6.7.14: 746 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 747 | engines: {node: '>=8'} 748 | dev: true 749 | 750 | /callsites@3.1.0: 751 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 752 | engines: {node: '>=6'} 753 | dev: true 754 | 755 | /chai@4.4.1: 756 | resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} 757 | engines: {node: '>=4'} 758 | dependencies: 759 | assertion-error: 1.1.0 760 | check-error: 1.0.3 761 | deep-eql: 4.1.3 762 | get-func-name: 2.0.2 763 | loupe: 2.3.7 764 | pathval: 1.1.1 765 | type-detect: 4.0.8 766 | dev: true 767 | 768 | /chalk@4.1.2: 769 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 770 | engines: {node: '>=10'} 771 | dependencies: 772 | ansi-styles: 4.3.0 773 | supports-color: 7.2.0 774 | dev: true 775 | 776 | /chalk@5.3.0: 777 | resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} 778 | engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} 779 | dev: true 780 | 781 | /check-error@1.0.3: 782 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 783 | dependencies: 784 | get-func-name: 2.0.2 785 | dev: true 786 | 787 | /color-convert@2.0.1: 788 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 789 | engines: {node: '>=7.0.0'} 790 | dependencies: 791 | color-name: 1.1.4 792 | dev: true 793 | 794 | /color-name@1.1.4: 795 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 796 | dev: true 797 | 798 | /concat-map@0.0.1: 799 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 800 | dev: true 801 | 802 | /cross-spawn@7.0.3: 803 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 804 | engines: {node: '>= 8'} 805 | dependencies: 806 | path-key: 3.1.1 807 | shebang-command: 2.0.0 808 | which: 2.0.2 809 | dev: true 810 | 811 | /debug@4.3.4: 812 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 813 | engines: {node: '>=6.0'} 814 | peerDependencies: 815 | supports-color: '*' 816 | peerDependenciesMeta: 817 | supports-color: 818 | optional: true 819 | dependencies: 820 | ms: 2.1.2 821 | dev: true 822 | 823 | /deep-eql@4.1.3: 824 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 825 | engines: {node: '>=6'} 826 | dependencies: 827 | type-detect: 4.0.8 828 | dev: true 829 | 830 | /deep-is@0.1.4: 831 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 832 | dev: true 833 | 834 | /diff-sequences@29.6.3: 835 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 836 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 837 | dev: true 838 | 839 | /dir-glob@3.0.1: 840 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 841 | engines: {node: '>=8'} 842 | dependencies: 843 | path-type: 4.0.0 844 | dev: true 845 | 846 | /doctrine@3.0.0: 847 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 848 | engines: {node: '>=6.0.0'} 849 | dependencies: 850 | esutils: 2.0.3 851 | dev: true 852 | 853 | /esbuild@0.20.2: 854 | resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} 855 | engines: {node: '>=12'} 856 | hasBin: true 857 | requiresBuild: true 858 | optionalDependencies: 859 | '@esbuild/aix-ppc64': 0.20.2 860 | '@esbuild/android-arm': 0.20.2 861 | '@esbuild/android-arm64': 0.20.2 862 | '@esbuild/android-x64': 0.20.2 863 | '@esbuild/darwin-arm64': 0.20.2 864 | '@esbuild/darwin-x64': 0.20.2 865 | '@esbuild/freebsd-arm64': 0.20.2 866 | '@esbuild/freebsd-x64': 0.20.2 867 | '@esbuild/linux-arm': 0.20.2 868 | '@esbuild/linux-arm64': 0.20.2 869 | '@esbuild/linux-ia32': 0.20.2 870 | '@esbuild/linux-loong64': 0.20.2 871 | '@esbuild/linux-mips64el': 0.20.2 872 | '@esbuild/linux-ppc64': 0.20.2 873 | '@esbuild/linux-riscv64': 0.20.2 874 | '@esbuild/linux-s390x': 0.20.2 875 | '@esbuild/linux-x64': 0.20.2 876 | '@esbuild/netbsd-x64': 0.20.2 877 | '@esbuild/openbsd-x64': 0.20.2 878 | '@esbuild/sunos-x64': 0.20.2 879 | '@esbuild/win32-arm64': 0.20.2 880 | '@esbuild/win32-ia32': 0.20.2 881 | '@esbuild/win32-x64': 0.20.2 882 | dev: true 883 | 884 | /escape-string-regexp@4.0.0: 885 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 886 | engines: {node: '>=10'} 887 | dev: true 888 | 889 | /eslint-config-prettier@9.1.0(eslint@8.57.0): 890 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 891 | hasBin: true 892 | peerDependencies: 893 | eslint: '>=7.0.0' 894 | dependencies: 895 | eslint: 8.57.0 896 | dev: true 897 | 898 | /eslint-plugin-prettier@5.1.3(eslint-config-prettier@9.1.0)(eslint@8.57.0)(prettier@3.2.5): 899 | resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} 900 | engines: {node: ^14.18.0 || >=16.0.0} 901 | peerDependencies: 902 | '@types/eslint': '>=8.0.0' 903 | eslint: '>=8.0.0' 904 | eslint-config-prettier: '*' 905 | prettier: '>=3.0.0' 906 | peerDependenciesMeta: 907 | '@types/eslint': 908 | optional: true 909 | eslint-config-prettier: 910 | optional: true 911 | dependencies: 912 | eslint: 8.57.0 913 | eslint-config-prettier: 9.1.0(eslint@8.57.0) 914 | prettier: 3.2.5 915 | prettier-linter-helpers: 1.0.0 916 | synckit: 0.8.8 917 | dev: true 918 | 919 | /eslint-scope@7.2.2: 920 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 921 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 922 | dependencies: 923 | esrecurse: 4.3.0 924 | estraverse: 5.3.0 925 | dev: true 926 | 927 | /eslint-visitor-keys@3.4.3: 928 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 929 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 930 | dev: true 931 | 932 | /eslint@8.57.0: 933 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} 934 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 935 | hasBin: true 936 | dependencies: 937 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 938 | '@eslint-community/regexpp': 4.10.0 939 | '@eslint/eslintrc': 2.1.4 940 | '@eslint/js': 8.57.0 941 | '@humanwhocodes/config-array': 0.11.14 942 | '@humanwhocodes/module-importer': 1.0.1 943 | '@nodelib/fs.walk': 1.2.8 944 | '@ungap/structured-clone': 1.2.0 945 | ajv: 6.12.6 946 | chalk: 4.1.2 947 | cross-spawn: 7.0.3 948 | debug: 4.3.4 949 | doctrine: 3.0.0 950 | escape-string-regexp: 4.0.0 951 | eslint-scope: 7.2.2 952 | eslint-visitor-keys: 3.4.3 953 | espree: 9.6.1 954 | esquery: 1.5.0 955 | esutils: 2.0.3 956 | fast-deep-equal: 3.1.3 957 | file-entry-cache: 6.0.1 958 | find-up: 5.0.0 959 | glob-parent: 6.0.2 960 | globals: 13.24.0 961 | graphemer: 1.4.0 962 | ignore: 5.3.1 963 | imurmurhash: 0.1.4 964 | is-glob: 4.0.3 965 | is-path-inside: 3.0.3 966 | js-yaml: 4.1.0 967 | json-stable-stringify-without-jsonify: 1.0.1 968 | levn: 0.4.1 969 | lodash.merge: 4.6.2 970 | minimatch: 3.1.2 971 | natural-compare: 1.4.0 972 | optionator: 0.9.3 973 | strip-ansi: 6.0.1 974 | text-table: 0.2.0 975 | transitivePeerDependencies: 976 | - supports-color 977 | dev: true 978 | 979 | /espree@9.6.1: 980 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 981 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 982 | dependencies: 983 | acorn: 8.11.3 984 | acorn-jsx: 5.3.2(acorn@8.11.3) 985 | eslint-visitor-keys: 3.4.3 986 | dev: true 987 | 988 | /esquery@1.5.0: 989 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 990 | engines: {node: '>=0.10'} 991 | dependencies: 992 | estraverse: 5.3.0 993 | dev: true 994 | 995 | /esrecurse@4.3.0: 996 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 997 | engines: {node: '>=4.0'} 998 | dependencies: 999 | estraverse: 5.3.0 1000 | dev: true 1001 | 1002 | /estraverse@5.3.0: 1003 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1004 | engines: {node: '>=4.0'} 1005 | dev: true 1006 | 1007 | /estree-walker@3.0.3: 1008 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 1009 | dependencies: 1010 | '@types/estree': 1.0.5 1011 | dev: true 1012 | 1013 | /esutils@2.0.3: 1014 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1015 | engines: {node: '>=0.10.0'} 1016 | dev: true 1017 | 1018 | /execa@8.0.1: 1019 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 1020 | engines: {node: '>=16.17'} 1021 | dependencies: 1022 | cross-spawn: 7.0.3 1023 | get-stream: 8.0.1 1024 | human-signals: 5.0.0 1025 | is-stream: 3.0.0 1026 | merge-stream: 2.0.0 1027 | npm-run-path: 5.3.0 1028 | onetime: 6.0.0 1029 | signal-exit: 4.1.0 1030 | strip-final-newline: 3.0.0 1031 | dev: true 1032 | 1033 | /fast-deep-equal@3.1.3: 1034 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1035 | dev: true 1036 | 1037 | /fast-diff@1.3.0: 1038 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 1039 | dev: true 1040 | 1041 | /fast-glob@3.3.2: 1042 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1043 | engines: {node: '>=8.6.0'} 1044 | dependencies: 1045 | '@nodelib/fs.stat': 2.0.5 1046 | '@nodelib/fs.walk': 1.2.8 1047 | glob-parent: 5.1.2 1048 | merge2: 1.4.1 1049 | micromatch: 4.0.5 1050 | dev: true 1051 | 1052 | /fast-json-stable-stringify@2.1.0: 1053 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1054 | dev: true 1055 | 1056 | /fast-levenshtein@2.0.6: 1057 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1058 | dev: true 1059 | 1060 | /fastq@1.17.1: 1061 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 1062 | dependencies: 1063 | reusify: 1.0.4 1064 | dev: true 1065 | 1066 | /file-entry-cache@6.0.1: 1067 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1068 | engines: {node: ^10.12.0 || >=12.0.0} 1069 | dependencies: 1070 | flat-cache: 3.2.0 1071 | dev: true 1072 | 1073 | /fill-range@7.0.1: 1074 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 1075 | engines: {node: '>=8'} 1076 | dependencies: 1077 | to-regex-range: 5.0.1 1078 | dev: true 1079 | 1080 | /find-up@5.0.0: 1081 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1082 | engines: {node: '>=10'} 1083 | dependencies: 1084 | locate-path: 6.0.0 1085 | path-exists: 4.0.0 1086 | dev: true 1087 | 1088 | /flat-cache@3.2.0: 1089 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1090 | engines: {node: ^10.12.0 || >=12.0.0} 1091 | dependencies: 1092 | flatted: 3.3.1 1093 | keyv: 4.5.4 1094 | rimraf: 3.0.2 1095 | dev: true 1096 | 1097 | /flatted@3.3.1: 1098 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 1099 | dev: true 1100 | 1101 | /fs.realpath@1.0.0: 1102 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1103 | dev: true 1104 | 1105 | /fsevents@2.3.3: 1106 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1107 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1108 | os: [darwin] 1109 | requiresBuild: true 1110 | dev: true 1111 | optional: true 1112 | 1113 | /get-func-name@2.0.2: 1114 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 1115 | dev: true 1116 | 1117 | /get-stream@8.0.1: 1118 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 1119 | engines: {node: '>=16'} 1120 | dev: true 1121 | 1122 | /glob-parent@5.1.2: 1123 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1124 | engines: {node: '>= 6'} 1125 | dependencies: 1126 | is-glob: 4.0.3 1127 | dev: true 1128 | 1129 | /glob-parent@6.0.2: 1130 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1131 | engines: {node: '>=10.13.0'} 1132 | dependencies: 1133 | is-glob: 4.0.3 1134 | dev: true 1135 | 1136 | /glob@7.2.3: 1137 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1138 | dependencies: 1139 | fs.realpath: 1.0.0 1140 | inflight: 1.0.6 1141 | inherits: 2.0.4 1142 | minimatch: 3.1.2 1143 | once: 1.4.0 1144 | path-is-absolute: 1.0.1 1145 | dev: true 1146 | 1147 | /globals@13.24.0: 1148 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 1149 | engines: {node: '>=8'} 1150 | dependencies: 1151 | type-fest: 0.20.2 1152 | dev: true 1153 | 1154 | /globby@11.1.0: 1155 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1156 | engines: {node: '>=10'} 1157 | dependencies: 1158 | array-union: 2.1.0 1159 | dir-glob: 3.0.1 1160 | fast-glob: 3.3.2 1161 | ignore: 5.3.1 1162 | merge2: 1.4.1 1163 | slash: 3.0.0 1164 | dev: true 1165 | 1166 | /graphemer@1.4.0: 1167 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1168 | dev: true 1169 | 1170 | /has-flag@4.0.0: 1171 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1172 | engines: {node: '>=8'} 1173 | dev: true 1174 | 1175 | /human-signals@5.0.0: 1176 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 1177 | engines: {node: '>=16.17.0'} 1178 | dev: true 1179 | 1180 | /ignore@5.3.1: 1181 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 1182 | engines: {node: '>= 4'} 1183 | dev: true 1184 | 1185 | /import-fresh@3.3.0: 1186 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1187 | engines: {node: '>=6'} 1188 | dependencies: 1189 | parent-module: 1.0.1 1190 | resolve-from: 4.0.0 1191 | dev: true 1192 | 1193 | /imurmurhash@0.1.4: 1194 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1195 | engines: {node: '>=0.8.19'} 1196 | dev: true 1197 | 1198 | /inflight@1.0.6: 1199 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1200 | dependencies: 1201 | once: 1.4.0 1202 | wrappy: 1.0.2 1203 | dev: true 1204 | 1205 | /inherits@2.0.4: 1206 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1207 | dev: true 1208 | 1209 | /is-extglob@2.1.1: 1210 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1211 | engines: {node: '>=0.10.0'} 1212 | dev: true 1213 | 1214 | /is-glob@4.0.3: 1215 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1216 | engines: {node: '>=0.10.0'} 1217 | dependencies: 1218 | is-extglob: 2.1.1 1219 | dev: true 1220 | 1221 | /is-number@7.0.0: 1222 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1223 | engines: {node: '>=0.12.0'} 1224 | dev: true 1225 | 1226 | /is-path-inside@3.0.3: 1227 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1228 | engines: {node: '>=8'} 1229 | dev: true 1230 | 1231 | /is-stream@3.0.0: 1232 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1233 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1234 | dev: true 1235 | 1236 | /isexe@2.0.0: 1237 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1238 | dev: true 1239 | 1240 | /js-tokens@8.0.3: 1241 | resolution: {integrity: sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==} 1242 | dev: true 1243 | 1244 | /js-yaml@4.1.0: 1245 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1246 | hasBin: true 1247 | dependencies: 1248 | argparse: 2.0.1 1249 | dev: true 1250 | 1251 | /json-buffer@3.0.1: 1252 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1253 | dev: true 1254 | 1255 | /json-schema-traverse@0.4.1: 1256 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1257 | dev: true 1258 | 1259 | /json-stable-stringify-without-jsonify@1.0.1: 1260 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1261 | dev: true 1262 | 1263 | /jsonc-parser@3.2.1: 1264 | resolution: {integrity: sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==} 1265 | dev: true 1266 | 1267 | /keyv@4.5.4: 1268 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1269 | dependencies: 1270 | json-buffer: 3.0.1 1271 | dev: true 1272 | 1273 | /levn@0.4.1: 1274 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1275 | engines: {node: '>= 0.8.0'} 1276 | dependencies: 1277 | prelude-ls: 1.2.1 1278 | type-check: 0.4.0 1279 | dev: true 1280 | 1281 | /local-pkg@0.5.0: 1282 | resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} 1283 | engines: {node: '>=14'} 1284 | dependencies: 1285 | mlly: 1.6.1 1286 | pkg-types: 1.0.3 1287 | dev: true 1288 | 1289 | /locate-path@6.0.0: 1290 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1291 | engines: {node: '>=10'} 1292 | dependencies: 1293 | p-locate: 5.0.0 1294 | dev: true 1295 | 1296 | /lodash.merge@4.6.2: 1297 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1298 | dev: true 1299 | 1300 | /loupe@2.3.7: 1301 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 1302 | dependencies: 1303 | get-func-name: 2.0.2 1304 | dev: true 1305 | 1306 | /lru-cache@6.0.0: 1307 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} 1308 | engines: {node: '>=10'} 1309 | dependencies: 1310 | yallist: 4.0.0 1311 | dev: true 1312 | 1313 | /magic-string@0.30.8: 1314 | resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} 1315 | engines: {node: '>=12'} 1316 | dependencies: 1317 | '@jridgewell/sourcemap-codec': 1.4.15 1318 | dev: true 1319 | 1320 | /merge-stream@2.0.0: 1321 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1322 | dev: true 1323 | 1324 | /merge2@1.4.1: 1325 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1326 | engines: {node: '>= 8'} 1327 | dev: true 1328 | 1329 | /micromatch@4.0.5: 1330 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 1331 | engines: {node: '>=8.6'} 1332 | dependencies: 1333 | braces: 3.0.2 1334 | picomatch: 2.3.1 1335 | dev: true 1336 | 1337 | /mimic-fn@4.0.0: 1338 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1339 | engines: {node: '>=12'} 1340 | dev: true 1341 | 1342 | /minimatch@3.1.2: 1343 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1344 | dependencies: 1345 | brace-expansion: 1.1.11 1346 | dev: true 1347 | 1348 | /minimatch@9.0.3: 1349 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} 1350 | engines: {node: '>=16 || 14 >=14.17'} 1351 | dependencies: 1352 | brace-expansion: 2.0.1 1353 | dev: true 1354 | 1355 | /mlly@1.6.1: 1356 | resolution: {integrity: sha512-vLgaHvaeunuOXHSmEbZ9izxPx3USsk8KCQ8iC+aTlp5sKRSoZvwhHh5L9VbKSaVC6sJDqbyohIS76E2VmHIPAA==} 1357 | dependencies: 1358 | acorn: 8.11.3 1359 | pathe: 1.1.2 1360 | pkg-types: 1.0.3 1361 | ufo: 1.5.3 1362 | dev: true 1363 | 1364 | /moo@0.5.2: 1365 | resolution: {integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==} 1366 | dev: false 1367 | 1368 | /ms@2.1.2: 1369 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1370 | dev: true 1371 | 1372 | /nanoid@3.3.7: 1373 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1374 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1375 | hasBin: true 1376 | dev: true 1377 | 1378 | /natural-compare@1.4.0: 1379 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1380 | dev: true 1381 | 1382 | /npm-run-path@5.3.0: 1383 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 1384 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1385 | dependencies: 1386 | path-key: 4.0.0 1387 | dev: true 1388 | 1389 | /once@1.4.0: 1390 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1391 | dependencies: 1392 | wrappy: 1.0.2 1393 | dev: true 1394 | 1395 | /onetime@6.0.0: 1396 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1397 | engines: {node: '>=12'} 1398 | dependencies: 1399 | mimic-fn: 4.0.0 1400 | dev: true 1401 | 1402 | /optionator@0.9.3: 1403 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} 1404 | engines: {node: '>= 0.8.0'} 1405 | dependencies: 1406 | '@aashutoshrathi/word-wrap': 1.2.6 1407 | deep-is: 0.1.4 1408 | fast-levenshtein: 2.0.6 1409 | levn: 0.4.1 1410 | prelude-ls: 1.2.1 1411 | type-check: 0.4.0 1412 | dev: true 1413 | 1414 | /p-limit@3.1.0: 1415 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1416 | engines: {node: '>=10'} 1417 | dependencies: 1418 | yocto-queue: 0.1.0 1419 | dev: true 1420 | 1421 | /p-limit@5.0.0: 1422 | resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} 1423 | engines: {node: '>=18'} 1424 | dependencies: 1425 | yocto-queue: 1.0.0 1426 | dev: true 1427 | 1428 | /p-locate@5.0.0: 1429 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1430 | engines: {node: '>=10'} 1431 | dependencies: 1432 | p-limit: 3.1.0 1433 | dev: true 1434 | 1435 | /parent-module@1.0.1: 1436 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1437 | engines: {node: '>=6'} 1438 | dependencies: 1439 | callsites: 3.1.0 1440 | dev: true 1441 | 1442 | /path-exists@4.0.0: 1443 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1444 | engines: {node: '>=8'} 1445 | dev: true 1446 | 1447 | /path-is-absolute@1.0.1: 1448 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1449 | engines: {node: '>=0.10.0'} 1450 | dev: true 1451 | 1452 | /path-key@3.1.1: 1453 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1454 | engines: {node: '>=8'} 1455 | dev: true 1456 | 1457 | /path-key@4.0.0: 1458 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1459 | engines: {node: '>=12'} 1460 | dev: true 1461 | 1462 | /path-type@4.0.0: 1463 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1464 | engines: {node: '>=8'} 1465 | dev: true 1466 | 1467 | /pathe@1.1.2: 1468 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 1469 | dev: true 1470 | 1471 | /pathval@1.1.1: 1472 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 1473 | dev: true 1474 | 1475 | /picocolors@1.0.0: 1476 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 1477 | dev: true 1478 | 1479 | /picomatch@2.3.1: 1480 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1481 | engines: {node: '>=8.6'} 1482 | dev: true 1483 | 1484 | /pkg-types@1.0.3: 1485 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} 1486 | dependencies: 1487 | jsonc-parser: 3.2.1 1488 | mlly: 1.6.1 1489 | pathe: 1.1.2 1490 | dev: true 1491 | 1492 | /postcss@8.4.38: 1493 | resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} 1494 | engines: {node: ^10 || ^12 || >=14} 1495 | dependencies: 1496 | nanoid: 3.3.7 1497 | picocolors: 1.0.0 1498 | source-map-js: 1.2.0 1499 | dev: true 1500 | 1501 | /prelude-ls@1.2.1: 1502 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1503 | engines: {node: '>= 0.8.0'} 1504 | dev: true 1505 | 1506 | /prettier-linter-helpers@1.0.0: 1507 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1508 | engines: {node: '>=6.0.0'} 1509 | dependencies: 1510 | fast-diff: 1.3.0 1511 | dev: true 1512 | 1513 | /prettier@3.2.5: 1514 | resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} 1515 | engines: {node: '>=14'} 1516 | hasBin: true 1517 | dev: true 1518 | 1519 | /pretty-format@29.7.0: 1520 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 1521 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 1522 | dependencies: 1523 | '@jest/schemas': 29.6.3 1524 | ansi-styles: 5.2.0 1525 | react-is: 18.2.0 1526 | dev: true 1527 | 1528 | /punycode@2.3.1: 1529 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1530 | engines: {node: '>=6'} 1531 | dev: true 1532 | 1533 | /queue-microtask@1.2.3: 1534 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1535 | dev: true 1536 | 1537 | /react-is@18.2.0: 1538 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} 1539 | dev: true 1540 | 1541 | /resolve-from@4.0.0: 1542 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1543 | engines: {node: '>=4'} 1544 | dev: true 1545 | 1546 | /reusify@1.0.4: 1547 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1548 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1549 | dev: true 1550 | 1551 | /rimraf@3.0.2: 1552 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1553 | hasBin: true 1554 | dependencies: 1555 | glob: 7.2.3 1556 | dev: true 1557 | 1558 | /rollup@4.13.0: 1559 | resolution: {integrity: sha512-3YegKemjoQnYKmsBlOHfMLVPPA5xLkQ8MHLLSw/fBrFaVkEayL51DilPpNNLq1exr98F2B1TzrV0FUlN3gWRPg==} 1560 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1561 | hasBin: true 1562 | dependencies: 1563 | '@types/estree': 1.0.5 1564 | optionalDependencies: 1565 | '@rollup/rollup-android-arm-eabi': 4.13.0 1566 | '@rollup/rollup-android-arm64': 4.13.0 1567 | '@rollup/rollup-darwin-arm64': 4.13.0 1568 | '@rollup/rollup-darwin-x64': 4.13.0 1569 | '@rollup/rollup-linux-arm-gnueabihf': 4.13.0 1570 | '@rollup/rollup-linux-arm64-gnu': 4.13.0 1571 | '@rollup/rollup-linux-arm64-musl': 4.13.0 1572 | '@rollup/rollup-linux-riscv64-gnu': 4.13.0 1573 | '@rollup/rollup-linux-x64-gnu': 4.13.0 1574 | '@rollup/rollup-linux-x64-musl': 4.13.0 1575 | '@rollup/rollup-win32-arm64-msvc': 4.13.0 1576 | '@rollup/rollup-win32-ia32-msvc': 4.13.0 1577 | '@rollup/rollup-win32-x64-msvc': 4.13.0 1578 | fsevents: 2.3.3 1579 | dev: true 1580 | 1581 | /run-parallel@1.2.0: 1582 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1583 | dependencies: 1584 | queue-microtask: 1.2.3 1585 | dev: true 1586 | 1587 | /semver@7.6.0: 1588 | resolution: {integrity: sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==} 1589 | engines: {node: '>=10'} 1590 | hasBin: true 1591 | dependencies: 1592 | lru-cache: 6.0.0 1593 | dev: true 1594 | 1595 | /shebang-command@2.0.0: 1596 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1597 | engines: {node: '>=8'} 1598 | dependencies: 1599 | shebang-regex: 3.0.0 1600 | dev: true 1601 | 1602 | /shebang-regex@3.0.0: 1603 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1604 | engines: {node: '>=8'} 1605 | dev: true 1606 | 1607 | /siginfo@2.0.0: 1608 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1609 | dev: true 1610 | 1611 | /signal-exit@4.1.0: 1612 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1613 | engines: {node: '>=14'} 1614 | dev: true 1615 | 1616 | /slash@3.0.0: 1617 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1618 | engines: {node: '>=8'} 1619 | dev: true 1620 | 1621 | /source-map-js@1.2.0: 1622 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 1623 | engines: {node: '>=0.10.0'} 1624 | dev: true 1625 | 1626 | /stackback@0.0.2: 1627 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1628 | dev: true 1629 | 1630 | /std-env@3.7.0: 1631 | resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} 1632 | dev: true 1633 | 1634 | /strip-ansi@6.0.1: 1635 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1636 | engines: {node: '>=8'} 1637 | dependencies: 1638 | ansi-regex: 5.0.1 1639 | dev: true 1640 | 1641 | /strip-final-newline@3.0.0: 1642 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 1643 | engines: {node: '>=12'} 1644 | dev: true 1645 | 1646 | /strip-json-comments@3.1.1: 1647 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1648 | engines: {node: '>=8'} 1649 | dev: true 1650 | 1651 | /strip-literal@2.0.0: 1652 | resolution: {integrity: sha512-f9vHgsCWBq2ugHAkGMiiYY+AYG0D/cbloKKg0nhaaaSNsujdGIpVXCNsrJpCKr5M0f4aI31mr13UjY6GAuXCKA==} 1653 | dependencies: 1654 | js-tokens: 8.0.3 1655 | dev: true 1656 | 1657 | /supports-color@7.2.0: 1658 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1659 | engines: {node: '>=8'} 1660 | dependencies: 1661 | has-flag: 4.0.0 1662 | dev: true 1663 | 1664 | /synckit@0.8.8: 1665 | resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} 1666 | engines: {node: ^14.18.0 || >=16.0.0} 1667 | dependencies: 1668 | '@pkgr/core': 0.1.1 1669 | tslib: 2.6.2 1670 | dev: true 1671 | 1672 | /text-table@0.2.0: 1673 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1674 | dev: true 1675 | 1676 | /tinybench@2.6.0: 1677 | resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} 1678 | dev: true 1679 | 1680 | /tinypool@0.8.2: 1681 | resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} 1682 | engines: {node: '>=14.0.0'} 1683 | dev: true 1684 | 1685 | /tinyspy@2.2.1: 1686 | resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} 1687 | engines: {node: '>=14.0.0'} 1688 | dev: true 1689 | 1690 | /to-regex-range@5.0.1: 1691 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1692 | engines: {node: '>=8.0'} 1693 | dependencies: 1694 | is-number: 7.0.0 1695 | dev: true 1696 | 1697 | /ts-api-utils@1.3.0(typescript@5.4.3): 1698 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 1699 | engines: {node: '>=16'} 1700 | peerDependencies: 1701 | typescript: '>=4.2.0' 1702 | dependencies: 1703 | typescript: 5.4.3 1704 | dev: true 1705 | 1706 | /tslib@2.6.2: 1707 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==} 1708 | dev: true 1709 | 1710 | /type-check@0.4.0: 1711 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1712 | engines: {node: '>= 0.8.0'} 1713 | dependencies: 1714 | prelude-ls: 1.2.1 1715 | dev: true 1716 | 1717 | /type-detect@4.0.8: 1718 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1719 | engines: {node: '>=4'} 1720 | dev: true 1721 | 1722 | /type-fest@0.20.2: 1723 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1724 | engines: {node: '>=10'} 1725 | dev: true 1726 | 1727 | /typescript@5.4.3: 1728 | resolution: {integrity: sha512-KrPd3PKaCLr78MalgiwJnA25Nm8HAmdwN3mYUYZgG/wizIo9EainNVQI9/yDavtVFRN2h3k8uf3GLHuhDMgEHg==} 1729 | engines: {node: '>=14.17'} 1730 | hasBin: true 1731 | dev: true 1732 | 1733 | /ufo@1.5.3: 1734 | resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} 1735 | dev: true 1736 | 1737 | /undici-types@5.26.5: 1738 | resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} 1739 | dev: true 1740 | 1741 | /uri-js@4.4.1: 1742 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1743 | dependencies: 1744 | punycode: 2.3.1 1745 | dev: true 1746 | 1747 | /vite-node@1.4.0(@types/node@20.11.30): 1748 | resolution: {integrity: sha512-VZDAseqjrHgNd4Kh8icYHWzTKSCZMhia7GyHfhtzLW33fZlG9SwsB6CEhgyVOWkJfJ2pFLrp/Gj1FSfAiqH9Lw==} 1749 | engines: {node: ^18.0.0 || >=20.0.0} 1750 | hasBin: true 1751 | dependencies: 1752 | cac: 6.7.14 1753 | debug: 4.3.4 1754 | pathe: 1.1.2 1755 | picocolors: 1.0.0 1756 | vite: 5.2.2(@types/node@20.11.30) 1757 | transitivePeerDependencies: 1758 | - '@types/node' 1759 | - less 1760 | - lightningcss 1761 | - sass 1762 | - stylus 1763 | - sugarss 1764 | - supports-color 1765 | - terser 1766 | dev: true 1767 | 1768 | /vite@5.2.2(@types/node@20.11.30): 1769 | resolution: {integrity: sha512-FWZbz0oSdLq5snUI0b6sULbz58iXFXdvkZfZWR/F0ZJuKTSPO7v72QPXt6KqYeMFb0yytNp6kZosxJ96Nr/wDQ==} 1770 | engines: {node: ^18.0.0 || >=20.0.0} 1771 | hasBin: true 1772 | peerDependencies: 1773 | '@types/node': ^18.0.0 || >=20.0.0 1774 | less: '*' 1775 | lightningcss: ^1.21.0 1776 | sass: '*' 1777 | stylus: '*' 1778 | sugarss: '*' 1779 | terser: ^5.4.0 1780 | peerDependenciesMeta: 1781 | '@types/node': 1782 | optional: true 1783 | less: 1784 | optional: true 1785 | lightningcss: 1786 | optional: true 1787 | sass: 1788 | optional: true 1789 | stylus: 1790 | optional: true 1791 | sugarss: 1792 | optional: true 1793 | terser: 1794 | optional: true 1795 | dependencies: 1796 | '@types/node': 20.11.30 1797 | esbuild: 0.20.2 1798 | postcss: 8.4.38 1799 | rollup: 4.13.0 1800 | optionalDependencies: 1801 | fsevents: 2.3.3 1802 | dev: true 1803 | 1804 | /vitest@1.4.0(@types/node@20.11.30): 1805 | resolution: {integrity: sha512-gujzn0g7fmwf83/WzrDTnncZt2UiXP41mHuFYFrdwaLRVQ6JYQEiME2IfEjU3vcFL3VKa75XhI3lFgn+hfVsQw==} 1806 | engines: {node: ^18.0.0 || >=20.0.0} 1807 | hasBin: true 1808 | peerDependencies: 1809 | '@edge-runtime/vm': '*' 1810 | '@types/node': ^18.0.0 || >=20.0.0 1811 | '@vitest/browser': 1.4.0 1812 | '@vitest/ui': 1.4.0 1813 | happy-dom: '*' 1814 | jsdom: '*' 1815 | peerDependenciesMeta: 1816 | '@edge-runtime/vm': 1817 | optional: true 1818 | '@types/node': 1819 | optional: true 1820 | '@vitest/browser': 1821 | optional: true 1822 | '@vitest/ui': 1823 | optional: true 1824 | happy-dom: 1825 | optional: true 1826 | jsdom: 1827 | optional: true 1828 | dependencies: 1829 | '@types/node': 20.11.30 1830 | '@vitest/expect': 1.4.0 1831 | '@vitest/runner': 1.4.0 1832 | '@vitest/snapshot': 1.4.0 1833 | '@vitest/spy': 1.4.0 1834 | '@vitest/utils': 1.4.0 1835 | acorn-walk: 8.3.2 1836 | chai: 4.4.1 1837 | debug: 4.3.4 1838 | execa: 8.0.1 1839 | local-pkg: 0.5.0 1840 | magic-string: 0.30.8 1841 | pathe: 1.1.2 1842 | picocolors: 1.0.0 1843 | std-env: 3.7.0 1844 | strip-literal: 2.0.0 1845 | tinybench: 2.6.0 1846 | tinypool: 0.8.2 1847 | vite: 5.2.2(@types/node@20.11.30) 1848 | vite-node: 1.4.0(@types/node@20.11.30) 1849 | why-is-node-running: 2.2.2 1850 | transitivePeerDependencies: 1851 | - less 1852 | - lightningcss 1853 | - sass 1854 | - stylus 1855 | - sugarss 1856 | - supports-color 1857 | - terser 1858 | dev: true 1859 | 1860 | /which@2.0.2: 1861 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1862 | engines: {node: '>= 8'} 1863 | hasBin: true 1864 | dependencies: 1865 | isexe: 2.0.0 1866 | dev: true 1867 | 1868 | /why-is-node-running@2.2.2: 1869 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} 1870 | engines: {node: '>=8'} 1871 | hasBin: true 1872 | dependencies: 1873 | siginfo: 2.0.0 1874 | stackback: 0.0.2 1875 | dev: true 1876 | 1877 | /wrappy@1.0.2: 1878 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 1879 | dev: true 1880 | 1881 | /yallist@4.0.0: 1882 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} 1883 | dev: true 1884 | 1885 | /yocto-queue@0.1.0: 1886 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 1887 | engines: {node: '>=10'} 1888 | dev: true 1889 | 1890 | /yocto-queue@1.0.0: 1891 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 1892 | engines: {node: '>=12.20'} 1893 | dev: true 1894 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import moo from 'moo'; 2 | 3 | export default function minify(query: string) { 4 | const lexer = moo.states({ 5 | main: { 6 | comment: /#.*$/, 7 | blockString: { match: /:\s*"""/, push: 'blockString' }, // treat these differently from descriptions 8 | description: { match: '"""', push: 'description' }, 9 | string: /"(?:\\"|[^"])*"/, 10 | variable: /\$[A-z\d]+/, 11 | id: /[A-z\d]+/, 12 | ws: { match: /[\s\t]+/, lineBreaks: true }, // whitespace to be removed 13 | any: /./, 14 | }, 15 | description: { 16 | descriptionEnd: { match: '"""', pop: 1 }, // exit description 17 | ws: { match: /[\s\t]+/, lineBreaks: true }, 18 | description: /./, 19 | }, 20 | blockString: { 21 | esc: { match: '"""', pop: 1 }, // exit block string 22 | stringSpace: { match: /[\s\t]+/, lineBreaks: true }, 23 | any: /./, 24 | }, 25 | }); 26 | lexer.reset(query); 27 | 28 | // filter out comments & descriptions to make ws removal easier 29 | let withoutComments = ''; 30 | for (const { type, value } of lexer) { 31 | if (type !== 'comment' && type !== 'description' && type !== 'descriptionEnd') { 32 | withoutComments += value; 33 | } 34 | } 35 | lexer.reset(withoutComments); 36 | 37 | // conditionally strip out ws where possible 38 | const tokens = Array.from(lexer); 39 | return tokens 40 | .map(({ type, value }, i) => { 41 | if (type === 'blockString') { 42 | // trim whitespace within multi-line arguments 43 | return value.replace(/\s*/g, ''); 44 | } 45 | // handle whitespace surrounding IDs 46 | if (type === 'ws') { 47 | return tokens[i - 1] && 48 | tokens[i - 1]!.type === 'id' && 49 | tokens[i + 1] && 50 | tokens[i + 1]!.type === 'id' 51 | ? ' ' // if ws is between two IDs, reduce to single space 52 | : ''; // otherwise remove 53 | } 54 | return value; 55 | }) 56 | .join('') 57 | .trim(); 58 | } 59 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "allowUnreachableCode": false, 4 | "baseUrl": ".", 5 | "declaration": true, 6 | "esModuleInterop": true, 7 | "forceConsistentCasingInFileNames": true, 8 | "module": "ESNext", 9 | "moduleResolution": "Bundler", 10 | "noImplicitAny": true, 11 | "noImplicitReturns": true, 12 | "noUncheckedIndexedAccess": true, 13 | "noUnusedLocals": true, 14 | "noUnusedParameters": true, 15 | "outDir": "dist", 16 | "sourceMap": true, 17 | "strict": true, 18 | "strictNullChecks": true, 19 | "target": "ESNext" 20 | }, 21 | "include": ["src"], 22 | "exclude": ["node_modules"] 23 | } 24 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | test: {}, 5 | }); 6 | --------------------------------------------------------------------------------