├── .eslintrc.json ├── .gitignore ├── .prettierrc ├── README.md ├── package-lock.json ├── package.json ├── src ├── __tests__ │ ├── zod-array.test.ts │ ├── zod-discriminated-union.test.ts │ ├── zod-enum.test.ts │ ├── zod-literal.test.ts │ ├── zod-number.test.ts │ ├── zod-object.test.ts │ ├── zod-string.test.ts │ └── zod-union.test.ts ├── index.ts ├── parse │ ├── array.ts │ ├── discriminatedUnion.ts │ ├── enum.ts │ ├── index.ts │ ├── literal.ts │ ├── number.ts │ ├── object.ts │ ├── string.ts │ └── union.ts ├── schemas │ ├── array.ts │ ├── discriminated-union.ts │ ├── enum.ts │ ├── index.ts │ ├── literal.ts │ ├── number.ts │ ├── object.ts │ ├── string.ts │ ├── union.ts │ └── unknown.ts └── types │ ├── index.ts │ ├── infer.ts │ └── zod-types.ts └── tsconfig.json /.eslintrc.json: -------------------------------------------------------------------------------- 1 | { 2 | "root": true, 3 | "extends": [ 4 | "eslint:recommended", 5 | "plugin:@typescript-eslint/recommended", 6 | "plugin:import/errors", 7 | "plugin:import/warnings", 8 | "plugin:import/typescript" 9 | ], 10 | "parser": "@typescript-eslint/parser", 11 | "parserOptions": { 12 | "project": ["./tsconfig.json"] 13 | }, 14 | "plugins": ["@typescript-eslint"], 15 | "rules": { 16 | "@typescript-eslint/consistent-type-imports": "error", 17 | "@typescript-eslint/no-redeclare": "error", 18 | "@typescript-eslint/no-floating-promises": "error", 19 | "@typescript-eslint/naming-convention": [ 20 | "error", 21 | { 22 | "selector": "variable", 23 | "types": ["boolean"], 24 | "format": ["PascalCase"], 25 | "prefix": ["is", "should", "has", "are", "can"] 26 | } 27 | ], 28 | "@typescript-eslint/array-type": ["error", { "default": "generic" }], 29 | "@typescript-eslint/no-misused-promises": [ 30 | "error", 31 | { 32 | "checksVoidReturn": true, 33 | "checksConditionals": true, 34 | "checksSpreads": true 35 | } 36 | ], 37 | "import/order": [ 38 | "error", 39 | { 40 | "newlines-between": "always", 41 | "groups": [ 42 | "type", 43 | "builtin", 44 | "external", 45 | ["parent", "sibling"], 46 | "index" 47 | ], 48 | "alphabetize": { 49 | "order": "asc", 50 | "caseInsensitive": true 51 | } 52 | } 53 | ] 54 | }, 55 | "ignorePatterns": ["**/node_modules/**", "**/dist/**", "**/build/**"] 56 | } 57 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | node_modules 2 | dist -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "arrowParens": "always", 3 | "bracketSpacing": true, 4 | "embeddedLanguageFormatting": "auto", 5 | "htmlWhitespaceSensitivity": "css", 6 | "insertPragma": false, 7 | "jsxBracketSameLine": false, 8 | "jsxSingleQuote": false, 9 | "printWidth": 80, 10 | "proseWrap": "preserve", 11 | "quoteProps": "as-needed", 12 | "requirePragma": false, 13 | "semi": false, 14 | "singleQuote": true, 15 | "tabWidth": 2, 16 | "trailingComma": "es5", 17 | "useTabs": false, 18 | "vueIndentScriptAndStyle": false 19 | } 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Zod from scratch 2 | 3 | Building Zod from scratch to learn how it works under the hood. 4 | 5 | I started because I love using Zod and got curious about how it works. 6 | 7 | Doing it with TDD. 😄 🔥 8 | 9 | ## Todo 10 | 11 | Overall made some good progress. 🚀 12 | 13 | - [x] Basic types. 14 | - [x] Handle nested objects and arrays. 15 | - [x] Optional and nullable types. 16 | - [x] Enum Types 17 | - [x] Union Types 18 | - [x] Literal strings 19 | - [x] Discriminated Union 20 | 21 | ## Run it locally 22 | 23 | Clone it. 24 | 25 | Install deps `npm i`. 26 | 27 | Run test `npm test`. 28 | 29 | ## Testing 30 | 31 | Built it with TDD. 💞 32 | 33 | 1. Failing test. 34 | 2. Make test pass. 35 | 3. Refactor. 36 | 37 | It was a fun experience, such dopamine! 38 | 39 | Plus much easier than feeling overwhelmed by all the code you need to write. 40 | 41 | ## Buggy 😅 42 | 43 | You may come across `Type instantiation is excessively deep and possibly infinite.`. 44 | 45 | The way I've built Zod here is a "naive" approach. 46 | 47 | It's usable but to fully satisfy the TypeScript system, you would have to build it differently from scratch. 48 | 49 | What you'd have to keep in mind: 50 | 51 | - Avoid deep nesting 52 | - Limit recursion 53 | - Be careful with union types: large and complex unions can be difficult for TypeScript to process 54 | - Break down types to smaller types, simplifying it for TypeScript 55 | - Compose types 56 | 57 | ## Interfaces are lazy, Types are eager 😱 58 | 59 | Why mix interfaces and types, and not simply stick with types? 60 | 61 | I'm a fan of sticking with types for consistency. However, here interfaces are a necessity. 62 | 63 | No, it is not because of declaration merging that interfaces offer. 64 | 65 | ### Types -> eager evaluation 66 | 67 | When TypeScript encounters a type alias (type), it tries to resolve it immediately. This means the type is fully expanded as soon as it's defined. "Fully expanded" is like giving your friend all the pieces of the puzzle at once. TypeScript immediately tries to see the whole picture (the entire structure of the type) as soon as you define it. 68 | 69 | This can lead to issues with recursive types because TypeScript will keep trying to resolve them endlessly, leading to circular reference errors. 70 | 71 | ### Interfaces -> lazy evaluation 72 | 73 | Interfaces in TypeScript are lazily evaluated. This means they are not fully expanded until they are actually used. This lazy behavior allows TypeScript to handle recursive structures more gracefully, as it doesn't try to expand them immediately upon definition. 74 | 75 | ### Example 76 | 77 | Using type, this would result in the error `Type alias 'BoxedString' circularly references itself.`: 78 | 79 | ```ts 80 | type Boxed = { value: T } 81 | 82 | type BoxedString = Boxed | string 83 | ``` 84 | 85 | Using interface, no errors! 86 | 87 | ```ts 88 | interface Boxed { 89 | value: T 90 | } 91 | 92 | type BoxedString = Boxed | string 93 | ``` 94 | 95 | ### Use case 96 | 97 | If you're building libraries, sticking to interfaces is ideal: 98 | 99 | - Declaration merging is useful if someone wants to extend the definitions of your library. 100 | - You will likely deal with recursive structures (depends on the complexity) 101 | 102 | You will still use type aliases where interfaces aren't possible such as union types. 103 | 104 | If you're not building a library, then simply stick to type aliases. Till you encounter the circular error I guess lol 105 | 106 | ## Discriminated Union Type 107 | 108 | This is a bit tricky to understand. 109 | 110 | ```ts 111 | export type DiscriminatedUnionOption< 112 | Discriminator extends string, 113 | DiscriminatorType extends ZodLiteral 114 | > = { 115 | [K in Discriminator]: DiscriminatorType 116 | } & Record 117 | 118 | export interface ZodDiscriminatedUnion< 119 | Discriminator extends string, 120 | Union extends Array< 121 | ZodObject>> 122 | > 123 | > { 124 | type: 'discriminated-union' 125 | discriminator: Discriminator 126 | options: Union 127 | parse(val: unknown): Infer 128 | } 129 | ``` 130 | 131 | `Discriminator` is a single string. 132 | 133 | When you use `K in Discriminator`, you could imagine it loops over every character. Because when doing mapped types, `in` loops over union types. It's common to see `K in keyof Obj`. 134 | 135 | However, `K in Discriminator` can be visualized as `K in "example"` where the type is `"example"`. Because this union type we could say only has one string, the loop happens once. 136 | 137 | As for `DiscriminatorType extends ZodLiteral`, I didn't include it initially. But TypeScript started to complain when using the zod object. It had a difficult time understanding the types. The solution there is to use `extends` with a generic to help TypeScript narrow down the type and process it. 138 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "typescript-fun", 3 | "version": "1.0.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "typescript-fun", 9 | "version": "1.0.0", 10 | "license": "ISC", 11 | "devDependencies": { 12 | "@typescript-eslint/eslint-plugin": "^6.14.0", 13 | "@typescript-eslint/parser": "^6.14.0", 14 | "eslint": "^8.55.0", 15 | "eslint-plugin-import": "^2.29.0", 16 | "typescript": "^5.3.3", 17 | "vitest": "^1.0.4" 18 | } 19 | }, 20 | "node_modules/@aashutoshrathi/word-wrap": { 21 | "version": "1.2.6", 22 | "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", 23 | "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", 24 | "dev": true, 25 | "engines": { 26 | "node": ">=0.10.0" 27 | } 28 | }, 29 | "node_modules/@esbuild/android-arm": { 30 | "version": "0.19.9", 31 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.9.tgz", 32 | "integrity": "sha512-jkYjjq7SdsWuNI6b5quymW0oC83NN5FdRPuCbs9HZ02mfVdAP8B8eeqLSYU3gb6OJEaY5CQabtTFbqBf26H3GA==", 33 | "cpu": [ 34 | "arm" 35 | ], 36 | "dev": true, 37 | "optional": true, 38 | "os": [ 39 | "android" 40 | ], 41 | "engines": { 42 | "node": ">=12" 43 | } 44 | }, 45 | "node_modules/@esbuild/android-arm64": { 46 | "version": "0.19.9", 47 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.9.tgz", 48 | "integrity": "sha512-q4cR+6ZD0938R19MyEW3jEsMzbb/1rulLXiNAJQADD/XYp7pT+rOS5JGxvpRW8dFDEfjW4wLgC/3FXIw4zYglQ==", 49 | "cpu": [ 50 | "arm64" 51 | ], 52 | "dev": true, 53 | "optional": true, 54 | "os": [ 55 | "android" 56 | ], 57 | "engines": { 58 | "node": ">=12" 59 | } 60 | }, 61 | "node_modules/@esbuild/android-x64": { 62 | "version": "0.19.9", 63 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.9.tgz", 64 | "integrity": "sha512-KOqoPntWAH6ZxDwx1D6mRntIgZh9KodzgNOy5Ebt9ghzffOk9X2c1sPwtM9P+0eXbefnDhqYfkh5PLP5ULtWFA==", 65 | "cpu": [ 66 | "x64" 67 | ], 68 | "dev": true, 69 | "optional": true, 70 | "os": [ 71 | "android" 72 | ], 73 | "engines": { 74 | "node": ">=12" 75 | } 76 | }, 77 | "node_modules/@esbuild/darwin-arm64": { 78 | "version": "0.19.9", 79 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.9.tgz", 80 | "integrity": "sha512-KBJ9S0AFyLVx2E5D8W0vExqRW01WqRtczUZ8NRu+Pi+87opZn5tL4Y0xT0mA4FtHctd0ZgwNoN639fUUGlNIWw==", 81 | "cpu": [ 82 | "arm64" 83 | ], 84 | "dev": true, 85 | "optional": true, 86 | "os": [ 87 | "darwin" 88 | ], 89 | "engines": { 90 | "node": ">=12" 91 | } 92 | }, 93 | "node_modules/@esbuild/darwin-x64": { 94 | "version": "0.19.9", 95 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.9.tgz", 96 | "integrity": "sha512-vE0VotmNTQaTdX0Q9dOHmMTao6ObjyPm58CHZr1UK7qpNleQyxlFlNCaHsHx6Uqv86VgPmR4o2wdNq3dP1qyDQ==", 97 | "cpu": [ 98 | "x64" 99 | ], 100 | "dev": true, 101 | "optional": true, 102 | "os": [ 103 | "darwin" 104 | ], 105 | "engines": { 106 | "node": ">=12" 107 | } 108 | }, 109 | "node_modules/@esbuild/freebsd-arm64": { 110 | "version": "0.19.9", 111 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.9.tgz", 112 | "integrity": "sha512-uFQyd/o1IjiEk3rUHSwUKkqZwqdvuD8GevWF065eqgYfexcVkxh+IJgwTaGZVu59XczZGcN/YMh9uF1fWD8j1g==", 113 | "cpu": [ 114 | "arm64" 115 | ], 116 | "dev": true, 117 | "optional": true, 118 | "os": [ 119 | "freebsd" 120 | ], 121 | "engines": { 122 | "node": ">=12" 123 | } 124 | }, 125 | "node_modules/@esbuild/freebsd-x64": { 126 | "version": "0.19.9", 127 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.9.tgz", 128 | "integrity": "sha512-WMLgWAtkdTbTu1AWacY7uoj/YtHthgqrqhf1OaEWnZb7PQgpt8eaA/F3LkV0E6K/Lc0cUr/uaVP/49iE4M4asA==", 129 | "cpu": [ 130 | "x64" 131 | ], 132 | "dev": true, 133 | "optional": true, 134 | "os": [ 135 | "freebsd" 136 | ], 137 | "engines": { 138 | "node": ">=12" 139 | } 140 | }, 141 | "node_modules/@esbuild/linux-arm": { 142 | "version": "0.19.9", 143 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.9.tgz", 144 | "integrity": "sha512-C/ChPohUYoyUaqn1h17m/6yt6OB14hbXvT8EgM1ZWaiiTYz7nWZR0SYmMnB5BzQA4GXl3BgBO1l8MYqL/He3qw==", 145 | "cpu": [ 146 | "arm" 147 | ], 148 | "dev": true, 149 | "optional": true, 150 | "os": [ 151 | "linux" 152 | ], 153 | "engines": { 154 | "node": ">=12" 155 | } 156 | }, 157 | "node_modules/@esbuild/linux-arm64": { 158 | "version": "0.19.9", 159 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.9.tgz", 160 | "integrity": "sha512-PiPblfe1BjK7WDAKR1Cr9O7VVPqVNpwFcPWgfn4xu0eMemzRp442hXyzF/fSwgrufI66FpHOEJk0yYdPInsmyQ==", 161 | "cpu": [ 162 | "arm64" 163 | ], 164 | "dev": true, 165 | "optional": true, 166 | "os": [ 167 | "linux" 168 | ], 169 | "engines": { 170 | "node": ">=12" 171 | } 172 | }, 173 | "node_modules/@esbuild/linux-ia32": { 174 | "version": "0.19.9", 175 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.9.tgz", 176 | "integrity": "sha512-f37i/0zE0MjDxijkPSQw1CO/7C27Eojqb+r3BbHVxMLkj8GCa78TrBZzvPyA/FNLUMzP3eyHCVkAopkKVja+6Q==", 177 | "cpu": [ 178 | "ia32" 179 | ], 180 | "dev": true, 181 | "optional": true, 182 | "os": [ 183 | "linux" 184 | ], 185 | "engines": { 186 | "node": ">=12" 187 | } 188 | }, 189 | "node_modules/@esbuild/linux-loong64": { 190 | "version": "0.19.9", 191 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.9.tgz", 192 | "integrity": "sha512-t6mN147pUIf3t6wUt3FeumoOTPfmv9Cc6DQlsVBpB7eCpLOqQDyWBP1ymXn1lDw4fNUSb/gBcKAmvTP49oIkaA==", 193 | "cpu": [ 194 | "loong64" 195 | ], 196 | "dev": true, 197 | "optional": true, 198 | "os": [ 199 | "linux" 200 | ], 201 | "engines": { 202 | "node": ">=12" 203 | } 204 | }, 205 | "node_modules/@esbuild/linux-mips64el": { 206 | "version": "0.19.9", 207 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.9.tgz", 208 | "integrity": "sha512-jg9fujJTNTQBuDXdmAg1eeJUL4Jds7BklOTkkH80ZgQIoCTdQrDaHYgbFZyeTq8zbY+axgptncko3v9p5hLZtw==", 209 | "cpu": [ 210 | "mips64el" 211 | ], 212 | "dev": true, 213 | "optional": true, 214 | "os": [ 215 | "linux" 216 | ], 217 | "engines": { 218 | "node": ">=12" 219 | } 220 | }, 221 | "node_modules/@esbuild/linux-ppc64": { 222 | "version": "0.19.9", 223 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.9.tgz", 224 | "integrity": "sha512-tkV0xUX0pUUgY4ha7z5BbDS85uI7ABw3V1d0RNTii7E9lbmV8Z37Pup2tsLV46SQWzjOeyDi1Q7Wx2+QM8WaCQ==", 225 | "cpu": [ 226 | "ppc64" 227 | ], 228 | "dev": true, 229 | "optional": true, 230 | "os": [ 231 | "linux" 232 | ], 233 | "engines": { 234 | "node": ">=12" 235 | } 236 | }, 237 | "node_modules/@esbuild/linux-riscv64": { 238 | "version": "0.19.9", 239 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.9.tgz", 240 | "integrity": "sha512-DfLp8dj91cufgPZDXr9p3FoR++m3ZJ6uIXsXrIvJdOjXVREtXuQCjfMfvmc3LScAVmLjcfloyVtpn43D56JFHg==", 241 | "cpu": [ 242 | "riscv64" 243 | ], 244 | "dev": true, 245 | "optional": true, 246 | "os": [ 247 | "linux" 248 | ], 249 | "engines": { 250 | "node": ">=12" 251 | } 252 | }, 253 | "node_modules/@esbuild/linux-s390x": { 254 | "version": "0.19.9", 255 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.9.tgz", 256 | "integrity": "sha512-zHbglfEdC88KMgCWpOl/zc6dDYJvWGLiUtmPRsr1OgCViu3z5GncvNVdf+6/56O2Ca8jUU+t1BW261V6kp8qdw==", 257 | "cpu": [ 258 | "s390x" 259 | ], 260 | "dev": true, 261 | "optional": true, 262 | "os": [ 263 | "linux" 264 | ], 265 | "engines": { 266 | "node": ">=12" 267 | } 268 | }, 269 | "node_modules/@esbuild/linux-x64": { 270 | "version": "0.19.9", 271 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.9.tgz", 272 | "integrity": "sha512-JUjpystGFFmNrEHQnIVG8hKwvA2DN5o7RqiO1CVX8EN/F/gkCjkUMgVn6hzScpwnJtl2mPR6I9XV1oW8k9O+0A==", 273 | "cpu": [ 274 | "x64" 275 | ], 276 | "dev": true, 277 | "optional": true, 278 | "os": [ 279 | "linux" 280 | ], 281 | "engines": { 282 | "node": ">=12" 283 | } 284 | }, 285 | "node_modules/@esbuild/netbsd-x64": { 286 | "version": "0.19.9", 287 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.9.tgz", 288 | "integrity": "sha512-GThgZPAwOBOsheA2RUlW5UeroRfESwMq/guy8uEe3wJlAOjpOXuSevLRd70NZ37ZrpO6RHGHgEHvPg1h3S1Jug==", 289 | "cpu": [ 290 | "x64" 291 | ], 292 | "dev": true, 293 | "optional": true, 294 | "os": [ 295 | "netbsd" 296 | ], 297 | "engines": { 298 | "node": ">=12" 299 | } 300 | }, 301 | "node_modules/@esbuild/openbsd-x64": { 302 | "version": "0.19.9", 303 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.9.tgz", 304 | "integrity": "sha512-Ki6PlzppaFVbLnD8PtlVQfsYw4S9n3eQl87cqgeIw+O3sRr9IghpfSKY62mggdt1yCSZ8QWvTZ9jo9fjDSg9uw==", 305 | "cpu": [ 306 | "x64" 307 | ], 308 | "dev": true, 309 | "optional": true, 310 | "os": [ 311 | "openbsd" 312 | ], 313 | "engines": { 314 | "node": ">=12" 315 | } 316 | }, 317 | "node_modules/@esbuild/sunos-x64": { 318 | "version": "0.19.9", 319 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.9.tgz", 320 | "integrity": "sha512-MLHj7k9hWh4y1ddkBpvRj2b9NCBhfgBt3VpWbHQnXRedVun/hC7sIyTGDGTfsGuXo4ebik2+3ShjcPbhtFwWDw==", 321 | "cpu": [ 322 | "x64" 323 | ], 324 | "dev": true, 325 | "optional": true, 326 | "os": [ 327 | "sunos" 328 | ], 329 | "engines": { 330 | "node": ">=12" 331 | } 332 | }, 333 | "node_modules/@esbuild/win32-arm64": { 334 | "version": "0.19.9", 335 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.9.tgz", 336 | "integrity": "sha512-GQoa6OrQ8G08guMFgeXPH7yE/8Dt0IfOGWJSfSH4uafwdC7rWwrfE6P9N8AtPGIjUzdo2+7bN8Xo3qC578olhg==", 337 | "cpu": [ 338 | "arm64" 339 | ], 340 | "dev": true, 341 | "optional": true, 342 | "os": [ 343 | "win32" 344 | ], 345 | "engines": { 346 | "node": ">=12" 347 | } 348 | }, 349 | "node_modules/@esbuild/win32-ia32": { 350 | "version": "0.19.9", 351 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.9.tgz", 352 | "integrity": "sha512-UOozV7Ntykvr5tSOlGCrqU3NBr3d8JqPes0QWN2WOXfvkWVGRajC+Ym0/Wj88fUgecUCLDdJPDF0Nna2UK3Qtg==", 353 | "cpu": [ 354 | "ia32" 355 | ], 356 | "dev": true, 357 | "optional": true, 358 | "os": [ 359 | "win32" 360 | ], 361 | "engines": { 362 | "node": ">=12" 363 | } 364 | }, 365 | "node_modules/@esbuild/win32-x64": { 366 | "version": "0.19.9", 367 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.9.tgz", 368 | "integrity": "sha512-oxoQgglOP7RH6iasDrhY+R/3cHrfwIDvRlT4CGChflq6twk8iENeVvMJjmvBb94Ik1Z+93iGO27err7w6l54GQ==", 369 | "cpu": [ 370 | "x64" 371 | ], 372 | "dev": true, 373 | "optional": true, 374 | "os": [ 375 | "win32" 376 | ], 377 | "engines": { 378 | "node": ">=12" 379 | } 380 | }, 381 | "node_modules/@eslint-community/eslint-utils": { 382 | "version": "4.4.0", 383 | "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", 384 | "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", 385 | "dev": true, 386 | "dependencies": { 387 | "eslint-visitor-keys": "^3.3.0" 388 | }, 389 | "engines": { 390 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 391 | }, 392 | "peerDependencies": { 393 | "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" 394 | } 395 | }, 396 | "node_modules/@eslint-community/regexpp": { 397 | "version": "4.10.0", 398 | "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", 399 | "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", 400 | "dev": true, 401 | "engines": { 402 | "node": "^12.0.0 || ^14.0.0 || >=16.0.0" 403 | } 404 | }, 405 | "node_modules/@eslint/eslintrc": { 406 | "version": "2.1.4", 407 | "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", 408 | "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", 409 | "dev": true, 410 | "dependencies": { 411 | "ajv": "^6.12.4", 412 | "debug": "^4.3.2", 413 | "espree": "^9.6.0", 414 | "globals": "^13.19.0", 415 | "ignore": "^5.2.0", 416 | "import-fresh": "^3.2.1", 417 | "js-yaml": "^4.1.0", 418 | "minimatch": "^3.1.2", 419 | "strip-json-comments": "^3.1.1" 420 | }, 421 | "engines": { 422 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 423 | }, 424 | "funding": { 425 | "url": "https://opencollective.com/eslint" 426 | } 427 | }, 428 | "node_modules/@eslint/js": { 429 | "version": "8.55.0", 430 | "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.55.0.tgz", 431 | "integrity": "sha512-qQfo2mxH5yVom1kacMtZZJFVdW+E70mqHMJvVg6WTLo+VBuQJ4TojZlfWBjK0ve5BdEeNAVxOsl/nvNMpJOaJA==", 432 | "dev": true, 433 | "engines": { 434 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 435 | } 436 | }, 437 | "node_modules/@humanwhocodes/config-array": { 438 | "version": "0.11.13", 439 | "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", 440 | "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", 441 | "dev": true, 442 | "dependencies": { 443 | "@humanwhocodes/object-schema": "^2.0.1", 444 | "debug": "^4.1.1", 445 | "minimatch": "^3.0.5" 446 | }, 447 | "engines": { 448 | "node": ">=10.10.0" 449 | } 450 | }, 451 | "node_modules/@humanwhocodes/module-importer": { 452 | "version": "1.0.1", 453 | "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", 454 | "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", 455 | "dev": true, 456 | "engines": { 457 | "node": ">=12.22" 458 | }, 459 | "funding": { 460 | "type": "github", 461 | "url": "https://github.com/sponsors/nzakas" 462 | } 463 | }, 464 | "node_modules/@humanwhocodes/object-schema": { 465 | "version": "2.0.1", 466 | "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", 467 | "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", 468 | "dev": true 469 | }, 470 | "node_modules/@jest/schemas": { 471 | "version": "29.6.3", 472 | "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz", 473 | "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==", 474 | "dev": true, 475 | "dependencies": { 476 | "@sinclair/typebox": "^0.27.8" 477 | }, 478 | "engines": { 479 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 480 | } 481 | }, 482 | "node_modules/@jridgewell/sourcemap-codec": { 483 | "version": "1.4.15", 484 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", 485 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", 486 | "dev": true 487 | }, 488 | "node_modules/@nodelib/fs.scandir": { 489 | "version": "2.1.5", 490 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 491 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 492 | "dev": true, 493 | "dependencies": { 494 | "@nodelib/fs.stat": "2.0.5", 495 | "run-parallel": "^1.1.9" 496 | }, 497 | "engines": { 498 | "node": ">= 8" 499 | } 500 | }, 501 | "node_modules/@nodelib/fs.stat": { 502 | "version": "2.0.5", 503 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 504 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 505 | "dev": true, 506 | "engines": { 507 | "node": ">= 8" 508 | } 509 | }, 510 | "node_modules/@nodelib/fs.walk": { 511 | "version": "1.2.8", 512 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 513 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 514 | "dev": true, 515 | "dependencies": { 516 | "@nodelib/fs.scandir": "2.1.5", 517 | "fastq": "^1.6.0" 518 | }, 519 | "engines": { 520 | "node": ">= 8" 521 | } 522 | }, 523 | "node_modules/@rollup/rollup-android-arm-eabi": { 524 | "version": "4.9.0", 525 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.0.tgz", 526 | "integrity": "sha512-+1ge/xmaJpm1KVBuIH38Z94zj9fBD+hp+/5WLaHgyY8XLq1ibxk/zj6dTXaqM2cAbYKq8jYlhHd6k05If1W5xA==", 527 | "cpu": [ 528 | "arm" 529 | ], 530 | "dev": true, 531 | "optional": true, 532 | "os": [ 533 | "android" 534 | ] 535 | }, 536 | "node_modules/@rollup/rollup-android-arm64": { 537 | "version": "4.9.0", 538 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.0.tgz", 539 | "integrity": "sha512-im6hUEyQ7ZfoZdNvtwgEJvBWZYauC9KVKq1w58LG2Zfz6zMd8gRrbN+xCVoqA2hv/v6fm9lp5LFGJ3za8EQH3A==", 540 | "cpu": [ 541 | "arm64" 542 | ], 543 | "dev": true, 544 | "optional": true, 545 | "os": [ 546 | "android" 547 | ] 548 | }, 549 | "node_modules/@rollup/rollup-darwin-arm64": { 550 | "version": "4.9.0", 551 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.0.tgz", 552 | "integrity": "sha512-u7aTMskN6Dmg1lCT0QJ+tINRt+ntUrvVkhbPfFz4bCwRZvjItx2nJtwJnJRlKMMaQCHRjrNqHRDYvE4mBm3DlQ==", 553 | "cpu": [ 554 | "arm64" 555 | ], 556 | "dev": true, 557 | "optional": true, 558 | "os": [ 559 | "darwin" 560 | ] 561 | }, 562 | "node_modules/@rollup/rollup-darwin-x64": { 563 | "version": "4.9.0", 564 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.0.tgz", 565 | "integrity": "sha512-8FvEl3w2ExmpcOmX5RJD0yqXcVSOqAJJUJ29Lca29Ik+3zPS1yFimr2fr5JSZ4Z5gt8/d7WqycpgkX9nocijSw==", 566 | "cpu": [ 567 | "x64" 568 | ], 569 | "dev": true, 570 | "optional": true, 571 | "os": [ 572 | "darwin" 573 | ] 574 | }, 575 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 576 | "version": "4.9.0", 577 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.0.tgz", 578 | "integrity": "sha512-lHoKYaRwd4gge+IpqJHCY+8Vc3hhdJfU6ukFnnrJasEBUvVlydP8PuwndbWfGkdgSvZhHfSEw6urrlBj0TSSfg==", 579 | "cpu": [ 580 | "arm" 581 | ], 582 | "dev": true, 583 | "optional": true, 584 | "os": [ 585 | "linux" 586 | ] 587 | }, 588 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 589 | "version": "4.9.0", 590 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.0.tgz", 591 | "integrity": "sha512-JbEPfhndYeWHfOSeh4DOFvNXrj7ls9S/2omijVsao+LBPTPayT1uKcK3dHW3MwDJ7KO11t9m2cVTqXnTKpeaiw==", 592 | "cpu": [ 593 | "arm64" 594 | ], 595 | "dev": true, 596 | "optional": true, 597 | "os": [ 598 | "linux" 599 | ] 600 | }, 601 | "node_modules/@rollup/rollup-linux-arm64-musl": { 602 | "version": "4.9.0", 603 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.0.tgz", 604 | "integrity": "sha512-ahqcSXLlcV2XUBM3/f/C6cRoh7NxYA/W7Yzuv4bDU1YscTFw7ay4LmD7l6OS8EMhTNvcrWGkEettL1Bhjf+B+w==", 605 | "cpu": [ 606 | "arm64" 607 | ], 608 | "dev": true, 609 | "optional": true, 610 | "os": [ 611 | "linux" 612 | ] 613 | }, 614 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 615 | "version": "4.9.0", 616 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.0.tgz", 617 | "integrity": "sha512-uwvOYNtLw8gVtrExKhdFsYHA/kotURUmZYlinH2VcQxNCQJeJXnkmWgw2hI9Xgzhgu7J9QvWiq9TtTVwWMDa+w==", 618 | "cpu": [ 619 | "riscv64" 620 | ], 621 | "dev": true, 622 | "optional": true, 623 | "os": [ 624 | "linux" 625 | ] 626 | }, 627 | "node_modules/@rollup/rollup-linux-x64-gnu": { 628 | "version": "4.9.0", 629 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.0.tgz", 630 | "integrity": "sha512-m6pkSwcZZD2LCFHZX/zW2aLIISyzWLU3hrLLzQKMI12+OLEzgruTovAxY5sCZJkipklaZqPy/2bEEBNjp+Y7xg==", 631 | "cpu": [ 632 | "x64" 633 | ], 634 | "dev": true, 635 | "optional": true, 636 | "os": [ 637 | "linux" 638 | ] 639 | }, 640 | "node_modules/@rollup/rollup-linux-x64-musl": { 641 | "version": "4.9.0", 642 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.0.tgz", 643 | "integrity": "sha512-VFAC1RDRSbU3iOF98X42KaVicAfKf0m0OvIu8dbnqhTe26Kh6Ym9JrDulz7Hbk7/9zGc41JkV02g+p3BivOdAg==", 644 | "cpu": [ 645 | "x64" 646 | ], 647 | "dev": true, 648 | "optional": true, 649 | "os": [ 650 | "linux" 651 | ] 652 | }, 653 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 654 | "version": "4.9.0", 655 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.0.tgz", 656 | "integrity": "sha512-9jPgMvTKXARz4inw6jezMLA2ihDBvgIU9Ml01hjdVpOcMKyxFBJrn83KVQINnbeqDv0+HdO1c09hgZ8N0s820Q==", 657 | "cpu": [ 658 | "arm64" 659 | ], 660 | "dev": true, 661 | "optional": true, 662 | "os": [ 663 | "win32" 664 | ] 665 | }, 666 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 667 | "version": "4.9.0", 668 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.0.tgz", 669 | "integrity": "sha512-WE4pT2kTXQN2bAv40Uog0AsV7/s9nT9HBWXAou8+++MBCnY51QS02KYtm6dQxxosKi1VIz/wZIrTQO5UP2EW+Q==", 670 | "cpu": [ 671 | "ia32" 672 | ], 673 | "dev": true, 674 | "optional": true, 675 | "os": [ 676 | "win32" 677 | ] 678 | }, 679 | "node_modules/@rollup/rollup-win32-x64-msvc": { 680 | "version": "4.9.0", 681 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.0.tgz", 682 | "integrity": "sha512-aPP5Q5AqNGuT0tnuEkK/g4mnt3ZhheiXrDIiSVIHN9mcN21OyXDVbEMqmXPE7e2OplNLDkcvV+ZoGJa2ZImFgw==", 683 | "cpu": [ 684 | "x64" 685 | ], 686 | "dev": true, 687 | "optional": true, 688 | "os": [ 689 | "win32" 690 | ] 691 | }, 692 | "node_modules/@sinclair/typebox": { 693 | "version": "0.27.8", 694 | "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", 695 | "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", 696 | "dev": true 697 | }, 698 | "node_modules/@types/json-schema": { 699 | "version": "7.0.15", 700 | "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", 701 | "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", 702 | "dev": true 703 | }, 704 | "node_modules/@types/json5": { 705 | "version": "0.0.29", 706 | "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", 707 | "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", 708 | "dev": true 709 | }, 710 | "node_modules/@types/semver": { 711 | "version": "7.5.6", 712 | "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", 713 | "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", 714 | "dev": true 715 | }, 716 | "node_modules/@typescript-eslint/eslint-plugin": { 717 | "version": "6.14.0", 718 | "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.14.0.tgz", 719 | "integrity": "sha512-1ZJBykBCXaSHG94vMMKmiHoL0MhNHKSVlcHVYZNw+BKxufhqQVTOawNpwwI1P5nIFZ/4jLVop0mcY6mJJDFNaw==", 720 | "dev": true, 721 | "dependencies": { 722 | "@eslint-community/regexpp": "^4.5.1", 723 | "@typescript-eslint/scope-manager": "6.14.0", 724 | "@typescript-eslint/type-utils": "6.14.0", 725 | "@typescript-eslint/utils": "6.14.0", 726 | "@typescript-eslint/visitor-keys": "6.14.0", 727 | "debug": "^4.3.4", 728 | "graphemer": "^1.4.0", 729 | "ignore": "^5.2.4", 730 | "natural-compare": "^1.4.0", 731 | "semver": "^7.5.4", 732 | "ts-api-utils": "^1.0.1" 733 | }, 734 | "engines": { 735 | "node": "^16.0.0 || >=18.0.0" 736 | }, 737 | "funding": { 738 | "type": "opencollective", 739 | "url": "https://opencollective.com/typescript-eslint" 740 | }, 741 | "peerDependencies": { 742 | "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", 743 | "eslint": "^7.0.0 || ^8.0.0" 744 | }, 745 | "peerDependenciesMeta": { 746 | "typescript": { 747 | "optional": true 748 | } 749 | } 750 | }, 751 | "node_modules/@typescript-eslint/parser": { 752 | "version": "6.14.0", 753 | "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.14.0.tgz", 754 | "integrity": "sha512-QjToC14CKacd4Pa7JK4GeB/vHmWFJckec49FR4hmIRf97+KXole0T97xxu9IFiPxVQ1DBWrQ5wreLwAGwWAVQA==", 755 | "dev": true, 756 | "dependencies": { 757 | "@typescript-eslint/scope-manager": "6.14.0", 758 | "@typescript-eslint/types": "6.14.0", 759 | "@typescript-eslint/typescript-estree": "6.14.0", 760 | "@typescript-eslint/visitor-keys": "6.14.0", 761 | "debug": "^4.3.4" 762 | }, 763 | "engines": { 764 | "node": "^16.0.0 || >=18.0.0" 765 | }, 766 | "funding": { 767 | "type": "opencollective", 768 | "url": "https://opencollective.com/typescript-eslint" 769 | }, 770 | "peerDependencies": { 771 | "eslint": "^7.0.0 || ^8.0.0" 772 | }, 773 | "peerDependenciesMeta": { 774 | "typescript": { 775 | "optional": true 776 | } 777 | } 778 | }, 779 | "node_modules/@typescript-eslint/scope-manager": { 780 | "version": "6.14.0", 781 | "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.14.0.tgz", 782 | "integrity": "sha512-VT7CFWHbZipPncAZtuALr9y3EuzY1b1t1AEkIq2bTXUPKw+pHoXflGNG5L+Gv6nKul1cz1VH8fz16IThIU0tdg==", 783 | "dev": true, 784 | "dependencies": { 785 | "@typescript-eslint/types": "6.14.0", 786 | "@typescript-eslint/visitor-keys": "6.14.0" 787 | }, 788 | "engines": { 789 | "node": "^16.0.0 || >=18.0.0" 790 | }, 791 | "funding": { 792 | "type": "opencollective", 793 | "url": "https://opencollective.com/typescript-eslint" 794 | } 795 | }, 796 | "node_modules/@typescript-eslint/type-utils": { 797 | "version": "6.14.0", 798 | "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.14.0.tgz", 799 | "integrity": "sha512-x6OC9Q7HfYKqjnuNu5a7kffIYs3No30isapRBJl1iCHLitD8O0lFbRcVGiOcuyN837fqXzPZ1NS10maQzZMKqw==", 800 | "dev": true, 801 | "dependencies": { 802 | "@typescript-eslint/typescript-estree": "6.14.0", 803 | "@typescript-eslint/utils": "6.14.0", 804 | "debug": "^4.3.4", 805 | "ts-api-utils": "^1.0.1" 806 | }, 807 | "engines": { 808 | "node": "^16.0.0 || >=18.0.0" 809 | }, 810 | "funding": { 811 | "type": "opencollective", 812 | "url": "https://opencollective.com/typescript-eslint" 813 | }, 814 | "peerDependencies": { 815 | "eslint": "^7.0.0 || ^8.0.0" 816 | }, 817 | "peerDependenciesMeta": { 818 | "typescript": { 819 | "optional": true 820 | } 821 | } 822 | }, 823 | "node_modules/@typescript-eslint/types": { 824 | "version": "6.14.0", 825 | "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.14.0.tgz", 826 | "integrity": "sha512-uty9H2K4Xs8E47z3SnXEPRNDfsis8JO27amp2GNCnzGETEW3yTqEIVg5+AI7U276oGF/tw6ZA+UesxeQ104ceA==", 827 | "dev": true, 828 | "engines": { 829 | "node": "^16.0.0 || >=18.0.0" 830 | }, 831 | "funding": { 832 | "type": "opencollective", 833 | "url": "https://opencollective.com/typescript-eslint" 834 | } 835 | }, 836 | "node_modules/@typescript-eslint/typescript-estree": { 837 | "version": "6.14.0", 838 | "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.14.0.tgz", 839 | "integrity": "sha512-yPkaLwK0yH2mZKFE/bXkPAkkFgOv15GJAUzgUVonAbv0Hr4PK/N2yaA/4XQbTZQdygiDkpt5DkxPELqHguNvyw==", 840 | "dev": true, 841 | "dependencies": { 842 | "@typescript-eslint/types": "6.14.0", 843 | "@typescript-eslint/visitor-keys": "6.14.0", 844 | "debug": "^4.3.4", 845 | "globby": "^11.1.0", 846 | "is-glob": "^4.0.3", 847 | "semver": "^7.5.4", 848 | "ts-api-utils": "^1.0.1" 849 | }, 850 | "engines": { 851 | "node": "^16.0.0 || >=18.0.0" 852 | }, 853 | "funding": { 854 | "type": "opencollective", 855 | "url": "https://opencollective.com/typescript-eslint" 856 | }, 857 | "peerDependenciesMeta": { 858 | "typescript": { 859 | "optional": true 860 | } 861 | } 862 | }, 863 | "node_modules/@typescript-eslint/utils": { 864 | "version": "6.14.0", 865 | "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.14.0.tgz", 866 | "integrity": "sha512-XwRTnbvRr7Ey9a1NT6jqdKX8y/atWG+8fAIu3z73HSP8h06i3r/ClMhmaF/RGWGW1tHJEwij1uEg2GbEmPYvYg==", 867 | "dev": true, 868 | "dependencies": { 869 | "@eslint-community/eslint-utils": "^4.4.0", 870 | "@types/json-schema": "^7.0.12", 871 | "@types/semver": "^7.5.0", 872 | "@typescript-eslint/scope-manager": "6.14.0", 873 | "@typescript-eslint/types": "6.14.0", 874 | "@typescript-eslint/typescript-estree": "6.14.0", 875 | "semver": "^7.5.4" 876 | }, 877 | "engines": { 878 | "node": "^16.0.0 || >=18.0.0" 879 | }, 880 | "funding": { 881 | "type": "opencollective", 882 | "url": "https://opencollective.com/typescript-eslint" 883 | }, 884 | "peerDependencies": { 885 | "eslint": "^7.0.0 || ^8.0.0" 886 | } 887 | }, 888 | "node_modules/@typescript-eslint/visitor-keys": { 889 | "version": "6.14.0", 890 | "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.14.0.tgz", 891 | "integrity": "sha512-fB5cw6GRhJUz03MrROVuj5Zm/Q+XWlVdIsFj+Zb1Hvqouc8t+XP2H5y53QYU/MGtd2dPg6/vJJlhoX3xc2ehfw==", 892 | "dev": true, 893 | "dependencies": { 894 | "@typescript-eslint/types": "6.14.0", 895 | "eslint-visitor-keys": "^3.4.1" 896 | }, 897 | "engines": { 898 | "node": "^16.0.0 || >=18.0.0" 899 | }, 900 | "funding": { 901 | "type": "opencollective", 902 | "url": "https://opencollective.com/typescript-eslint" 903 | } 904 | }, 905 | "node_modules/@ungap/structured-clone": { 906 | "version": "1.2.0", 907 | "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", 908 | "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", 909 | "dev": true 910 | }, 911 | "node_modules/@vitest/expect": { 912 | "version": "1.0.4", 913 | "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.0.4.tgz", 914 | "integrity": "sha512-/NRN9N88qjg3dkhmFcCBwhn/Ie4h064pY3iv7WLRsDJW7dXnEgeoa8W9zy7gIPluhz6CkgqiB3HmpIXgmEY5dQ==", 915 | "dev": true, 916 | "dependencies": { 917 | "@vitest/spy": "1.0.4", 918 | "@vitest/utils": "1.0.4", 919 | "chai": "^4.3.10" 920 | }, 921 | "funding": { 922 | "url": "https://opencollective.com/vitest" 923 | } 924 | }, 925 | "node_modules/@vitest/runner": { 926 | "version": "1.0.4", 927 | "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.0.4.tgz", 928 | "integrity": "sha512-rhOQ9FZTEkV41JWXozFM8YgOqaG9zA7QXbhg5gy6mFOVqh4PcupirIJ+wN7QjeJt8S8nJRYuZH1OjJjsbxAXTQ==", 929 | "dev": true, 930 | "dependencies": { 931 | "@vitest/utils": "1.0.4", 932 | "p-limit": "^5.0.0", 933 | "pathe": "^1.1.1" 934 | }, 935 | "funding": { 936 | "url": "https://opencollective.com/vitest" 937 | } 938 | }, 939 | "node_modules/@vitest/runner/node_modules/p-limit": { 940 | "version": "5.0.0", 941 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz", 942 | "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==", 943 | "dev": true, 944 | "dependencies": { 945 | "yocto-queue": "^1.0.0" 946 | }, 947 | "engines": { 948 | "node": ">=18" 949 | }, 950 | "funding": { 951 | "url": "https://github.com/sponsors/sindresorhus" 952 | } 953 | }, 954 | "node_modules/@vitest/runner/node_modules/yocto-queue": { 955 | "version": "1.0.0", 956 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz", 957 | "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==", 958 | "dev": true, 959 | "engines": { 960 | "node": ">=12.20" 961 | }, 962 | "funding": { 963 | "url": "https://github.com/sponsors/sindresorhus" 964 | } 965 | }, 966 | "node_modules/@vitest/snapshot": { 967 | "version": "1.0.4", 968 | "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.0.4.tgz", 969 | "integrity": "sha512-vkfXUrNyNRA/Gzsp2lpyJxh94vU2OHT1amoD6WuvUAA12n32xeVZQ0KjjQIf8F6u7bcq2A2k969fMVxEsxeKYA==", 970 | "dev": true, 971 | "dependencies": { 972 | "magic-string": "^0.30.5", 973 | "pathe": "^1.1.1", 974 | "pretty-format": "^29.7.0" 975 | }, 976 | "funding": { 977 | "url": "https://opencollective.com/vitest" 978 | } 979 | }, 980 | "node_modules/@vitest/spy": { 981 | "version": "1.0.4", 982 | "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.0.4.tgz", 983 | "integrity": "sha512-9ojTFRL1AJVh0hvfzAQpm0QS6xIS+1HFIw94kl/1ucTfGCaj1LV/iuJU4Y6cdR03EzPDygxTHwE1JOm+5RCcvA==", 984 | "dev": true, 985 | "dependencies": { 986 | "tinyspy": "^2.2.0" 987 | }, 988 | "funding": { 989 | "url": "https://opencollective.com/vitest" 990 | } 991 | }, 992 | "node_modules/@vitest/utils": { 993 | "version": "1.0.4", 994 | "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.0.4.tgz", 995 | "integrity": "sha512-gsswWDXxtt0QvtK/y/LWukN7sGMYmnCcv1qv05CsY6cU/Y1zpGX1QuvLs+GO1inczpE6Owixeel3ShkjhYtGfA==", 996 | "dev": true, 997 | "dependencies": { 998 | "diff-sequences": "^29.6.3", 999 | "loupe": "^2.3.7", 1000 | "pretty-format": "^29.7.0" 1001 | }, 1002 | "funding": { 1003 | "url": "https://opencollective.com/vitest" 1004 | } 1005 | }, 1006 | "node_modules/acorn": { 1007 | "version": "8.11.2", 1008 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", 1009 | "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", 1010 | "dev": true, 1011 | "bin": { 1012 | "acorn": "bin/acorn" 1013 | }, 1014 | "engines": { 1015 | "node": ">=0.4.0" 1016 | } 1017 | }, 1018 | "node_modules/acorn-jsx": { 1019 | "version": "5.3.2", 1020 | "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", 1021 | "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", 1022 | "dev": true, 1023 | "peerDependencies": { 1024 | "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" 1025 | } 1026 | }, 1027 | "node_modules/acorn-walk": { 1028 | "version": "8.3.1", 1029 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz", 1030 | "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==", 1031 | "dev": true, 1032 | "engines": { 1033 | "node": ">=0.4.0" 1034 | } 1035 | }, 1036 | "node_modules/ajv": { 1037 | "version": "6.12.6", 1038 | "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", 1039 | "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", 1040 | "dev": true, 1041 | "dependencies": { 1042 | "fast-deep-equal": "^3.1.1", 1043 | "fast-json-stable-stringify": "^2.0.0", 1044 | "json-schema-traverse": "^0.4.1", 1045 | "uri-js": "^4.2.2" 1046 | }, 1047 | "funding": { 1048 | "type": "github", 1049 | "url": "https://github.com/sponsors/epoberezkin" 1050 | } 1051 | }, 1052 | "node_modules/ansi-regex": { 1053 | "version": "5.0.1", 1054 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 1055 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 1056 | "dev": true, 1057 | "engines": { 1058 | "node": ">=8" 1059 | } 1060 | }, 1061 | "node_modules/ansi-styles": { 1062 | "version": "4.3.0", 1063 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 1064 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 1065 | "dev": true, 1066 | "dependencies": { 1067 | "color-convert": "^2.0.1" 1068 | }, 1069 | "engines": { 1070 | "node": ">=8" 1071 | }, 1072 | "funding": { 1073 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1074 | } 1075 | }, 1076 | "node_modules/argparse": { 1077 | "version": "2.0.1", 1078 | "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", 1079 | "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", 1080 | "dev": true 1081 | }, 1082 | "node_modules/array-buffer-byte-length": { 1083 | "version": "1.0.0", 1084 | "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", 1085 | "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", 1086 | "dev": true, 1087 | "dependencies": { 1088 | "call-bind": "^1.0.2", 1089 | "is-array-buffer": "^3.0.1" 1090 | }, 1091 | "funding": { 1092 | "url": "https://github.com/sponsors/ljharb" 1093 | } 1094 | }, 1095 | "node_modules/array-includes": { 1096 | "version": "3.1.7", 1097 | "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", 1098 | "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", 1099 | "dev": true, 1100 | "dependencies": { 1101 | "call-bind": "^1.0.2", 1102 | "define-properties": "^1.2.0", 1103 | "es-abstract": "^1.22.1", 1104 | "get-intrinsic": "^1.2.1", 1105 | "is-string": "^1.0.7" 1106 | }, 1107 | "engines": { 1108 | "node": ">= 0.4" 1109 | }, 1110 | "funding": { 1111 | "url": "https://github.com/sponsors/ljharb" 1112 | } 1113 | }, 1114 | "node_modules/array-union": { 1115 | "version": "2.1.0", 1116 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 1117 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 1118 | "dev": true, 1119 | "engines": { 1120 | "node": ">=8" 1121 | } 1122 | }, 1123 | "node_modules/array.prototype.findlastindex": { 1124 | "version": "1.2.3", 1125 | "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", 1126 | "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", 1127 | "dev": true, 1128 | "dependencies": { 1129 | "call-bind": "^1.0.2", 1130 | "define-properties": "^1.2.0", 1131 | "es-abstract": "^1.22.1", 1132 | "es-shim-unscopables": "^1.0.0", 1133 | "get-intrinsic": "^1.2.1" 1134 | }, 1135 | "engines": { 1136 | "node": ">= 0.4" 1137 | }, 1138 | "funding": { 1139 | "url": "https://github.com/sponsors/ljharb" 1140 | } 1141 | }, 1142 | "node_modules/array.prototype.flat": { 1143 | "version": "1.3.2", 1144 | "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", 1145 | "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", 1146 | "dev": true, 1147 | "dependencies": { 1148 | "call-bind": "^1.0.2", 1149 | "define-properties": "^1.2.0", 1150 | "es-abstract": "^1.22.1", 1151 | "es-shim-unscopables": "^1.0.0" 1152 | }, 1153 | "engines": { 1154 | "node": ">= 0.4" 1155 | }, 1156 | "funding": { 1157 | "url": "https://github.com/sponsors/ljharb" 1158 | } 1159 | }, 1160 | "node_modules/array.prototype.flatmap": { 1161 | "version": "1.3.2", 1162 | "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", 1163 | "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", 1164 | "dev": true, 1165 | "dependencies": { 1166 | "call-bind": "^1.0.2", 1167 | "define-properties": "^1.2.0", 1168 | "es-abstract": "^1.22.1", 1169 | "es-shim-unscopables": "^1.0.0" 1170 | }, 1171 | "engines": { 1172 | "node": ">= 0.4" 1173 | }, 1174 | "funding": { 1175 | "url": "https://github.com/sponsors/ljharb" 1176 | } 1177 | }, 1178 | "node_modules/arraybuffer.prototype.slice": { 1179 | "version": "1.0.2", 1180 | "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", 1181 | "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", 1182 | "dev": true, 1183 | "dependencies": { 1184 | "array-buffer-byte-length": "^1.0.0", 1185 | "call-bind": "^1.0.2", 1186 | "define-properties": "^1.2.0", 1187 | "es-abstract": "^1.22.1", 1188 | "get-intrinsic": "^1.2.1", 1189 | "is-array-buffer": "^3.0.2", 1190 | "is-shared-array-buffer": "^1.0.2" 1191 | }, 1192 | "engines": { 1193 | "node": ">= 0.4" 1194 | }, 1195 | "funding": { 1196 | "url": "https://github.com/sponsors/ljharb" 1197 | } 1198 | }, 1199 | "node_modules/assertion-error": { 1200 | "version": "1.1.0", 1201 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", 1202 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==", 1203 | "dev": true, 1204 | "engines": { 1205 | "node": "*" 1206 | } 1207 | }, 1208 | "node_modules/available-typed-arrays": { 1209 | "version": "1.0.5", 1210 | "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", 1211 | "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", 1212 | "dev": true, 1213 | "engines": { 1214 | "node": ">= 0.4" 1215 | }, 1216 | "funding": { 1217 | "url": "https://github.com/sponsors/ljharb" 1218 | } 1219 | }, 1220 | "node_modules/balanced-match": { 1221 | "version": "1.0.2", 1222 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1223 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1224 | "dev": true 1225 | }, 1226 | "node_modules/brace-expansion": { 1227 | "version": "1.1.11", 1228 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", 1229 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", 1230 | "dev": true, 1231 | "dependencies": { 1232 | "balanced-match": "^1.0.0", 1233 | "concat-map": "0.0.1" 1234 | } 1235 | }, 1236 | "node_modules/braces": { 1237 | "version": "3.0.2", 1238 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", 1239 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", 1240 | "dev": true, 1241 | "dependencies": { 1242 | "fill-range": "^7.0.1" 1243 | }, 1244 | "engines": { 1245 | "node": ">=8" 1246 | } 1247 | }, 1248 | "node_modules/cac": { 1249 | "version": "6.7.14", 1250 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 1251 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 1252 | "dev": true, 1253 | "engines": { 1254 | "node": ">=8" 1255 | } 1256 | }, 1257 | "node_modules/call-bind": { 1258 | "version": "1.0.5", 1259 | "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", 1260 | "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", 1261 | "dev": true, 1262 | "dependencies": { 1263 | "function-bind": "^1.1.2", 1264 | "get-intrinsic": "^1.2.1", 1265 | "set-function-length": "^1.1.1" 1266 | }, 1267 | "funding": { 1268 | "url": "https://github.com/sponsors/ljharb" 1269 | } 1270 | }, 1271 | "node_modules/callsites": { 1272 | "version": "3.1.0", 1273 | "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", 1274 | "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", 1275 | "dev": true, 1276 | "engines": { 1277 | "node": ">=6" 1278 | } 1279 | }, 1280 | "node_modules/chai": { 1281 | "version": "4.3.10", 1282 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz", 1283 | "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==", 1284 | "dev": true, 1285 | "dependencies": { 1286 | "assertion-error": "^1.1.0", 1287 | "check-error": "^1.0.3", 1288 | "deep-eql": "^4.1.3", 1289 | "get-func-name": "^2.0.2", 1290 | "loupe": "^2.3.6", 1291 | "pathval": "^1.1.1", 1292 | "type-detect": "^4.0.8" 1293 | }, 1294 | "engines": { 1295 | "node": ">=4" 1296 | } 1297 | }, 1298 | "node_modules/chalk": { 1299 | "version": "4.1.2", 1300 | "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", 1301 | "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", 1302 | "dev": true, 1303 | "dependencies": { 1304 | "ansi-styles": "^4.1.0", 1305 | "supports-color": "^7.1.0" 1306 | }, 1307 | "engines": { 1308 | "node": ">=10" 1309 | }, 1310 | "funding": { 1311 | "url": "https://github.com/chalk/chalk?sponsor=1" 1312 | } 1313 | }, 1314 | "node_modules/check-error": { 1315 | "version": "1.0.3", 1316 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz", 1317 | "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==", 1318 | "dev": true, 1319 | "dependencies": { 1320 | "get-func-name": "^2.0.2" 1321 | }, 1322 | "engines": { 1323 | "node": "*" 1324 | } 1325 | }, 1326 | "node_modules/color-convert": { 1327 | "version": "2.0.1", 1328 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1329 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1330 | "dev": true, 1331 | "dependencies": { 1332 | "color-name": "~1.1.4" 1333 | }, 1334 | "engines": { 1335 | "node": ">=7.0.0" 1336 | } 1337 | }, 1338 | "node_modules/color-name": { 1339 | "version": "1.1.4", 1340 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1341 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1342 | "dev": true 1343 | }, 1344 | "node_modules/concat-map": { 1345 | "version": "0.0.1", 1346 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", 1347 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", 1348 | "dev": true 1349 | }, 1350 | "node_modules/cross-spawn": { 1351 | "version": "7.0.3", 1352 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1353 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1354 | "dev": true, 1355 | "dependencies": { 1356 | "path-key": "^3.1.0", 1357 | "shebang-command": "^2.0.0", 1358 | "which": "^2.0.1" 1359 | }, 1360 | "engines": { 1361 | "node": ">= 8" 1362 | } 1363 | }, 1364 | "node_modules/debug": { 1365 | "version": "4.3.4", 1366 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", 1367 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", 1368 | "dev": true, 1369 | "dependencies": { 1370 | "ms": "2.1.2" 1371 | }, 1372 | "engines": { 1373 | "node": ">=6.0" 1374 | }, 1375 | "peerDependenciesMeta": { 1376 | "supports-color": { 1377 | "optional": true 1378 | } 1379 | } 1380 | }, 1381 | "node_modules/deep-eql": { 1382 | "version": "4.1.3", 1383 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz", 1384 | "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==", 1385 | "dev": true, 1386 | "dependencies": { 1387 | "type-detect": "^4.0.0" 1388 | }, 1389 | "engines": { 1390 | "node": ">=6" 1391 | } 1392 | }, 1393 | "node_modules/deep-is": { 1394 | "version": "0.1.4", 1395 | "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", 1396 | "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", 1397 | "dev": true 1398 | }, 1399 | "node_modules/define-data-property": { 1400 | "version": "1.1.1", 1401 | "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", 1402 | "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", 1403 | "dev": true, 1404 | "dependencies": { 1405 | "get-intrinsic": "^1.2.1", 1406 | "gopd": "^1.0.1", 1407 | "has-property-descriptors": "^1.0.0" 1408 | }, 1409 | "engines": { 1410 | "node": ">= 0.4" 1411 | } 1412 | }, 1413 | "node_modules/define-properties": { 1414 | "version": "1.2.1", 1415 | "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", 1416 | "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", 1417 | "dev": true, 1418 | "dependencies": { 1419 | "define-data-property": "^1.0.1", 1420 | "has-property-descriptors": "^1.0.0", 1421 | "object-keys": "^1.1.1" 1422 | }, 1423 | "engines": { 1424 | "node": ">= 0.4" 1425 | }, 1426 | "funding": { 1427 | "url": "https://github.com/sponsors/ljharb" 1428 | } 1429 | }, 1430 | "node_modules/diff-sequences": { 1431 | "version": "29.6.3", 1432 | "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", 1433 | "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", 1434 | "dev": true, 1435 | "engines": { 1436 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 1437 | } 1438 | }, 1439 | "node_modules/dir-glob": { 1440 | "version": "3.0.1", 1441 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 1442 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 1443 | "dev": true, 1444 | "dependencies": { 1445 | "path-type": "^4.0.0" 1446 | }, 1447 | "engines": { 1448 | "node": ">=8" 1449 | } 1450 | }, 1451 | "node_modules/doctrine": { 1452 | "version": "3.0.0", 1453 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", 1454 | "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", 1455 | "dev": true, 1456 | "dependencies": { 1457 | "esutils": "^2.0.2" 1458 | }, 1459 | "engines": { 1460 | "node": ">=6.0.0" 1461 | } 1462 | }, 1463 | "node_modules/es-abstract": { 1464 | "version": "1.22.3", 1465 | "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", 1466 | "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", 1467 | "dev": true, 1468 | "dependencies": { 1469 | "array-buffer-byte-length": "^1.0.0", 1470 | "arraybuffer.prototype.slice": "^1.0.2", 1471 | "available-typed-arrays": "^1.0.5", 1472 | "call-bind": "^1.0.5", 1473 | "es-set-tostringtag": "^2.0.1", 1474 | "es-to-primitive": "^1.2.1", 1475 | "function.prototype.name": "^1.1.6", 1476 | "get-intrinsic": "^1.2.2", 1477 | "get-symbol-description": "^1.0.0", 1478 | "globalthis": "^1.0.3", 1479 | "gopd": "^1.0.1", 1480 | "has-property-descriptors": "^1.0.0", 1481 | "has-proto": "^1.0.1", 1482 | "has-symbols": "^1.0.3", 1483 | "hasown": "^2.0.0", 1484 | "internal-slot": "^1.0.5", 1485 | "is-array-buffer": "^3.0.2", 1486 | "is-callable": "^1.2.7", 1487 | "is-negative-zero": "^2.0.2", 1488 | "is-regex": "^1.1.4", 1489 | "is-shared-array-buffer": "^1.0.2", 1490 | "is-string": "^1.0.7", 1491 | "is-typed-array": "^1.1.12", 1492 | "is-weakref": "^1.0.2", 1493 | "object-inspect": "^1.13.1", 1494 | "object-keys": "^1.1.1", 1495 | "object.assign": "^4.1.4", 1496 | "regexp.prototype.flags": "^1.5.1", 1497 | "safe-array-concat": "^1.0.1", 1498 | "safe-regex-test": "^1.0.0", 1499 | "string.prototype.trim": "^1.2.8", 1500 | "string.prototype.trimend": "^1.0.7", 1501 | "string.prototype.trimstart": "^1.0.7", 1502 | "typed-array-buffer": "^1.0.0", 1503 | "typed-array-byte-length": "^1.0.0", 1504 | "typed-array-byte-offset": "^1.0.0", 1505 | "typed-array-length": "^1.0.4", 1506 | "unbox-primitive": "^1.0.2", 1507 | "which-typed-array": "^1.1.13" 1508 | }, 1509 | "engines": { 1510 | "node": ">= 0.4" 1511 | }, 1512 | "funding": { 1513 | "url": "https://github.com/sponsors/ljharb" 1514 | } 1515 | }, 1516 | "node_modules/es-set-tostringtag": { 1517 | "version": "2.0.2", 1518 | "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", 1519 | "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", 1520 | "dev": true, 1521 | "dependencies": { 1522 | "get-intrinsic": "^1.2.2", 1523 | "has-tostringtag": "^1.0.0", 1524 | "hasown": "^2.0.0" 1525 | }, 1526 | "engines": { 1527 | "node": ">= 0.4" 1528 | } 1529 | }, 1530 | "node_modules/es-shim-unscopables": { 1531 | "version": "1.0.2", 1532 | "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", 1533 | "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", 1534 | "dev": true, 1535 | "dependencies": { 1536 | "hasown": "^2.0.0" 1537 | } 1538 | }, 1539 | "node_modules/es-to-primitive": { 1540 | "version": "1.2.1", 1541 | "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", 1542 | "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", 1543 | "dev": true, 1544 | "dependencies": { 1545 | "is-callable": "^1.1.4", 1546 | "is-date-object": "^1.0.1", 1547 | "is-symbol": "^1.0.2" 1548 | }, 1549 | "engines": { 1550 | "node": ">= 0.4" 1551 | }, 1552 | "funding": { 1553 | "url": "https://github.com/sponsors/ljharb" 1554 | } 1555 | }, 1556 | "node_modules/esbuild": { 1557 | "version": "0.19.9", 1558 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.9.tgz", 1559 | "integrity": "sha512-U9CHtKSy+EpPsEBa+/A2gMs/h3ylBC0H0KSqIg7tpztHerLi6nrrcoUJAkNCEPumx8yJ+Byic4BVwHgRbN0TBg==", 1560 | "dev": true, 1561 | "hasInstallScript": true, 1562 | "bin": { 1563 | "esbuild": "bin/esbuild" 1564 | }, 1565 | "engines": { 1566 | "node": ">=12" 1567 | }, 1568 | "optionalDependencies": { 1569 | "@esbuild/android-arm": "0.19.9", 1570 | "@esbuild/android-arm64": "0.19.9", 1571 | "@esbuild/android-x64": "0.19.9", 1572 | "@esbuild/darwin-arm64": "0.19.9", 1573 | "@esbuild/darwin-x64": "0.19.9", 1574 | "@esbuild/freebsd-arm64": "0.19.9", 1575 | "@esbuild/freebsd-x64": "0.19.9", 1576 | "@esbuild/linux-arm": "0.19.9", 1577 | "@esbuild/linux-arm64": "0.19.9", 1578 | "@esbuild/linux-ia32": "0.19.9", 1579 | "@esbuild/linux-loong64": "0.19.9", 1580 | "@esbuild/linux-mips64el": "0.19.9", 1581 | "@esbuild/linux-ppc64": "0.19.9", 1582 | "@esbuild/linux-riscv64": "0.19.9", 1583 | "@esbuild/linux-s390x": "0.19.9", 1584 | "@esbuild/linux-x64": "0.19.9", 1585 | "@esbuild/netbsd-x64": "0.19.9", 1586 | "@esbuild/openbsd-x64": "0.19.9", 1587 | "@esbuild/sunos-x64": "0.19.9", 1588 | "@esbuild/win32-arm64": "0.19.9", 1589 | "@esbuild/win32-ia32": "0.19.9", 1590 | "@esbuild/win32-x64": "0.19.9" 1591 | } 1592 | }, 1593 | "node_modules/escape-string-regexp": { 1594 | "version": "4.0.0", 1595 | "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", 1596 | "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", 1597 | "dev": true, 1598 | "engines": { 1599 | "node": ">=10" 1600 | }, 1601 | "funding": { 1602 | "url": "https://github.com/sponsors/sindresorhus" 1603 | } 1604 | }, 1605 | "node_modules/eslint": { 1606 | "version": "8.55.0", 1607 | "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.55.0.tgz", 1608 | "integrity": "sha512-iyUUAM0PCKj5QpwGfmCAG9XXbZCWsqP/eWAWrG/W0umvjuLRBECwSFdt+rCntju0xEH7teIABPwXpahftIaTdA==", 1609 | "dev": true, 1610 | "dependencies": { 1611 | "@eslint-community/eslint-utils": "^4.2.0", 1612 | "@eslint-community/regexpp": "^4.6.1", 1613 | "@eslint/eslintrc": "^2.1.4", 1614 | "@eslint/js": "8.55.0", 1615 | "@humanwhocodes/config-array": "^0.11.13", 1616 | "@humanwhocodes/module-importer": "^1.0.1", 1617 | "@nodelib/fs.walk": "^1.2.8", 1618 | "@ungap/structured-clone": "^1.2.0", 1619 | "ajv": "^6.12.4", 1620 | "chalk": "^4.0.0", 1621 | "cross-spawn": "^7.0.2", 1622 | "debug": "^4.3.2", 1623 | "doctrine": "^3.0.0", 1624 | "escape-string-regexp": "^4.0.0", 1625 | "eslint-scope": "^7.2.2", 1626 | "eslint-visitor-keys": "^3.4.3", 1627 | "espree": "^9.6.1", 1628 | "esquery": "^1.4.2", 1629 | "esutils": "^2.0.2", 1630 | "fast-deep-equal": "^3.1.3", 1631 | "file-entry-cache": "^6.0.1", 1632 | "find-up": "^5.0.0", 1633 | "glob-parent": "^6.0.2", 1634 | "globals": "^13.19.0", 1635 | "graphemer": "^1.4.0", 1636 | "ignore": "^5.2.0", 1637 | "imurmurhash": "^0.1.4", 1638 | "is-glob": "^4.0.0", 1639 | "is-path-inside": "^3.0.3", 1640 | "js-yaml": "^4.1.0", 1641 | "json-stable-stringify-without-jsonify": "^1.0.1", 1642 | "levn": "^0.4.1", 1643 | "lodash.merge": "^4.6.2", 1644 | "minimatch": "^3.1.2", 1645 | "natural-compare": "^1.4.0", 1646 | "optionator": "^0.9.3", 1647 | "strip-ansi": "^6.0.1", 1648 | "text-table": "^0.2.0" 1649 | }, 1650 | "bin": { 1651 | "eslint": "bin/eslint.js" 1652 | }, 1653 | "engines": { 1654 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1655 | }, 1656 | "funding": { 1657 | "url": "https://opencollective.com/eslint" 1658 | } 1659 | }, 1660 | "node_modules/eslint-import-resolver-node": { 1661 | "version": "0.3.9", 1662 | "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", 1663 | "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", 1664 | "dev": true, 1665 | "dependencies": { 1666 | "debug": "^3.2.7", 1667 | "is-core-module": "^2.13.0", 1668 | "resolve": "^1.22.4" 1669 | } 1670 | }, 1671 | "node_modules/eslint-import-resolver-node/node_modules/debug": { 1672 | "version": "3.2.7", 1673 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1674 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1675 | "dev": true, 1676 | "dependencies": { 1677 | "ms": "^2.1.1" 1678 | } 1679 | }, 1680 | "node_modules/eslint-module-utils": { 1681 | "version": "2.8.0", 1682 | "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", 1683 | "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", 1684 | "dev": true, 1685 | "dependencies": { 1686 | "debug": "^3.2.7" 1687 | }, 1688 | "engines": { 1689 | "node": ">=4" 1690 | }, 1691 | "peerDependenciesMeta": { 1692 | "eslint": { 1693 | "optional": true 1694 | } 1695 | } 1696 | }, 1697 | "node_modules/eslint-module-utils/node_modules/debug": { 1698 | "version": "3.2.7", 1699 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1700 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1701 | "dev": true, 1702 | "dependencies": { 1703 | "ms": "^2.1.1" 1704 | } 1705 | }, 1706 | "node_modules/eslint-plugin-import": { 1707 | "version": "2.29.0", 1708 | "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.0.tgz", 1709 | "integrity": "sha512-QPOO5NO6Odv5lpoTkddtutccQjysJuFxoPS7fAHO+9m9udNHvTCPSAMW9zGAYj8lAIdr40I8yPCdUYrncXtrwg==", 1710 | "dev": true, 1711 | "dependencies": { 1712 | "array-includes": "^3.1.7", 1713 | "array.prototype.findlastindex": "^1.2.3", 1714 | "array.prototype.flat": "^1.3.2", 1715 | "array.prototype.flatmap": "^1.3.2", 1716 | "debug": "^3.2.7", 1717 | "doctrine": "^2.1.0", 1718 | "eslint-import-resolver-node": "^0.3.9", 1719 | "eslint-module-utils": "^2.8.0", 1720 | "hasown": "^2.0.0", 1721 | "is-core-module": "^2.13.1", 1722 | "is-glob": "^4.0.3", 1723 | "minimatch": "^3.1.2", 1724 | "object.fromentries": "^2.0.7", 1725 | "object.groupby": "^1.0.1", 1726 | "object.values": "^1.1.7", 1727 | "semver": "^6.3.1", 1728 | "tsconfig-paths": "^3.14.2" 1729 | }, 1730 | "engines": { 1731 | "node": ">=4" 1732 | }, 1733 | "peerDependencies": { 1734 | "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" 1735 | } 1736 | }, 1737 | "node_modules/eslint-plugin-import/node_modules/debug": { 1738 | "version": "3.2.7", 1739 | "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", 1740 | "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", 1741 | "dev": true, 1742 | "dependencies": { 1743 | "ms": "^2.1.1" 1744 | } 1745 | }, 1746 | "node_modules/eslint-plugin-import/node_modules/doctrine": { 1747 | "version": "2.1.0", 1748 | "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", 1749 | "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", 1750 | "dev": true, 1751 | "dependencies": { 1752 | "esutils": "^2.0.2" 1753 | }, 1754 | "engines": { 1755 | "node": ">=0.10.0" 1756 | } 1757 | }, 1758 | "node_modules/eslint-plugin-import/node_modules/semver": { 1759 | "version": "6.3.1", 1760 | "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", 1761 | "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", 1762 | "dev": true, 1763 | "bin": { 1764 | "semver": "bin/semver.js" 1765 | } 1766 | }, 1767 | "node_modules/eslint-scope": { 1768 | "version": "7.2.2", 1769 | "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", 1770 | "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", 1771 | "dev": true, 1772 | "dependencies": { 1773 | "esrecurse": "^4.3.0", 1774 | "estraverse": "^5.2.0" 1775 | }, 1776 | "engines": { 1777 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1778 | }, 1779 | "funding": { 1780 | "url": "https://opencollective.com/eslint" 1781 | } 1782 | }, 1783 | "node_modules/eslint-visitor-keys": { 1784 | "version": "3.4.3", 1785 | "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", 1786 | "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", 1787 | "dev": true, 1788 | "engines": { 1789 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1790 | }, 1791 | "funding": { 1792 | "url": "https://opencollective.com/eslint" 1793 | } 1794 | }, 1795 | "node_modules/espree": { 1796 | "version": "9.6.1", 1797 | "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", 1798 | "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", 1799 | "dev": true, 1800 | "dependencies": { 1801 | "acorn": "^8.9.0", 1802 | "acorn-jsx": "^5.3.2", 1803 | "eslint-visitor-keys": "^3.4.1" 1804 | }, 1805 | "engines": { 1806 | "node": "^12.22.0 || ^14.17.0 || >=16.0.0" 1807 | }, 1808 | "funding": { 1809 | "url": "https://opencollective.com/eslint" 1810 | } 1811 | }, 1812 | "node_modules/esquery": { 1813 | "version": "1.5.0", 1814 | "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", 1815 | "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", 1816 | "dev": true, 1817 | "dependencies": { 1818 | "estraverse": "^5.1.0" 1819 | }, 1820 | "engines": { 1821 | "node": ">=0.10" 1822 | } 1823 | }, 1824 | "node_modules/esrecurse": { 1825 | "version": "4.3.0", 1826 | "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", 1827 | "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", 1828 | "dev": true, 1829 | "dependencies": { 1830 | "estraverse": "^5.2.0" 1831 | }, 1832 | "engines": { 1833 | "node": ">=4.0" 1834 | } 1835 | }, 1836 | "node_modules/estraverse": { 1837 | "version": "5.3.0", 1838 | "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", 1839 | "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", 1840 | "dev": true, 1841 | "engines": { 1842 | "node": ">=4.0" 1843 | } 1844 | }, 1845 | "node_modules/esutils": { 1846 | "version": "2.0.3", 1847 | "resolved": "https://registry.npmjs.org/esutils/-/esutils-2.0.3.tgz", 1848 | "integrity": "sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==", 1849 | "dev": true, 1850 | "engines": { 1851 | "node": ">=0.10.0" 1852 | } 1853 | }, 1854 | "node_modules/execa": { 1855 | "version": "8.0.1", 1856 | "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", 1857 | "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", 1858 | "dev": true, 1859 | "dependencies": { 1860 | "cross-spawn": "^7.0.3", 1861 | "get-stream": "^8.0.1", 1862 | "human-signals": "^5.0.0", 1863 | "is-stream": "^3.0.0", 1864 | "merge-stream": "^2.0.0", 1865 | "npm-run-path": "^5.1.0", 1866 | "onetime": "^6.0.0", 1867 | "signal-exit": "^4.1.0", 1868 | "strip-final-newline": "^3.0.0" 1869 | }, 1870 | "engines": { 1871 | "node": ">=16.17" 1872 | }, 1873 | "funding": { 1874 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 1875 | } 1876 | }, 1877 | "node_modules/fast-deep-equal": { 1878 | "version": "3.1.3", 1879 | "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz", 1880 | "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", 1881 | "dev": true 1882 | }, 1883 | "node_modules/fast-glob": { 1884 | "version": "3.3.2", 1885 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", 1886 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", 1887 | "dev": true, 1888 | "dependencies": { 1889 | "@nodelib/fs.stat": "^2.0.2", 1890 | "@nodelib/fs.walk": "^1.2.3", 1891 | "glob-parent": "^5.1.2", 1892 | "merge2": "^1.3.0", 1893 | "micromatch": "^4.0.4" 1894 | }, 1895 | "engines": { 1896 | "node": ">=8.6.0" 1897 | } 1898 | }, 1899 | "node_modules/fast-glob/node_modules/glob-parent": { 1900 | "version": "5.1.2", 1901 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1902 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1903 | "dev": true, 1904 | "dependencies": { 1905 | "is-glob": "^4.0.1" 1906 | }, 1907 | "engines": { 1908 | "node": ">= 6" 1909 | } 1910 | }, 1911 | "node_modules/fast-json-stable-stringify": { 1912 | "version": "2.1.0", 1913 | "resolved": "https://registry.npmjs.org/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz", 1914 | "integrity": "sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==", 1915 | "dev": true 1916 | }, 1917 | "node_modules/fast-levenshtein": { 1918 | "version": "2.0.6", 1919 | "resolved": "https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz", 1920 | "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", 1921 | "dev": true 1922 | }, 1923 | "node_modules/fastq": { 1924 | "version": "1.15.0", 1925 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1926 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1927 | "dev": true, 1928 | "dependencies": { 1929 | "reusify": "^1.0.4" 1930 | } 1931 | }, 1932 | "node_modules/file-entry-cache": { 1933 | "version": "6.0.1", 1934 | "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", 1935 | "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", 1936 | "dev": true, 1937 | "dependencies": { 1938 | "flat-cache": "^3.0.4" 1939 | }, 1940 | "engines": { 1941 | "node": "^10.12.0 || >=12.0.0" 1942 | } 1943 | }, 1944 | "node_modules/fill-range": { 1945 | "version": "7.0.1", 1946 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", 1947 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", 1948 | "dev": true, 1949 | "dependencies": { 1950 | "to-regex-range": "^5.0.1" 1951 | }, 1952 | "engines": { 1953 | "node": ">=8" 1954 | } 1955 | }, 1956 | "node_modules/find-up": { 1957 | "version": "5.0.0", 1958 | "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", 1959 | "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", 1960 | "dev": true, 1961 | "dependencies": { 1962 | "locate-path": "^6.0.0", 1963 | "path-exists": "^4.0.0" 1964 | }, 1965 | "engines": { 1966 | "node": ">=10" 1967 | }, 1968 | "funding": { 1969 | "url": "https://github.com/sponsors/sindresorhus" 1970 | } 1971 | }, 1972 | "node_modules/flat-cache": { 1973 | "version": "3.2.0", 1974 | "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", 1975 | "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", 1976 | "dev": true, 1977 | "dependencies": { 1978 | "flatted": "^3.2.9", 1979 | "keyv": "^4.5.3", 1980 | "rimraf": "^3.0.2" 1981 | }, 1982 | "engines": { 1983 | "node": "^10.12.0 || >=12.0.0" 1984 | } 1985 | }, 1986 | "node_modules/flatted": { 1987 | "version": "3.2.9", 1988 | "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", 1989 | "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", 1990 | "dev": true 1991 | }, 1992 | "node_modules/for-each": { 1993 | "version": "0.3.3", 1994 | "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", 1995 | "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", 1996 | "dev": true, 1997 | "dependencies": { 1998 | "is-callable": "^1.1.3" 1999 | } 2000 | }, 2001 | "node_modules/fs.realpath": { 2002 | "version": "1.0.0", 2003 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 2004 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 2005 | "dev": true 2006 | }, 2007 | "node_modules/fsevents": { 2008 | "version": "2.3.3", 2009 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 2010 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 2011 | "dev": true, 2012 | "hasInstallScript": true, 2013 | "optional": true, 2014 | "os": [ 2015 | "darwin" 2016 | ], 2017 | "engines": { 2018 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 2019 | } 2020 | }, 2021 | "node_modules/function-bind": { 2022 | "version": "1.1.2", 2023 | "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", 2024 | "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", 2025 | "dev": true, 2026 | "funding": { 2027 | "url": "https://github.com/sponsors/ljharb" 2028 | } 2029 | }, 2030 | "node_modules/function.prototype.name": { 2031 | "version": "1.1.6", 2032 | "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", 2033 | "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", 2034 | "dev": true, 2035 | "dependencies": { 2036 | "call-bind": "^1.0.2", 2037 | "define-properties": "^1.2.0", 2038 | "es-abstract": "^1.22.1", 2039 | "functions-have-names": "^1.2.3" 2040 | }, 2041 | "engines": { 2042 | "node": ">= 0.4" 2043 | }, 2044 | "funding": { 2045 | "url": "https://github.com/sponsors/ljharb" 2046 | } 2047 | }, 2048 | "node_modules/functions-have-names": { 2049 | "version": "1.2.3", 2050 | "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", 2051 | "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", 2052 | "dev": true, 2053 | "funding": { 2054 | "url": "https://github.com/sponsors/ljharb" 2055 | } 2056 | }, 2057 | "node_modules/get-func-name": { 2058 | "version": "2.0.2", 2059 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", 2060 | "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", 2061 | "dev": true, 2062 | "engines": { 2063 | "node": "*" 2064 | } 2065 | }, 2066 | "node_modules/get-intrinsic": { 2067 | "version": "1.2.2", 2068 | "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", 2069 | "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", 2070 | "dev": true, 2071 | "dependencies": { 2072 | "function-bind": "^1.1.2", 2073 | "has-proto": "^1.0.1", 2074 | "has-symbols": "^1.0.3", 2075 | "hasown": "^2.0.0" 2076 | }, 2077 | "funding": { 2078 | "url": "https://github.com/sponsors/ljharb" 2079 | } 2080 | }, 2081 | "node_modules/get-stream": { 2082 | "version": "8.0.1", 2083 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", 2084 | "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", 2085 | "dev": true, 2086 | "engines": { 2087 | "node": ">=16" 2088 | }, 2089 | "funding": { 2090 | "url": "https://github.com/sponsors/sindresorhus" 2091 | } 2092 | }, 2093 | "node_modules/get-symbol-description": { 2094 | "version": "1.0.0", 2095 | "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", 2096 | "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", 2097 | "dev": true, 2098 | "dependencies": { 2099 | "call-bind": "^1.0.2", 2100 | "get-intrinsic": "^1.1.1" 2101 | }, 2102 | "engines": { 2103 | "node": ">= 0.4" 2104 | }, 2105 | "funding": { 2106 | "url": "https://github.com/sponsors/ljharb" 2107 | } 2108 | }, 2109 | "node_modules/glob": { 2110 | "version": "7.2.3", 2111 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", 2112 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", 2113 | "dev": true, 2114 | "dependencies": { 2115 | "fs.realpath": "^1.0.0", 2116 | "inflight": "^1.0.4", 2117 | "inherits": "2", 2118 | "minimatch": "^3.1.1", 2119 | "once": "^1.3.0", 2120 | "path-is-absolute": "^1.0.0" 2121 | }, 2122 | "engines": { 2123 | "node": "*" 2124 | }, 2125 | "funding": { 2126 | "url": "https://github.com/sponsors/isaacs" 2127 | } 2128 | }, 2129 | "node_modules/glob-parent": { 2130 | "version": "6.0.2", 2131 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", 2132 | "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", 2133 | "dev": true, 2134 | "dependencies": { 2135 | "is-glob": "^4.0.3" 2136 | }, 2137 | "engines": { 2138 | "node": ">=10.13.0" 2139 | } 2140 | }, 2141 | "node_modules/globals": { 2142 | "version": "13.24.0", 2143 | "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", 2144 | "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", 2145 | "dev": true, 2146 | "dependencies": { 2147 | "type-fest": "^0.20.2" 2148 | }, 2149 | "engines": { 2150 | "node": ">=8" 2151 | }, 2152 | "funding": { 2153 | "url": "https://github.com/sponsors/sindresorhus" 2154 | } 2155 | }, 2156 | "node_modules/globalthis": { 2157 | "version": "1.0.3", 2158 | "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", 2159 | "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", 2160 | "dev": true, 2161 | "dependencies": { 2162 | "define-properties": "^1.1.3" 2163 | }, 2164 | "engines": { 2165 | "node": ">= 0.4" 2166 | }, 2167 | "funding": { 2168 | "url": "https://github.com/sponsors/ljharb" 2169 | } 2170 | }, 2171 | "node_modules/globby": { 2172 | "version": "11.1.0", 2173 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 2174 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 2175 | "dev": true, 2176 | "dependencies": { 2177 | "array-union": "^2.1.0", 2178 | "dir-glob": "^3.0.1", 2179 | "fast-glob": "^3.2.9", 2180 | "ignore": "^5.2.0", 2181 | "merge2": "^1.4.1", 2182 | "slash": "^3.0.0" 2183 | }, 2184 | "engines": { 2185 | "node": ">=10" 2186 | }, 2187 | "funding": { 2188 | "url": "https://github.com/sponsors/sindresorhus" 2189 | } 2190 | }, 2191 | "node_modules/gopd": { 2192 | "version": "1.0.1", 2193 | "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", 2194 | "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", 2195 | "dev": true, 2196 | "dependencies": { 2197 | "get-intrinsic": "^1.1.3" 2198 | }, 2199 | "funding": { 2200 | "url": "https://github.com/sponsors/ljharb" 2201 | } 2202 | }, 2203 | "node_modules/graphemer": { 2204 | "version": "1.4.0", 2205 | "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", 2206 | "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", 2207 | "dev": true 2208 | }, 2209 | "node_modules/has-bigints": { 2210 | "version": "1.0.2", 2211 | "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", 2212 | "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", 2213 | "dev": true, 2214 | "funding": { 2215 | "url": "https://github.com/sponsors/ljharb" 2216 | } 2217 | }, 2218 | "node_modules/has-flag": { 2219 | "version": "4.0.0", 2220 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 2221 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 2222 | "dev": true, 2223 | "engines": { 2224 | "node": ">=8" 2225 | } 2226 | }, 2227 | "node_modules/has-property-descriptors": { 2228 | "version": "1.0.1", 2229 | "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", 2230 | "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", 2231 | "dev": true, 2232 | "dependencies": { 2233 | "get-intrinsic": "^1.2.2" 2234 | }, 2235 | "funding": { 2236 | "url": "https://github.com/sponsors/ljharb" 2237 | } 2238 | }, 2239 | "node_modules/has-proto": { 2240 | "version": "1.0.1", 2241 | "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", 2242 | "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", 2243 | "dev": true, 2244 | "engines": { 2245 | "node": ">= 0.4" 2246 | }, 2247 | "funding": { 2248 | "url": "https://github.com/sponsors/ljharb" 2249 | } 2250 | }, 2251 | "node_modules/has-symbols": { 2252 | "version": "1.0.3", 2253 | "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", 2254 | "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", 2255 | "dev": true, 2256 | "engines": { 2257 | "node": ">= 0.4" 2258 | }, 2259 | "funding": { 2260 | "url": "https://github.com/sponsors/ljharb" 2261 | } 2262 | }, 2263 | "node_modules/has-tostringtag": { 2264 | "version": "1.0.0", 2265 | "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", 2266 | "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", 2267 | "dev": true, 2268 | "dependencies": { 2269 | "has-symbols": "^1.0.2" 2270 | }, 2271 | "engines": { 2272 | "node": ">= 0.4" 2273 | }, 2274 | "funding": { 2275 | "url": "https://github.com/sponsors/ljharb" 2276 | } 2277 | }, 2278 | "node_modules/hasown": { 2279 | "version": "2.0.0", 2280 | "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", 2281 | "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", 2282 | "dev": true, 2283 | "dependencies": { 2284 | "function-bind": "^1.1.2" 2285 | }, 2286 | "engines": { 2287 | "node": ">= 0.4" 2288 | } 2289 | }, 2290 | "node_modules/human-signals": { 2291 | "version": "5.0.0", 2292 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", 2293 | "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", 2294 | "dev": true, 2295 | "engines": { 2296 | "node": ">=16.17.0" 2297 | } 2298 | }, 2299 | "node_modules/ignore": { 2300 | "version": "5.3.0", 2301 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", 2302 | "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", 2303 | "dev": true, 2304 | "engines": { 2305 | "node": ">= 4" 2306 | } 2307 | }, 2308 | "node_modules/import-fresh": { 2309 | "version": "3.3.0", 2310 | "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", 2311 | "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", 2312 | "dev": true, 2313 | "dependencies": { 2314 | "parent-module": "^1.0.0", 2315 | "resolve-from": "^4.0.0" 2316 | }, 2317 | "engines": { 2318 | "node": ">=6" 2319 | }, 2320 | "funding": { 2321 | "url": "https://github.com/sponsors/sindresorhus" 2322 | } 2323 | }, 2324 | "node_modules/imurmurhash": { 2325 | "version": "0.1.4", 2326 | "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", 2327 | "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", 2328 | "dev": true, 2329 | "engines": { 2330 | "node": ">=0.8.19" 2331 | } 2332 | }, 2333 | "node_modules/inflight": { 2334 | "version": "1.0.6", 2335 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 2336 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 2337 | "dev": true, 2338 | "dependencies": { 2339 | "once": "^1.3.0", 2340 | "wrappy": "1" 2341 | } 2342 | }, 2343 | "node_modules/inherits": { 2344 | "version": "2.0.4", 2345 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 2346 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 2347 | "dev": true 2348 | }, 2349 | "node_modules/internal-slot": { 2350 | "version": "1.0.6", 2351 | "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", 2352 | "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", 2353 | "dev": true, 2354 | "dependencies": { 2355 | "get-intrinsic": "^1.2.2", 2356 | "hasown": "^2.0.0", 2357 | "side-channel": "^1.0.4" 2358 | }, 2359 | "engines": { 2360 | "node": ">= 0.4" 2361 | } 2362 | }, 2363 | "node_modules/is-array-buffer": { 2364 | "version": "3.0.2", 2365 | "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", 2366 | "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", 2367 | "dev": true, 2368 | "dependencies": { 2369 | "call-bind": "^1.0.2", 2370 | "get-intrinsic": "^1.2.0", 2371 | "is-typed-array": "^1.1.10" 2372 | }, 2373 | "funding": { 2374 | "url": "https://github.com/sponsors/ljharb" 2375 | } 2376 | }, 2377 | "node_modules/is-bigint": { 2378 | "version": "1.0.4", 2379 | "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", 2380 | "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", 2381 | "dev": true, 2382 | "dependencies": { 2383 | "has-bigints": "^1.0.1" 2384 | }, 2385 | "funding": { 2386 | "url": "https://github.com/sponsors/ljharb" 2387 | } 2388 | }, 2389 | "node_modules/is-boolean-object": { 2390 | "version": "1.1.2", 2391 | "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", 2392 | "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", 2393 | "dev": true, 2394 | "dependencies": { 2395 | "call-bind": "^1.0.2", 2396 | "has-tostringtag": "^1.0.0" 2397 | }, 2398 | "engines": { 2399 | "node": ">= 0.4" 2400 | }, 2401 | "funding": { 2402 | "url": "https://github.com/sponsors/ljharb" 2403 | } 2404 | }, 2405 | "node_modules/is-callable": { 2406 | "version": "1.2.7", 2407 | "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", 2408 | "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", 2409 | "dev": true, 2410 | "engines": { 2411 | "node": ">= 0.4" 2412 | }, 2413 | "funding": { 2414 | "url": "https://github.com/sponsors/ljharb" 2415 | } 2416 | }, 2417 | "node_modules/is-core-module": { 2418 | "version": "2.13.1", 2419 | "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", 2420 | "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", 2421 | "dev": true, 2422 | "dependencies": { 2423 | "hasown": "^2.0.0" 2424 | }, 2425 | "funding": { 2426 | "url": "https://github.com/sponsors/ljharb" 2427 | } 2428 | }, 2429 | "node_modules/is-date-object": { 2430 | "version": "1.0.5", 2431 | "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", 2432 | "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", 2433 | "dev": true, 2434 | "dependencies": { 2435 | "has-tostringtag": "^1.0.0" 2436 | }, 2437 | "engines": { 2438 | "node": ">= 0.4" 2439 | }, 2440 | "funding": { 2441 | "url": "https://github.com/sponsors/ljharb" 2442 | } 2443 | }, 2444 | "node_modules/is-extglob": { 2445 | "version": "2.1.1", 2446 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 2447 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 2448 | "dev": true, 2449 | "engines": { 2450 | "node": ">=0.10.0" 2451 | } 2452 | }, 2453 | "node_modules/is-glob": { 2454 | "version": "4.0.3", 2455 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 2456 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 2457 | "dev": true, 2458 | "dependencies": { 2459 | "is-extglob": "^2.1.1" 2460 | }, 2461 | "engines": { 2462 | "node": ">=0.10.0" 2463 | } 2464 | }, 2465 | "node_modules/is-negative-zero": { 2466 | "version": "2.0.2", 2467 | "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", 2468 | "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", 2469 | "dev": true, 2470 | "engines": { 2471 | "node": ">= 0.4" 2472 | }, 2473 | "funding": { 2474 | "url": "https://github.com/sponsors/ljharb" 2475 | } 2476 | }, 2477 | "node_modules/is-number": { 2478 | "version": "7.0.0", 2479 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 2480 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 2481 | "dev": true, 2482 | "engines": { 2483 | "node": ">=0.12.0" 2484 | } 2485 | }, 2486 | "node_modules/is-number-object": { 2487 | "version": "1.0.7", 2488 | "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", 2489 | "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", 2490 | "dev": true, 2491 | "dependencies": { 2492 | "has-tostringtag": "^1.0.0" 2493 | }, 2494 | "engines": { 2495 | "node": ">= 0.4" 2496 | }, 2497 | "funding": { 2498 | "url": "https://github.com/sponsors/ljharb" 2499 | } 2500 | }, 2501 | "node_modules/is-path-inside": { 2502 | "version": "3.0.3", 2503 | "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", 2504 | "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", 2505 | "dev": true, 2506 | "engines": { 2507 | "node": ">=8" 2508 | } 2509 | }, 2510 | "node_modules/is-regex": { 2511 | "version": "1.1.4", 2512 | "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", 2513 | "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", 2514 | "dev": true, 2515 | "dependencies": { 2516 | "call-bind": "^1.0.2", 2517 | "has-tostringtag": "^1.0.0" 2518 | }, 2519 | "engines": { 2520 | "node": ">= 0.4" 2521 | }, 2522 | "funding": { 2523 | "url": "https://github.com/sponsors/ljharb" 2524 | } 2525 | }, 2526 | "node_modules/is-shared-array-buffer": { 2527 | "version": "1.0.2", 2528 | "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", 2529 | "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", 2530 | "dev": true, 2531 | "dependencies": { 2532 | "call-bind": "^1.0.2" 2533 | }, 2534 | "funding": { 2535 | "url": "https://github.com/sponsors/ljharb" 2536 | } 2537 | }, 2538 | "node_modules/is-stream": { 2539 | "version": "3.0.0", 2540 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", 2541 | "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", 2542 | "dev": true, 2543 | "engines": { 2544 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2545 | }, 2546 | "funding": { 2547 | "url": "https://github.com/sponsors/sindresorhus" 2548 | } 2549 | }, 2550 | "node_modules/is-string": { 2551 | "version": "1.0.7", 2552 | "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", 2553 | "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", 2554 | "dev": true, 2555 | "dependencies": { 2556 | "has-tostringtag": "^1.0.0" 2557 | }, 2558 | "engines": { 2559 | "node": ">= 0.4" 2560 | }, 2561 | "funding": { 2562 | "url": "https://github.com/sponsors/ljharb" 2563 | } 2564 | }, 2565 | "node_modules/is-symbol": { 2566 | "version": "1.0.4", 2567 | "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", 2568 | "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", 2569 | "dev": true, 2570 | "dependencies": { 2571 | "has-symbols": "^1.0.2" 2572 | }, 2573 | "engines": { 2574 | "node": ">= 0.4" 2575 | }, 2576 | "funding": { 2577 | "url": "https://github.com/sponsors/ljharb" 2578 | } 2579 | }, 2580 | "node_modules/is-typed-array": { 2581 | "version": "1.1.12", 2582 | "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", 2583 | "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", 2584 | "dev": true, 2585 | "dependencies": { 2586 | "which-typed-array": "^1.1.11" 2587 | }, 2588 | "engines": { 2589 | "node": ">= 0.4" 2590 | }, 2591 | "funding": { 2592 | "url": "https://github.com/sponsors/ljharb" 2593 | } 2594 | }, 2595 | "node_modules/is-weakref": { 2596 | "version": "1.0.2", 2597 | "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", 2598 | "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", 2599 | "dev": true, 2600 | "dependencies": { 2601 | "call-bind": "^1.0.2" 2602 | }, 2603 | "funding": { 2604 | "url": "https://github.com/sponsors/ljharb" 2605 | } 2606 | }, 2607 | "node_modules/isarray": { 2608 | "version": "2.0.5", 2609 | "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", 2610 | "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", 2611 | "dev": true 2612 | }, 2613 | "node_modules/isexe": { 2614 | "version": "2.0.0", 2615 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 2616 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 2617 | "dev": true 2618 | }, 2619 | "node_modules/js-yaml": { 2620 | "version": "4.1.0", 2621 | "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", 2622 | "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", 2623 | "dev": true, 2624 | "dependencies": { 2625 | "argparse": "^2.0.1" 2626 | }, 2627 | "bin": { 2628 | "js-yaml": "bin/js-yaml.js" 2629 | } 2630 | }, 2631 | "node_modules/json-buffer": { 2632 | "version": "3.0.1", 2633 | "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", 2634 | "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", 2635 | "dev": true 2636 | }, 2637 | "node_modules/json-schema-traverse": { 2638 | "version": "0.4.1", 2639 | "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", 2640 | "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", 2641 | "dev": true 2642 | }, 2643 | "node_modules/json-stable-stringify-without-jsonify": { 2644 | "version": "1.0.1", 2645 | "resolved": "https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz", 2646 | "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", 2647 | "dev": true 2648 | }, 2649 | "node_modules/json5": { 2650 | "version": "1.0.2", 2651 | "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", 2652 | "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", 2653 | "dev": true, 2654 | "dependencies": { 2655 | "minimist": "^1.2.0" 2656 | }, 2657 | "bin": { 2658 | "json5": "lib/cli.js" 2659 | } 2660 | }, 2661 | "node_modules/jsonc-parser": { 2662 | "version": "3.2.0", 2663 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", 2664 | "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==", 2665 | "dev": true 2666 | }, 2667 | "node_modules/keyv": { 2668 | "version": "4.5.4", 2669 | "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", 2670 | "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", 2671 | "dev": true, 2672 | "dependencies": { 2673 | "json-buffer": "3.0.1" 2674 | } 2675 | }, 2676 | "node_modules/levn": { 2677 | "version": "0.4.1", 2678 | "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", 2679 | "integrity": "sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==", 2680 | "dev": true, 2681 | "dependencies": { 2682 | "prelude-ls": "^1.2.1", 2683 | "type-check": "~0.4.0" 2684 | }, 2685 | "engines": { 2686 | "node": ">= 0.8.0" 2687 | } 2688 | }, 2689 | "node_modules/local-pkg": { 2690 | "version": "0.5.0", 2691 | "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", 2692 | "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==", 2693 | "dev": true, 2694 | "dependencies": { 2695 | "mlly": "^1.4.2", 2696 | "pkg-types": "^1.0.3" 2697 | }, 2698 | "engines": { 2699 | "node": ">=14" 2700 | }, 2701 | "funding": { 2702 | "url": "https://github.com/sponsors/antfu" 2703 | } 2704 | }, 2705 | "node_modules/locate-path": { 2706 | "version": "6.0.0", 2707 | "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", 2708 | "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", 2709 | "dev": true, 2710 | "dependencies": { 2711 | "p-locate": "^5.0.0" 2712 | }, 2713 | "engines": { 2714 | "node": ">=10" 2715 | }, 2716 | "funding": { 2717 | "url": "https://github.com/sponsors/sindresorhus" 2718 | } 2719 | }, 2720 | "node_modules/lodash.merge": { 2721 | "version": "4.6.2", 2722 | "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", 2723 | "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", 2724 | "dev": true 2725 | }, 2726 | "node_modules/loupe": { 2727 | "version": "2.3.7", 2728 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz", 2729 | "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==", 2730 | "dev": true, 2731 | "dependencies": { 2732 | "get-func-name": "^2.0.1" 2733 | } 2734 | }, 2735 | "node_modules/lru-cache": { 2736 | "version": "6.0.0", 2737 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2738 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2739 | "dev": true, 2740 | "dependencies": { 2741 | "yallist": "^4.0.0" 2742 | }, 2743 | "engines": { 2744 | "node": ">=10" 2745 | } 2746 | }, 2747 | "node_modules/magic-string": { 2748 | "version": "0.30.5", 2749 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.5.tgz", 2750 | "integrity": "sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==", 2751 | "dev": true, 2752 | "dependencies": { 2753 | "@jridgewell/sourcemap-codec": "^1.4.15" 2754 | }, 2755 | "engines": { 2756 | "node": ">=12" 2757 | } 2758 | }, 2759 | "node_modules/merge-stream": { 2760 | "version": "2.0.0", 2761 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 2762 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 2763 | "dev": true 2764 | }, 2765 | "node_modules/merge2": { 2766 | "version": "1.4.1", 2767 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2768 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2769 | "dev": true, 2770 | "engines": { 2771 | "node": ">= 8" 2772 | } 2773 | }, 2774 | "node_modules/micromatch": { 2775 | "version": "4.0.5", 2776 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2777 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2778 | "dev": true, 2779 | "dependencies": { 2780 | "braces": "^3.0.2", 2781 | "picomatch": "^2.3.1" 2782 | }, 2783 | "engines": { 2784 | "node": ">=8.6" 2785 | } 2786 | }, 2787 | "node_modules/mimic-fn": { 2788 | "version": "4.0.0", 2789 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", 2790 | "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", 2791 | "dev": true, 2792 | "engines": { 2793 | "node": ">=12" 2794 | }, 2795 | "funding": { 2796 | "url": "https://github.com/sponsors/sindresorhus" 2797 | } 2798 | }, 2799 | "node_modules/minimatch": { 2800 | "version": "3.1.2", 2801 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", 2802 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", 2803 | "dev": true, 2804 | "dependencies": { 2805 | "brace-expansion": "^1.1.7" 2806 | }, 2807 | "engines": { 2808 | "node": "*" 2809 | } 2810 | }, 2811 | "node_modules/minimist": { 2812 | "version": "1.2.8", 2813 | "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", 2814 | "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", 2815 | "dev": true, 2816 | "funding": { 2817 | "url": "https://github.com/sponsors/ljharb" 2818 | } 2819 | }, 2820 | "node_modules/mlly": { 2821 | "version": "1.4.2", 2822 | "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz", 2823 | "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==", 2824 | "dev": true, 2825 | "dependencies": { 2826 | "acorn": "^8.10.0", 2827 | "pathe": "^1.1.1", 2828 | "pkg-types": "^1.0.3", 2829 | "ufo": "^1.3.0" 2830 | } 2831 | }, 2832 | "node_modules/ms": { 2833 | "version": "2.1.2", 2834 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2835 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2836 | "dev": true 2837 | }, 2838 | "node_modules/nanoid": { 2839 | "version": "3.3.7", 2840 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 2841 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 2842 | "dev": true, 2843 | "funding": [ 2844 | { 2845 | "type": "github", 2846 | "url": "https://github.com/sponsors/ai" 2847 | } 2848 | ], 2849 | "bin": { 2850 | "nanoid": "bin/nanoid.cjs" 2851 | }, 2852 | "engines": { 2853 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2854 | } 2855 | }, 2856 | "node_modules/natural-compare": { 2857 | "version": "1.4.0", 2858 | "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", 2859 | "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", 2860 | "dev": true 2861 | }, 2862 | "node_modules/npm-run-path": { 2863 | "version": "5.1.0", 2864 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", 2865 | "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==", 2866 | "dev": true, 2867 | "dependencies": { 2868 | "path-key": "^4.0.0" 2869 | }, 2870 | "engines": { 2871 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2872 | }, 2873 | "funding": { 2874 | "url": "https://github.com/sponsors/sindresorhus" 2875 | } 2876 | }, 2877 | "node_modules/npm-run-path/node_modules/path-key": { 2878 | "version": "4.0.0", 2879 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", 2880 | "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", 2881 | "dev": true, 2882 | "engines": { 2883 | "node": ">=12" 2884 | }, 2885 | "funding": { 2886 | "url": "https://github.com/sponsors/sindresorhus" 2887 | } 2888 | }, 2889 | "node_modules/object-inspect": { 2890 | "version": "1.13.1", 2891 | "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", 2892 | "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", 2893 | "dev": true, 2894 | "funding": { 2895 | "url": "https://github.com/sponsors/ljharb" 2896 | } 2897 | }, 2898 | "node_modules/object-keys": { 2899 | "version": "1.1.1", 2900 | "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", 2901 | "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", 2902 | "dev": true, 2903 | "engines": { 2904 | "node": ">= 0.4" 2905 | } 2906 | }, 2907 | "node_modules/object.assign": { 2908 | "version": "4.1.5", 2909 | "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", 2910 | "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", 2911 | "dev": true, 2912 | "dependencies": { 2913 | "call-bind": "^1.0.5", 2914 | "define-properties": "^1.2.1", 2915 | "has-symbols": "^1.0.3", 2916 | "object-keys": "^1.1.1" 2917 | }, 2918 | "engines": { 2919 | "node": ">= 0.4" 2920 | }, 2921 | "funding": { 2922 | "url": "https://github.com/sponsors/ljharb" 2923 | } 2924 | }, 2925 | "node_modules/object.fromentries": { 2926 | "version": "2.0.7", 2927 | "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", 2928 | "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", 2929 | "dev": true, 2930 | "dependencies": { 2931 | "call-bind": "^1.0.2", 2932 | "define-properties": "^1.2.0", 2933 | "es-abstract": "^1.22.1" 2934 | }, 2935 | "engines": { 2936 | "node": ">= 0.4" 2937 | }, 2938 | "funding": { 2939 | "url": "https://github.com/sponsors/ljharb" 2940 | } 2941 | }, 2942 | "node_modules/object.groupby": { 2943 | "version": "1.0.1", 2944 | "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", 2945 | "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", 2946 | "dev": true, 2947 | "dependencies": { 2948 | "call-bind": "^1.0.2", 2949 | "define-properties": "^1.2.0", 2950 | "es-abstract": "^1.22.1", 2951 | "get-intrinsic": "^1.2.1" 2952 | } 2953 | }, 2954 | "node_modules/object.values": { 2955 | "version": "1.1.7", 2956 | "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", 2957 | "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", 2958 | "dev": true, 2959 | "dependencies": { 2960 | "call-bind": "^1.0.2", 2961 | "define-properties": "^1.2.0", 2962 | "es-abstract": "^1.22.1" 2963 | }, 2964 | "engines": { 2965 | "node": ">= 0.4" 2966 | }, 2967 | "funding": { 2968 | "url": "https://github.com/sponsors/ljharb" 2969 | } 2970 | }, 2971 | "node_modules/once": { 2972 | "version": "1.4.0", 2973 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2974 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2975 | "dev": true, 2976 | "dependencies": { 2977 | "wrappy": "1" 2978 | } 2979 | }, 2980 | "node_modules/onetime": { 2981 | "version": "6.0.0", 2982 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", 2983 | "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", 2984 | "dev": true, 2985 | "dependencies": { 2986 | "mimic-fn": "^4.0.0" 2987 | }, 2988 | "engines": { 2989 | "node": ">=12" 2990 | }, 2991 | "funding": { 2992 | "url": "https://github.com/sponsors/sindresorhus" 2993 | } 2994 | }, 2995 | "node_modules/optionator": { 2996 | "version": "0.9.3", 2997 | "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", 2998 | "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", 2999 | "dev": true, 3000 | "dependencies": { 3001 | "@aashutoshrathi/word-wrap": "^1.2.3", 3002 | "deep-is": "^0.1.3", 3003 | "fast-levenshtein": "^2.0.6", 3004 | "levn": "^0.4.1", 3005 | "prelude-ls": "^1.2.1", 3006 | "type-check": "^0.4.0" 3007 | }, 3008 | "engines": { 3009 | "node": ">= 0.8.0" 3010 | } 3011 | }, 3012 | "node_modules/p-limit": { 3013 | "version": "3.1.0", 3014 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", 3015 | "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", 3016 | "dev": true, 3017 | "dependencies": { 3018 | "yocto-queue": "^0.1.0" 3019 | }, 3020 | "engines": { 3021 | "node": ">=10" 3022 | }, 3023 | "funding": { 3024 | "url": "https://github.com/sponsors/sindresorhus" 3025 | } 3026 | }, 3027 | "node_modules/p-locate": { 3028 | "version": "5.0.0", 3029 | "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", 3030 | "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", 3031 | "dev": true, 3032 | "dependencies": { 3033 | "p-limit": "^3.0.2" 3034 | }, 3035 | "engines": { 3036 | "node": ">=10" 3037 | }, 3038 | "funding": { 3039 | "url": "https://github.com/sponsors/sindresorhus" 3040 | } 3041 | }, 3042 | "node_modules/parent-module": { 3043 | "version": "1.0.1", 3044 | "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", 3045 | "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", 3046 | "dev": true, 3047 | "dependencies": { 3048 | "callsites": "^3.0.0" 3049 | }, 3050 | "engines": { 3051 | "node": ">=6" 3052 | } 3053 | }, 3054 | "node_modules/path-exists": { 3055 | "version": "4.0.0", 3056 | "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", 3057 | "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", 3058 | "dev": true, 3059 | "engines": { 3060 | "node": ">=8" 3061 | } 3062 | }, 3063 | "node_modules/path-is-absolute": { 3064 | "version": "1.0.1", 3065 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", 3066 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", 3067 | "dev": true, 3068 | "engines": { 3069 | "node": ">=0.10.0" 3070 | } 3071 | }, 3072 | "node_modules/path-key": { 3073 | "version": "3.1.1", 3074 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 3075 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 3076 | "dev": true, 3077 | "engines": { 3078 | "node": ">=8" 3079 | } 3080 | }, 3081 | "node_modules/path-parse": { 3082 | "version": "1.0.7", 3083 | "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", 3084 | "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", 3085 | "dev": true 3086 | }, 3087 | "node_modules/path-type": { 3088 | "version": "4.0.0", 3089 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 3090 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 3091 | "dev": true, 3092 | "engines": { 3093 | "node": ">=8" 3094 | } 3095 | }, 3096 | "node_modules/pathe": { 3097 | "version": "1.1.1", 3098 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", 3099 | "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==", 3100 | "dev": true 3101 | }, 3102 | "node_modules/pathval": { 3103 | "version": "1.1.1", 3104 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz", 3105 | "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==", 3106 | "dev": true, 3107 | "engines": { 3108 | "node": "*" 3109 | } 3110 | }, 3111 | "node_modules/picocolors": { 3112 | "version": "1.0.0", 3113 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", 3114 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", 3115 | "dev": true 3116 | }, 3117 | "node_modules/picomatch": { 3118 | "version": "2.3.1", 3119 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 3120 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 3121 | "dev": true, 3122 | "engines": { 3123 | "node": ">=8.6" 3124 | }, 3125 | "funding": { 3126 | "url": "https://github.com/sponsors/jonschlinkert" 3127 | } 3128 | }, 3129 | "node_modules/pkg-types": { 3130 | "version": "1.0.3", 3131 | "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz", 3132 | "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==", 3133 | "dev": true, 3134 | "dependencies": { 3135 | "jsonc-parser": "^3.2.0", 3136 | "mlly": "^1.2.0", 3137 | "pathe": "^1.1.0" 3138 | } 3139 | }, 3140 | "node_modules/postcss": { 3141 | "version": "8.4.32", 3142 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", 3143 | "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", 3144 | "dev": true, 3145 | "funding": [ 3146 | { 3147 | "type": "opencollective", 3148 | "url": "https://opencollective.com/postcss/" 3149 | }, 3150 | { 3151 | "type": "tidelift", 3152 | "url": "https://tidelift.com/funding/github/npm/postcss" 3153 | }, 3154 | { 3155 | "type": "github", 3156 | "url": "https://github.com/sponsors/ai" 3157 | } 3158 | ], 3159 | "dependencies": { 3160 | "nanoid": "^3.3.7", 3161 | "picocolors": "^1.0.0", 3162 | "source-map-js": "^1.0.2" 3163 | }, 3164 | "engines": { 3165 | "node": "^10 || ^12 || >=14" 3166 | } 3167 | }, 3168 | "node_modules/prelude-ls": { 3169 | "version": "1.2.1", 3170 | "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", 3171 | "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==", 3172 | "dev": true, 3173 | "engines": { 3174 | "node": ">= 0.8.0" 3175 | } 3176 | }, 3177 | "node_modules/pretty-format": { 3178 | "version": "29.7.0", 3179 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", 3180 | "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", 3181 | "dev": true, 3182 | "dependencies": { 3183 | "@jest/schemas": "^29.6.3", 3184 | "ansi-styles": "^5.0.0", 3185 | "react-is": "^18.0.0" 3186 | }, 3187 | "engines": { 3188 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0" 3189 | } 3190 | }, 3191 | "node_modules/pretty-format/node_modules/ansi-styles": { 3192 | "version": "5.2.0", 3193 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", 3194 | "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", 3195 | "dev": true, 3196 | "engines": { 3197 | "node": ">=10" 3198 | }, 3199 | "funding": { 3200 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 3201 | } 3202 | }, 3203 | "node_modules/punycode": { 3204 | "version": "2.3.1", 3205 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 3206 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 3207 | "dev": true, 3208 | "engines": { 3209 | "node": ">=6" 3210 | } 3211 | }, 3212 | "node_modules/queue-microtask": { 3213 | "version": "1.2.3", 3214 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 3215 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 3216 | "dev": true, 3217 | "funding": [ 3218 | { 3219 | "type": "github", 3220 | "url": "https://github.com/sponsors/feross" 3221 | }, 3222 | { 3223 | "type": "patreon", 3224 | "url": "https://www.patreon.com/feross" 3225 | }, 3226 | { 3227 | "type": "consulting", 3228 | "url": "https://feross.org/support" 3229 | } 3230 | ] 3231 | }, 3232 | "node_modules/react-is": { 3233 | "version": "18.2.0", 3234 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", 3235 | "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", 3236 | "dev": true 3237 | }, 3238 | "node_modules/regexp.prototype.flags": { 3239 | "version": "1.5.1", 3240 | "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", 3241 | "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", 3242 | "dev": true, 3243 | "dependencies": { 3244 | "call-bind": "^1.0.2", 3245 | "define-properties": "^1.2.0", 3246 | "set-function-name": "^2.0.0" 3247 | }, 3248 | "engines": { 3249 | "node": ">= 0.4" 3250 | }, 3251 | "funding": { 3252 | "url": "https://github.com/sponsors/ljharb" 3253 | } 3254 | }, 3255 | "node_modules/resolve": { 3256 | "version": "1.22.8", 3257 | "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", 3258 | "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", 3259 | "dev": true, 3260 | "dependencies": { 3261 | "is-core-module": "^2.13.0", 3262 | "path-parse": "^1.0.7", 3263 | "supports-preserve-symlinks-flag": "^1.0.0" 3264 | }, 3265 | "bin": { 3266 | "resolve": "bin/resolve" 3267 | }, 3268 | "funding": { 3269 | "url": "https://github.com/sponsors/ljharb" 3270 | } 3271 | }, 3272 | "node_modules/resolve-from": { 3273 | "version": "4.0.0", 3274 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", 3275 | "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", 3276 | "dev": true, 3277 | "engines": { 3278 | "node": ">=4" 3279 | } 3280 | }, 3281 | "node_modules/reusify": { 3282 | "version": "1.0.4", 3283 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 3284 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 3285 | "dev": true, 3286 | "engines": { 3287 | "iojs": ">=1.0.0", 3288 | "node": ">=0.10.0" 3289 | } 3290 | }, 3291 | "node_modules/rimraf": { 3292 | "version": "3.0.2", 3293 | "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", 3294 | "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", 3295 | "dev": true, 3296 | "dependencies": { 3297 | "glob": "^7.1.3" 3298 | }, 3299 | "bin": { 3300 | "rimraf": "bin.js" 3301 | }, 3302 | "funding": { 3303 | "url": "https://github.com/sponsors/isaacs" 3304 | } 3305 | }, 3306 | "node_modules/rollup": { 3307 | "version": "4.9.0", 3308 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.0.tgz", 3309 | "integrity": "sha512-bUHW/9N21z64gw8s6tP4c88P382Bq/L5uZDowHlHx6s/QWpjJXivIAbEw6LZthgSvlEizZBfLC4OAvWe7aoF7A==", 3310 | "dev": true, 3311 | "bin": { 3312 | "rollup": "dist/bin/rollup" 3313 | }, 3314 | "engines": { 3315 | "node": ">=18.0.0", 3316 | "npm": ">=8.0.0" 3317 | }, 3318 | "optionalDependencies": { 3319 | "@rollup/rollup-android-arm-eabi": "4.9.0", 3320 | "@rollup/rollup-android-arm64": "4.9.0", 3321 | "@rollup/rollup-darwin-arm64": "4.9.0", 3322 | "@rollup/rollup-darwin-x64": "4.9.0", 3323 | "@rollup/rollup-linux-arm-gnueabihf": "4.9.0", 3324 | "@rollup/rollup-linux-arm64-gnu": "4.9.0", 3325 | "@rollup/rollup-linux-arm64-musl": "4.9.0", 3326 | "@rollup/rollup-linux-riscv64-gnu": "4.9.0", 3327 | "@rollup/rollup-linux-x64-gnu": "4.9.0", 3328 | "@rollup/rollup-linux-x64-musl": "4.9.0", 3329 | "@rollup/rollup-win32-arm64-msvc": "4.9.0", 3330 | "@rollup/rollup-win32-ia32-msvc": "4.9.0", 3331 | "@rollup/rollup-win32-x64-msvc": "4.9.0", 3332 | "fsevents": "~2.3.2" 3333 | } 3334 | }, 3335 | "node_modules/run-parallel": { 3336 | "version": "1.2.0", 3337 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 3338 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 3339 | "dev": true, 3340 | "funding": [ 3341 | { 3342 | "type": "github", 3343 | "url": "https://github.com/sponsors/feross" 3344 | }, 3345 | { 3346 | "type": "patreon", 3347 | "url": "https://www.patreon.com/feross" 3348 | }, 3349 | { 3350 | "type": "consulting", 3351 | "url": "https://feross.org/support" 3352 | } 3353 | ], 3354 | "dependencies": { 3355 | "queue-microtask": "^1.2.2" 3356 | } 3357 | }, 3358 | "node_modules/safe-array-concat": { 3359 | "version": "1.0.1", 3360 | "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", 3361 | "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", 3362 | "dev": true, 3363 | "dependencies": { 3364 | "call-bind": "^1.0.2", 3365 | "get-intrinsic": "^1.2.1", 3366 | "has-symbols": "^1.0.3", 3367 | "isarray": "^2.0.5" 3368 | }, 3369 | "engines": { 3370 | "node": ">=0.4" 3371 | }, 3372 | "funding": { 3373 | "url": "https://github.com/sponsors/ljharb" 3374 | } 3375 | }, 3376 | "node_modules/safe-regex-test": { 3377 | "version": "1.0.0", 3378 | "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", 3379 | "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", 3380 | "dev": true, 3381 | "dependencies": { 3382 | "call-bind": "^1.0.2", 3383 | "get-intrinsic": "^1.1.3", 3384 | "is-regex": "^1.1.4" 3385 | }, 3386 | "funding": { 3387 | "url": "https://github.com/sponsors/ljharb" 3388 | } 3389 | }, 3390 | "node_modules/semver": { 3391 | "version": "7.5.4", 3392 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 3393 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 3394 | "dev": true, 3395 | "dependencies": { 3396 | "lru-cache": "^6.0.0" 3397 | }, 3398 | "bin": { 3399 | "semver": "bin/semver.js" 3400 | }, 3401 | "engines": { 3402 | "node": ">=10" 3403 | } 3404 | }, 3405 | "node_modules/set-function-length": { 3406 | "version": "1.1.1", 3407 | "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", 3408 | "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", 3409 | "dev": true, 3410 | "dependencies": { 3411 | "define-data-property": "^1.1.1", 3412 | "get-intrinsic": "^1.2.1", 3413 | "gopd": "^1.0.1", 3414 | "has-property-descriptors": "^1.0.0" 3415 | }, 3416 | "engines": { 3417 | "node": ">= 0.4" 3418 | } 3419 | }, 3420 | "node_modules/set-function-name": { 3421 | "version": "2.0.1", 3422 | "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", 3423 | "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", 3424 | "dev": true, 3425 | "dependencies": { 3426 | "define-data-property": "^1.0.1", 3427 | "functions-have-names": "^1.2.3", 3428 | "has-property-descriptors": "^1.0.0" 3429 | }, 3430 | "engines": { 3431 | "node": ">= 0.4" 3432 | } 3433 | }, 3434 | "node_modules/shebang-command": { 3435 | "version": "2.0.0", 3436 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 3437 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 3438 | "dev": true, 3439 | "dependencies": { 3440 | "shebang-regex": "^3.0.0" 3441 | }, 3442 | "engines": { 3443 | "node": ">=8" 3444 | } 3445 | }, 3446 | "node_modules/shebang-regex": { 3447 | "version": "3.0.0", 3448 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 3449 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 3450 | "dev": true, 3451 | "engines": { 3452 | "node": ">=8" 3453 | } 3454 | }, 3455 | "node_modules/side-channel": { 3456 | "version": "1.0.4", 3457 | "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", 3458 | "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", 3459 | "dev": true, 3460 | "dependencies": { 3461 | "call-bind": "^1.0.0", 3462 | "get-intrinsic": "^1.0.2", 3463 | "object-inspect": "^1.9.0" 3464 | }, 3465 | "funding": { 3466 | "url": "https://github.com/sponsors/ljharb" 3467 | } 3468 | }, 3469 | "node_modules/siginfo": { 3470 | "version": "2.0.0", 3471 | "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 3472 | "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 3473 | "dev": true 3474 | }, 3475 | "node_modules/signal-exit": { 3476 | "version": "4.1.0", 3477 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 3478 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 3479 | "dev": true, 3480 | "engines": { 3481 | "node": ">=14" 3482 | }, 3483 | "funding": { 3484 | "url": "https://github.com/sponsors/isaacs" 3485 | } 3486 | }, 3487 | "node_modules/slash": { 3488 | "version": "3.0.0", 3489 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 3490 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 3491 | "dev": true, 3492 | "engines": { 3493 | "node": ">=8" 3494 | } 3495 | }, 3496 | "node_modules/source-map-js": { 3497 | "version": "1.0.2", 3498 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", 3499 | "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", 3500 | "dev": true, 3501 | "engines": { 3502 | "node": ">=0.10.0" 3503 | } 3504 | }, 3505 | "node_modules/stackback": { 3506 | "version": "0.0.2", 3507 | "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 3508 | "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 3509 | "dev": true 3510 | }, 3511 | "node_modules/std-env": { 3512 | "version": "3.6.0", 3513 | "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.6.0.tgz", 3514 | "integrity": "sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==", 3515 | "dev": true 3516 | }, 3517 | "node_modules/string.prototype.trim": { 3518 | "version": "1.2.8", 3519 | "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", 3520 | "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", 3521 | "dev": true, 3522 | "dependencies": { 3523 | "call-bind": "^1.0.2", 3524 | "define-properties": "^1.2.0", 3525 | "es-abstract": "^1.22.1" 3526 | }, 3527 | "engines": { 3528 | "node": ">= 0.4" 3529 | }, 3530 | "funding": { 3531 | "url": "https://github.com/sponsors/ljharb" 3532 | } 3533 | }, 3534 | "node_modules/string.prototype.trimend": { 3535 | "version": "1.0.7", 3536 | "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", 3537 | "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", 3538 | "dev": true, 3539 | "dependencies": { 3540 | "call-bind": "^1.0.2", 3541 | "define-properties": "^1.2.0", 3542 | "es-abstract": "^1.22.1" 3543 | }, 3544 | "funding": { 3545 | "url": "https://github.com/sponsors/ljharb" 3546 | } 3547 | }, 3548 | "node_modules/string.prototype.trimstart": { 3549 | "version": "1.0.7", 3550 | "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", 3551 | "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", 3552 | "dev": true, 3553 | "dependencies": { 3554 | "call-bind": "^1.0.2", 3555 | "define-properties": "^1.2.0", 3556 | "es-abstract": "^1.22.1" 3557 | }, 3558 | "funding": { 3559 | "url": "https://github.com/sponsors/ljharb" 3560 | } 3561 | }, 3562 | "node_modules/strip-ansi": { 3563 | "version": "6.0.1", 3564 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 3565 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 3566 | "dev": true, 3567 | "dependencies": { 3568 | "ansi-regex": "^5.0.1" 3569 | }, 3570 | "engines": { 3571 | "node": ">=8" 3572 | } 3573 | }, 3574 | "node_modules/strip-bom": { 3575 | "version": "3.0.0", 3576 | "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", 3577 | "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", 3578 | "dev": true, 3579 | "engines": { 3580 | "node": ">=4" 3581 | } 3582 | }, 3583 | "node_modules/strip-final-newline": { 3584 | "version": "3.0.0", 3585 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", 3586 | "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", 3587 | "dev": true, 3588 | "engines": { 3589 | "node": ">=12" 3590 | }, 3591 | "funding": { 3592 | "url": "https://github.com/sponsors/sindresorhus" 3593 | } 3594 | }, 3595 | "node_modules/strip-json-comments": { 3596 | "version": "3.1.1", 3597 | "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", 3598 | "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", 3599 | "dev": true, 3600 | "engines": { 3601 | "node": ">=8" 3602 | }, 3603 | "funding": { 3604 | "url": "https://github.com/sponsors/sindresorhus" 3605 | } 3606 | }, 3607 | "node_modules/strip-literal": { 3608 | "version": "1.3.0", 3609 | "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz", 3610 | "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==", 3611 | "dev": true, 3612 | "dependencies": { 3613 | "acorn": "^8.10.0" 3614 | }, 3615 | "funding": { 3616 | "url": "https://github.com/sponsors/antfu" 3617 | } 3618 | }, 3619 | "node_modules/supports-color": { 3620 | "version": "7.2.0", 3621 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 3622 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 3623 | "dev": true, 3624 | "dependencies": { 3625 | "has-flag": "^4.0.0" 3626 | }, 3627 | "engines": { 3628 | "node": ">=8" 3629 | } 3630 | }, 3631 | "node_modules/supports-preserve-symlinks-flag": { 3632 | "version": "1.0.0", 3633 | "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", 3634 | "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", 3635 | "dev": true, 3636 | "engines": { 3637 | "node": ">= 0.4" 3638 | }, 3639 | "funding": { 3640 | "url": "https://github.com/sponsors/ljharb" 3641 | } 3642 | }, 3643 | "node_modules/text-table": { 3644 | "version": "0.2.0", 3645 | "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", 3646 | "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", 3647 | "dev": true 3648 | }, 3649 | "node_modules/tinybench": { 3650 | "version": "2.5.1", 3651 | "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz", 3652 | "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==", 3653 | "dev": true 3654 | }, 3655 | "node_modules/tinypool": { 3656 | "version": "0.8.1", 3657 | "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.1.tgz", 3658 | "integrity": "sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==", 3659 | "dev": true, 3660 | "engines": { 3661 | "node": ">=14.0.0" 3662 | } 3663 | }, 3664 | "node_modules/tinyspy": { 3665 | "version": "2.2.0", 3666 | "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz", 3667 | "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==", 3668 | "dev": true, 3669 | "engines": { 3670 | "node": ">=14.0.0" 3671 | } 3672 | }, 3673 | "node_modules/to-regex-range": { 3674 | "version": "5.0.1", 3675 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3676 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3677 | "dev": true, 3678 | "dependencies": { 3679 | "is-number": "^7.0.0" 3680 | }, 3681 | "engines": { 3682 | "node": ">=8.0" 3683 | } 3684 | }, 3685 | "node_modules/ts-api-utils": { 3686 | "version": "1.0.3", 3687 | "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", 3688 | "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", 3689 | "dev": true, 3690 | "engines": { 3691 | "node": ">=16.13.0" 3692 | }, 3693 | "peerDependencies": { 3694 | "typescript": ">=4.2.0" 3695 | } 3696 | }, 3697 | "node_modules/tsconfig-paths": { 3698 | "version": "3.14.2", 3699 | "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.14.2.tgz", 3700 | "integrity": "sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==", 3701 | "dev": true, 3702 | "dependencies": { 3703 | "@types/json5": "^0.0.29", 3704 | "json5": "^1.0.2", 3705 | "minimist": "^1.2.6", 3706 | "strip-bom": "^3.0.0" 3707 | } 3708 | }, 3709 | "node_modules/type-check": { 3710 | "version": "0.4.0", 3711 | "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", 3712 | "integrity": "sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==", 3713 | "dev": true, 3714 | "dependencies": { 3715 | "prelude-ls": "^1.2.1" 3716 | }, 3717 | "engines": { 3718 | "node": ">= 0.8.0" 3719 | } 3720 | }, 3721 | "node_modules/type-detect": { 3722 | "version": "4.0.8", 3723 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz", 3724 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==", 3725 | "dev": true, 3726 | "engines": { 3727 | "node": ">=4" 3728 | } 3729 | }, 3730 | "node_modules/type-fest": { 3731 | "version": "0.20.2", 3732 | "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", 3733 | "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", 3734 | "dev": true, 3735 | "engines": { 3736 | "node": ">=10" 3737 | }, 3738 | "funding": { 3739 | "url": "https://github.com/sponsors/sindresorhus" 3740 | } 3741 | }, 3742 | "node_modules/typed-array-buffer": { 3743 | "version": "1.0.0", 3744 | "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", 3745 | "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", 3746 | "dev": true, 3747 | "dependencies": { 3748 | "call-bind": "^1.0.2", 3749 | "get-intrinsic": "^1.2.1", 3750 | "is-typed-array": "^1.1.10" 3751 | }, 3752 | "engines": { 3753 | "node": ">= 0.4" 3754 | } 3755 | }, 3756 | "node_modules/typed-array-byte-length": { 3757 | "version": "1.0.0", 3758 | "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", 3759 | "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", 3760 | "dev": true, 3761 | "dependencies": { 3762 | "call-bind": "^1.0.2", 3763 | "for-each": "^0.3.3", 3764 | "has-proto": "^1.0.1", 3765 | "is-typed-array": "^1.1.10" 3766 | }, 3767 | "engines": { 3768 | "node": ">= 0.4" 3769 | }, 3770 | "funding": { 3771 | "url": "https://github.com/sponsors/ljharb" 3772 | } 3773 | }, 3774 | "node_modules/typed-array-byte-offset": { 3775 | "version": "1.0.0", 3776 | "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", 3777 | "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", 3778 | "dev": true, 3779 | "dependencies": { 3780 | "available-typed-arrays": "^1.0.5", 3781 | "call-bind": "^1.0.2", 3782 | "for-each": "^0.3.3", 3783 | "has-proto": "^1.0.1", 3784 | "is-typed-array": "^1.1.10" 3785 | }, 3786 | "engines": { 3787 | "node": ">= 0.4" 3788 | }, 3789 | "funding": { 3790 | "url": "https://github.com/sponsors/ljharb" 3791 | } 3792 | }, 3793 | "node_modules/typed-array-length": { 3794 | "version": "1.0.4", 3795 | "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", 3796 | "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", 3797 | "dev": true, 3798 | "dependencies": { 3799 | "call-bind": "^1.0.2", 3800 | "for-each": "^0.3.3", 3801 | "is-typed-array": "^1.1.9" 3802 | }, 3803 | "funding": { 3804 | "url": "https://github.com/sponsors/ljharb" 3805 | } 3806 | }, 3807 | "node_modules/typescript": { 3808 | "version": "5.3.3", 3809 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", 3810 | "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", 3811 | "dev": true, 3812 | "bin": { 3813 | "tsc": "bin/tsc", 3814 | "tsserver": "bin/tsserver" 3815 | }, 3816 | "engines": { 3817 | "node": ">=14.17" 3818 | } 3819 | }, 3820 | "node_modules/ufo": { 3821 | "version": "1.3.2", 3822 | "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", 3823 | "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", 3824 | "dev": true 3825 | }, 3826 | "node_modules/unbox-primitive": { 3827 | "version": "1.0.2", 3828 | "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", 3829 | "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", 3830 | "dev": true, 3831 | "dependencies": { 3832 | "call-bind": "^1.0.2", 3833 | "has-bigints": "^1.0.2", 3834 | "has-symbols": "^1.0.3", 3835 | "which-boxed-primitive": "^1.0.2" 3836 | }, 3837 | "funding": { 3838 | "url": "https://github.com/sponsors/ljharb" 3839 | } 3840 | }, 3841 | "node_modules/uri-js": { 3842 | "version": "4.4.1", 3843 | "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", 3844 | "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", 3845 | "dev": true, 3846 | "dependencies": { 3847 | "punycode": "^2.1.0" 3848 | } 3849 | }, 3850 | "node_modules/vite": { 3851 | "version": "5.0.8", 3852 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.8.tgz", 3853 | "integrity": "sha512-jYMALd8aeqR3yS9xlHd0OzQJndS9fH5ylVgWdB+pxTwxLKdO1pgC5Dlb398BUxpfaBxa4M9oT7j1g503Gaj5IQ==", 3854 | "dev": true, 3855 | "dependencies": { 3856 | "esbuild": "^0.19.3", 3857 | "postcss": "^8.4.32", 3858 | "rollup": "^4.2.0" 3859 | }, 3860 | "bin": { 3861 | "vite": "bin/vite.js" 3862 | }, 3863 | "engines": { 3864 | "node": "^18.0.0 || >=20.0.0" 3865 | }, 3866 | "funding": { 3867 | "url": "https://github.com/vitejs/vite?sponsor=1" 3868 | }, 3869 | "optionalDependencies": { 3870 | "fsevents": "~2.3.3" 3871 | }, 3872 | "peerDependencies": { 3873 | "@types/node": "^18.0.0 || >=20.0.0", 3874 | "less": "*", 3875 | "lightningcss": "^1.21.0", 3876 | "sass": "*", 3877 | "stylus": "*", 3878 | "sugarss": "*", 3879 | "terser": "^5.4.0" 3880 | }, 3881 | "peerDependenciesMeta": { 3882 | "@types/node": { 3883 | "optional": true 3884 | }, 3885 | "less": { 3886 | "optional": true 3887 | }, 3888 | "lightningcss": { 3889 | "optional": true 3890 | }, 3891 | "sass": { 3892 | "optional": true 3893 | }, 3894 | "stylus": { 3895 | "optional": true 3896 | }, 3897 | "sugarss": { 3898 | "optional": true 3899 | }, 3900 | "terser": { 3901 | "optional": true 3902 | } 3903 | } 3904 | }, 3905 | "node_modules/vite-node": { 3906 | "version": "1.0.4", 3907 | "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.0.4.tgz", 3908 | "integrity": "sha512-9xQQtHdsz5Qn8hqbV7UKqkm8YkJhzT/zr41Dmt5N7AlD8hJXw/Z7y0QiD5I8lnTthV9Rvcvi0QW7PI0Fq83ZPg==", 3909 | "dev": true, 3910 | "dependencies": { 3911 | "cac": "^6.7.14", 3912 | "debug": "^4.3.4", 3913 | "pathe": "^1.1.1", 3914 | "picocolors": "^1.0.0", 3915 | "vite": "^5.0.0" 3916 | }, 3917 | "bin": { 3918 | "vite-node": "vite-node.mjs" 3919 | }, 3920 | "engines": { 3921 | "node": "^18.0.0 || >=20.0.0" 3922 | }, 3923 | "funding": { 3924 | "url": "https://opencollective.com/vitest" 3925 | } 3926 | }, 3927 | "node_modules/vitest": { 3928 | "version": "1.0.4", 3929 | "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.0.4.tgz", 3930 | "integrity": "sha512-s1GQHp/UOeWEo4+aXDOeFBJwFzL6mjycbQwwKWX2QcYfh/7tIerS59hWQ20mxzupTJluA2SdwiBuWwQHH67ckg==", 3931 | "dev": true, 3932 | "dependencies": { 3933 | "@vitest/expect": "1.0.4", 3934 | "@vitest/runner": "1.0.4", 3935 | "@vitest/snapshot": "1.0.4", 3936 | "@vitest/spy": "1.0.4", 3937 | "@vitest/utils": "1.0.4", 3938 | "acorn-walk": "^8.3.0", 3939 | "cac": "^6.7.14", 3940 | "chai": "^4.3.10", 3941 | "debug": "^4.3.4", 3942 | "execa": "^8.0.1", 3943 | "local-pkg": "^0.5.0", 3944 | "magic-string": "^0.30.5", 3945 | "pathe": "^1.1.1", 3946 | "picocolors": "^1.0.0", 3947 | "std-env": "^3.5.0", 3948 | "strip-literal": "^1.3.0", 3949 | "tinybench": "^2.5.1", 3950 | "tinypool": "^0.8.1", 3951 | "vite": "^5.0.0", 3952 | "vite-node": "1.0.4", 3953 | "why-is-node-running": "^2.2.2" 3954 | }, 3955 | "bin": { 3956 | "vitest": "vitest.mjs" 3957 | }, 3958 | "engines": { 3959 | "node": "^18.0.0 || >=20.0.0" 3960 | }, 3961 | "funding": { 3962 | "url": "https://opencollective.com/vitest" 3963 | }, 3964 | "peerDependencies": { 3965 | "@edge-runtime/vm": "*", 3966 | "@types/node": "^18.0.0 || >=20.0.0", 3967 | "@vitest/browser": "^1.0.0", 3968 | "@vitest/ui": "^1.0.0", 3969 | "happy-dom": "*", 3970 | "jsdom": "*" 3971 | }, 3972 | "peerDependenciesMeta": { 3973 | "@edge-runtime/vm": { 3974 | "optional": true 3975 | }, 3976 | "@types/node": { 3977 | "optional": true 3978 | }, 3979 | "@vitest/browser": { 3980 | "optional": true 3981 | }, 3982 | "@vitest/ui": { 3983 | "optional": true 3984 | }, 3985 | "happy-dom": { 3986 | "optional": true 3987 | }, 3988 | "jsdom": { 3989 | "optional": true 3990 | } 3991 | } 3992 | }, 3993 | "node_modules/which": { 3994 | "version": "2.0.2", 3995 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3996 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3997 | "dev": true, 3998 | "dependencies": { 3999 | "isexe": "^2.0.0" 4000 | }, 4001 | "bin": { 4002 | "node-which": "bin/node-which" 4003 | }, 4004 | "engines": { 4005 | "node": ">= 8" 4006 | } 4007 | }, 4008 | "node_modules/which-boxed-primitive": { 4009 | "version": "1.0.2", 4010 | "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", 4011 | "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", 4012 | "dev": true, 4013 | "dependencies": { 4014 | "is-bigint": "^1.0.1", 4015 | "is-boolean-object": "^1.1.0", 4016 | "is-number-object": "^1.0.4", 4017 | "is-string": "^1.0.5", 4018 | "is-symbol": "^1.0.3" 4019 | }, 4020 | "funding": { 4021 | "url": "https://github.com/sponsors/ljharb" 4022 | } 4023 | }, 4024 | "node_modules/which-typed-array": { 4025 | "version": "1.1.13", 4026 | "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", 4027 | "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", 4028 | "dev": true, 4029 | "dependencies": { 4030 | "available-typed-arrays": "^1.0.5", 4031 | "call-bind": "^1.0.4", 4032 | "for-each": "^0.3.3", 4033 | "gopd": "^1.0.1", 4034 | "has-tostringtag": "^1.0.0" 4035 | }, 4036 | "engines": { 4037 | "node": ">= 0.4" 4038 | }, 4039 | "funding": { 4040 | "url": "https://github.com/sponsors/ljharb" 4041 | } 4042 | }, 4043 | "node_modules/why-is-node-running": { 4044 | "version": "2.2.2", 4045 | "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", 4046 | "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==", 4047 | "dev": true, 4048 | "dependencies": { 4049 | "siginfo": "^2.0.0", 4050 | "stackback": "0.0.2" 4051 | }, 4052 | "bin": { 4053 | "why-is-node-running": "cli.js" 4054 | }, 4055 | "engines": { 4056 | "node": ">=8" 4057 | } 4058 | }, 4059 | "node_modules/wrappy": { 4060 | "version": "1.0.2", 4061 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 4062 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 4063 | "dev": true 4064 | }, 4065 | "node_modules/yallist": { 4066 | "version": "4.0.0", 4067 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 4068 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 4069 | "dev": true 4070 | }, 4071 | "node_modules/yocto-queue": { 4072 | "version": "0.1.0", 4073 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", 4074 | "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", 4075 | "dev": true, 4076 | "engines": { 4077 | "node": ">=10" 4078 | }, 4079 | "funding": { 4080 | "url": "https://github.com/sponsors/sindresorhus" 4081 | } 4082 | } 4083 | } 4084 | } 4085 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "zod-from-scratch", 3 | "version": "1.0.0", 4 | "description": "", 5 | "main": "index.js", 6 | "scripts": { 7 | "build": "tsc", 8 | "test": "vitest" 9 | }, 10 | "keywords": [], 11 | "author": "", 12 | "license": "ISC", 13 | "devDependencies": { 14 | "@typescript-eslint/eslint-plugin": "^6.14.0", 15 | "@typescript-eslint/parser": "^6.14.0", 16 | "eslint": "^8.55.0", 17 | "eslint-plugin-import": "^2.29.0", 18 | "typescript": "^5.3.3", 19 | "vitest": "^1.0.4" 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /src/__tests__/zod-array.test.ts: -------------------------------------------------------------------------------- 1 | import { it, describe, expect } from 'vitest' 2 | 3 | import { z } from '../schemas' 4 | 5 | describe('Array Schema', () => { 6 | it('should validate an array of numbers', () => { 7 | const numArray = z.array(z.number()) 8 | expect(numArray.parse([1, 2, 3])).toEqual([1, 2, 3]) 9 | }) 10 | 11 | it('should throw an error for a non-array', () => { 12 | const numArray = z.array(z.number()) 13 | expect(() => numArray.parse('not an array')).toThrow( 14 | 'Invalid type, not an array' 15 | ) 16 | }) 17 | 18 | it('should throw an error for an array with invalid elements', () => { 19 | const numArray = z.array(z.number()) 20 | expect(() => numArray.parse([1, '2', 3])).toThrow( 21 | 'Invalid type, not a number' 22 | ) 23 | }) 24 | 25 | it('should handle nested arrays', () => { 26 | const numArray = z.array(z.array(z.number())) 27 | expect( 28 | numArray.parse([ 29 | [1, 2], 30 | [3, 4], 31 | ]) 32 | ).toEqual([ 33 | [1, 2], 34 | [3, 4], 35 | ]) 36 | }) 37 | 38 | it('should handle optional arrays', () => { 39 | const numArray = z.array(z.number()).optional() 40 | expect(numArray.parse(undefined)).toEqual(undefined) 41 | expect(() => numArray.parse(null)).toThrow('Invalid type, not an array') 42 | }) 43 | 44 | it('should handle nullable arrays', () => { 45 | const numArray = z.array(z.number()).nullable() 46 | expect(numArray.parse(null)).toBeNull() 47 | expect(() => numArray.parse('not an array')).toThrow( 48 | 'Invalid type, not an array' 49 | ) 50 | }) 51 | }) 52 | -------------------------------------------------------------------------------- /src/__tests__/zod-discriminated-union.test.ts: -------------------------------------------------------------------------------- 1 | import { it, describe, expect } from 'vitest' 2 | 3 | import { z } from '../schemas' 4 | 5 | describe('Discriminated union Schema', () => { 6 | it("throws an error if the value isn't an object", () => { 7 | const union = z.discriminatedUnion('type', [ 8 | z.object({ 9 | type: z.literal('a'), 10 | lol: z.number(), 11 | }), 12 | z.object({ 13 | type: z.literal('b'), 14 | lmao: z.string(), 15 | }), 16 | ]) 17 | 18 | expect(() => union.parse('a')).toThrow('Value must be an object') 19 | expect(() => union.parse(1)).toThrow('Value must be an object') 20 | }) 21 | 22 | it('throws an error if value is undefined or null', () => { 23 | const union = z.discriminatedUnion('type', [ 24 | z.object({ 25 | type: z.literal('a'), 26 | lol: z.number(), 27 | }), 28 | z.object({ 29 | type: z.literal('b'), 30 | lmao: z.string(), 31 | }), 32 | ]) 33 | 34 | expect(() => union.parse(undefined)).toThrow('Value must be an object') 35 | expect(() => union.parse(null)).toThrow('Value must be an object') 36 | }) 37 | 38 | it('throws an error if value is object, but does not have the key', () => { 39 | const union = z.discriminatedUnion('type', [ 40 | z.object({ 41 | type: z.literal('a'), 42 | lol: z.number(), 43 | }), 44 | z.object({ 45 | type: z.literal('b'), 46 | lmao: z.string(), 47 | }), 48 | ]) 49 | 50 | expect(() => 51 | union.parse({ 52 | lol: 1, 53 | }) 54 | ).toThrow('Value does not have the key "type"') 55 | }) 56 | 57 | it('throws an error if value is object, has the key, but the value of the key is not a string', () => { 58 | const union = z.discriminatedUnion('type', [ 59 | z.object({ 60 | type: z.literal('a'), 61 | lol: z.number(), 62 | }), 63 | z.object({ 64 | type: z.literal('b'), 65 | lmao: z.string(), 66 | }), 67 | ]) 68 | 69 | expect(() => 70 | union.parse({ 71 | type: 1, 72 | }) 73 | ).toThrow(`Value's key type is not a string`) 74 | }) 75 | 76 | it("throws error if key's value is a string, but it does not match any of the options", () => { 77 | const union = z.discriminatedUnion('type', [ 78 | z.object({ 79 | type: z.literal('a'), 80 | lol: z.number(), 81 | }), 82 | z.object({ 83 | type: z.literal('b'), 84 | lmao: z.string(), 85 | }), 86 | ]) 87 | 88 | expect(() => 89 | union.parse({ 90 | type: 'c', 91 | }) 92 | ).toThrow( 93 | `Value's key type is a string, but it does not match any of the options` 94 | ) 95 | }) 96 | 97 | it('should validate a discriminated union schema', () => { 98 | const union = z.discriminatedUnion('type', [ 99 | z.object({ 100 | type: z.literal('a'), 101 | a: z.number(), 102 | }), 103 | z.object({ 104 | type: z.literal('b'), 105 | b: z.string(), 106 | }), 107 | ]) 108 | 109 | expect(union.parse({ type: 'a', a: 1 })).toEqual({ type: 'a', a: 1 }) 110 | expect(union.parse({ type: 'b', b: '1' })).toEqual({ type: 'b', b: '1' }) 111 | }) 112 | 113 | it('should throw an error if a field fails to parse', () => { 114 | const union = z.discriminatedUnion('type', [ 115 | z.object({ 116 | type: z.literal('a'), 117 | a: z.number(), 118 | }), 119 | z.object({ 120 | type: z.literal('b'), 121 | b: z.string(), 122 | }), 123 | ]) 124 | 125 | expect(() => union.parse({ type: 'a', a: '1' })).toThrow( 126 | `Value's key "a" failed to parse: number` 127 | ) 128 | expect(() => union.parse({ type: 'b', b: 1 })).toThrow( 129 | `Value's key "b" failed to parse: string` 130 | ) 131 | }) 132 | }) 133 | -------------------------------------------------------------------------------- /src/__tests__/zod-enum.test.ts: -------------------------------------------------------------------------------- 1 | import { it, describe, expect } from 'vitest' 2 | 3 | import { z } from '../schemas' 4 | 5 | describe('Enum Schema', () => { 6 | it('should validate an enum', () => { 7 | const enumSchema = z.enum(['a', 'b', 'c']) 8 | expect(enumSchema.parse('a')).toEqual('a') 9 | }) 10 | 11 | it('should throw an error if the value is not in the enum', () => { 12 | const enumSchema = z.enum(['a', 'b', 'c']) 13 | expect(() => enumSchema.parse('d')).toThrow( 14 | 'Expected one of a, b, c, got d' 15 | ) 16 | }) 17 | 18 | it('should throw an error if the value is not a string', () => { 19 | const enumSchema = z.enum(['a', 'b', 'c']) 20 | expect(() => enumSchema.parse(1)).toThrow('Expected a string, got 1') 21 | }) 22 | 23 | it('should handle optional enums', () => { 24 | const enumSchema = z.enum(['a', 'b', 'c']).optional() 25 | expect(enumSchema.parse('a')).toEqual('a') 26 | expect(enumSchema.parse(undefined)).toEqual(undefined) 27 | expect(() => enumSchema.parse(null)).toThrow('Expected a string, got null') 28 | }) 29 | 30 | it('should handle nullable enums', () => { 31 | const enumSchema = z.enum(['a', 'b', 'c']).nullable() 32 | expect(enumSchema.parse('a')).toEqual('a') 33 | expect(enumSchema.parse(null)).toEqual(null) 34 | expect(() => enumSchema.parse(undefined)).toThrow( 35 | 'Expected a string, got undefined' 36 | ) 37 | }) 38 | 39 | it('should return enum object with each enum', () => { 40 | const enumSchema = z.enum(['a', 'b', 'c']) 41 | expect(enumSchema.enum).toEqual({ 42 | a: 'a', 43 | b: 'b', 44 | c: 'c', 45 | }) 46 | }) 47 | }) 48 | -------------------------------------------------------------------------------- /src/__tests__/zod-literal.test.ts: -------------------------------------------------------------------------------- 1 | import { it, describe, expect } from 'vitest' 2 | 3 | import { z } from '../schemas' 4 | 5 | describe('Zod literal Schema', () => { 6 | it('should validate a literal', () => { 7 | const stringLiteralSchema = z.literal('a') 8 | expect(stringLiteralSchema.parse('a')).toEqual('a') 9 | expect(stringLiteralSchema.value).toBe('a') 10 | 11 | const numberLiteralSchema = z.literal(1) 12 | expect(numberLiteralSchema.parse(1)).toEqual(1) 13 | expect(numberLiteralSchema.value).toBe(1) 14 | 15 | const booleanLiteralSchema = z.literal(true) 16 | expect(booleanLiteralSchema.parse(true)).toEqual(true) 17 | expect(booleanLiteralSchema.value).toBe(true) 18 | }) 19 | 20 | it("should throw an error if the literal doesn't match", () => { 21 | const stringLiteralSchema = z.literal('a') 22 | expect(() => stringLiteralSchema.parse('b')).toThrow('Expected a but got b') 23 | 24 | const numberLiteralSchema = z.literal(1) 25 | expect(() => numberLiteralSchema.parse(2)).toThrow('Expected 1 but got 2') 26 | 27 | const booleanLiteralSchema = z.literal(true) 28 | expect(() => booleanLiteralSchema.parse(false)).toThrow( 29 | 'Expected true but got false' 30 | ) 31 | }) 32 | 33 | it('should handle optional literals', () => { 34 | const optionalLiteralSchema = z.literal('a').optional() 35 | expect(optionalLiteralSchema.parse(undefined)).toBe(undefined) 36 | expect(optionalLiteralSchema.parse('a')).toBe('a') 37 | expect(() => optionalLiteralSchema.parse(null)).toThrow( 38 | 'Expected a but got null' 39 | ) 40 | }) 41 | 42 | it('should handle nullable literals', () => { 43 | const nullableLiteralSchema = z.literal('a').nullable() 44 | expect(nullableLiteralSchema.parse(null)).toBe(null) 45 | expect(nullableLiteralSchema.parse('a')).toBe('a') 46 | expect(() => nullableLiteralSchema.parse(undefined)).toThrow( 47 | 'Expected a but got undefined' 48 | ) 49 | }) 50 | }) 51 | -------------------------------------------------------------------------------- /src/__tests__/zod-number.test.ts: -------------------------------------------------------------------------------- 1 | import { it, describe, expect } from 'vitest' 2 | 3 | import { z } from '../schemas' 4 | 5 | describe('Number Schema', () => { 6 | it('should validate a number', () => { 7 | expect(z.number().parse(123)).toBe(123) 8 | }) 9 | 10 | it('should throw an error for a non-number', () => { 11 | expect(() => z.number().parse('hello')).toThrow( 12 | 'Invalid type, not a number' 13 | ) 14 | }) 15 | 16 | it('should handle optional numbers', () => { 17 | expect(z.number().optional().parse(undefined)).toBeUndefined() 18 | expect(z.number().optional().parse(123)).toBe(123) 19 | 20 | expect(() => z.number().optional().parse(null)).toThrow( 21 | 'Invalid type, not a number' 22 | ) 23 | }) 24 | 25 | it('should handle nullable numbers', () => { 26 | expect(z.number().nullable().parse(null)).toBeNull() 27 | expect(() => z.number().nullable().parse(undefined)).toThrow( 28 | 'Invalid type, not a number' 29 | ) 30 | }) 31 | }) 32 | -------------------------------------------------------------------------------- /src/__tests__/zod-object.test.ts: -------------------------------------------------------------------------------- 1 | import { it, describe, expect } from 'vitest' 2 | 3 | import { z } from '../schemas' 4 | 5 | describe('Object Schema', () => { 6 | it('should validate an object', () => { 7 | const personSchema = z.object({ 8 | name: z.string(), 9 | age: z.number(), 10 | }) 11 | expect(personSchema.parse({ name: 'Alice', age: 30 })).toEqual({ 12 | name: 'Alice', 13 | age: 30, 14 | }) 15 | }) 16 | 17 | it('should throw an error for a non-object', () => { 18 | const personSchema = z.object({ 19 | name: z.string(), 20 | age: z.number(), 21 | }) 22 | expect(() => personSchema.parse('not an object')).toThrow('Not an object') 23 | }) 24 | 25 | it('should throw an error for a missing field', () => { 26 | const personSchema = z.object({ 27 | name: z.string(), 28 | age: z.number(), 29 | }) 30 | 31 | expect(() => personSchema.parse({ name: 'Alice' })).toThrow( 32 | 'Missing field age' 33 | ) 34 | }) 35 | 36 | it('should handle nested objects', () => { 37 | const personSchema = z.object({ 38 | name: z.string(), 39 | age: z.number(), 40 | address: z.object({ 41 | street: z.string(), 42 | city: z.string(), 43 | state: z.string(), 44 | zip: z.number(), 45 | }), 46 | }) 47 | 48 | expect( 49 | personSchema.parse({ 50 | name: 'Alice', 51 | age: 30, 52 | address: { 53 | street: '123 Main St', 54 | city: 'Anytown', 55 | state: 'NY', 56 | zip: 12345, 57 | }, 58 | }) 59 | ).toEqual({ 60 | name: 'Alice', 61 | age: 30, 62 | address: { 63 | street: '123 Main St', 64 | city: 'Anytown', 65 | state: 'NY', 66 | zip: 12345, 67 | }, 68 | }) 69 | }) 70 | 71 | it('should handle optional objects', () => { 72 | const personSchema = z 73 | .object({ 74 | name: z.string(), 75 | age: z.number(), 76 | }) 77 | .optional() 78 | 79 | expect(personSchema.parse(undefined)).toBeUndefined() 80 | 81 | expect(() => personSchema.parse(null)).toThrow('Not an object') 82 | }) 83 | 84 | it('should handle optional fields', () => { 85 | const personSchema = z.object({ 86 | name: z.string(), 87 | optionalAge: z.number().optional(), 88 | optionalName: z.string().optional(), 89 | optionalArray: z.array(z.string()).optional(), 90 | }) 91 | 92 | expect( 93 | personSchema.parse({ 94 | name: 'Alice', 95 | }) 96 | ).toEqual({ 97 | name: 'Alice', 98 | }) 99 | }) 100 | 101 | it('should handle nullable objects', () => { 102 | const personSchema = z 103 | .object({ 104 | name: z.string(), 105 | age: z.number(), 106 | }) 107 | .nullable() 108 | 109 | expect(personSchema.parse(null)).toBeNull() 110 | 111 | expect(() => personSchema.parse(undefined)).toThrow('Not an object') 112 | }) 113 | }) 114 | -------------------------------------------------------------------------------- /src/__tests__/zod-string.test.ts: -------------------------------------------------------------------------------- 1 | import { it, describe, expect } from 'vitest' 2 | 3 | import { z } from '../schemas' 4 | 5 | describe('String Schema', () => { 6 | it('should validate a string', () => { 7 | expect(z.string().parse('hello')).toBe('hello') 8 | }) 9 | 10 | it('should throw an error for a non-string', () => { 11 | expect(() => z.string().parse(123)).toThrow('Invalid type, not a string') 12 | }) 13 | 14 | it('should handle optional strings', () => { 15 | expect(z.string().optional().parse(undefined)).toBeUndefined() 16 | expect(z.string().optional().parse('hello')).toBe('hello') 17 | 18 | expect(() => z.string().optional().parse(null)).toThrow( 19 | 'Invalid type, not a string' 20 | ) 21 | }) 22 | 23 | it('should handle nullable strings', () => { 24 | expect(z.string().nullable().parse(null)).toBeNull() 25 | expect(() => z.string().nullable().parse(undefined)).toThrow( 26 | 'Invalid type, not a string' 27 | ) 28 | expect(z.string().nullable().parse('hello')).toBe('hello') 29 | }) 30 | }) 31 | -------------------------------------------------------------------------------- /src/__tests__/zod-union.test.ts: -------------------------------------------------------------------------------- 1 | import { it, describe, expect } from 'vitest' 2 | 3 | import { z } from '../schemas' 4 | 5 | describe('Union Schema', () => { 6 | it('should validate a union', () => { 7 | const schema = z.union([z.string(), z.number()]) 8 | expect(schema.parse('hello')).toBe('hello') 9 | expect(schema.parse(123)).toBe(123) 10 | }) 11 | 12 | it('should throw an error for a non-union', () => { 13 | const schema = z.union([z.string(), z.number()]) 14 | expect(() => schema.parse(true)).toThrow( 15 | 'Could not parse true as ["string","number"]' 16 | ) 17 | }) 18 | 19 | it('should validate an optional union', () => { 20 | const schema = z.union([z.string(), z.number()]).optional() 21 | expect(schema.parse(undefined)).toBe(undefined) 22 | expect(schema.parse('hello')).toBe('hello') 23 | expect(schema.parse(123)).toBe(123) 24 | expect(() => schema.parse(null)).toThrow( 25 | `Could not parse null as ["string","number"]` 26 | ) 27 | }) 28 | 29 | it('should validate a nullable union', () => { 30 | const schema = z.union([z.string(), z.number()]).nullable() 31 | expect(schema.parse(null)).toBeNull() 32 | expect(schema.parse('hello')).toBe('hello') 33 | expect(schema.parse(123)).toBe(123) 34 | expect(() => schema.parse(undefined)).toThrow( 35 | `Could not parse undefined as ["string","number"]` 36 | ) 37 | }) 38 | }) 39 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | export * from './schemas' 2 | export * from './types' 3 | -------------------------------------------------------------------------------- /src/parse/array.ts: -------------------------------------------------------------------------------- 1 | import type { InferElementType, ZodType } from '../types' 2 | 3 | export function parseArray( 4 | element: Type, 5 | value: unknown 6 | ): Array> { 7 | if (!Array.isArray(value)) throw new Error('Invalid type, not an array') 8 | value.forEach((v) => element.parse(v)) 9 | return value 10 | } 11 | 12 | export function parseOptionalArray( 13 | element: Type, 14 | value: unknown 15 | ): Array> | undefined { 16 | if (value === undefined) { 17 | return value 18 | } 19 | 20 | return parseArray(element, value) 21 | } 22 | 23 | export function parseNullableArray( 24 | element: Type, 25 | value: unknown 26 | ): Array> | null { 27 | if (value === null) { 28 | return value 29 | } 30 | 31 | return parseArray(element, value) 32 | } 33 | -------------------------------------------------------------------------------- /src/parse/discriminatedUnion.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | DiscriminatedUnionOption, 3 | Infer, 4 | ZodLiteral, 5 | ZodObject, 6 | } from '../types' 7 | 8 | export const parseDiscriminatedUnion = < 9 | Discriminator extends string, 10 | Options extends Array< 11 | ZodObject>> 12 | > 13 | >( 14 | discriminator: Discriminator, 15 | options: Options, 16 | value: unknown 17 | ): Infer => { 18 | if (typeof value !== 'object' || !value) { 19 | throw new Error('Value must be an object') 20 | } 21 | 22 | // necessary so TypeScript knows that value is an object with string keys so we can check for the discriminator key 23 | const valueAsObject = value as Record 24 | 25 | if (!(discriminator in valueAsObject)) { 26 | throw new Error(`Value does not have the key "${discriminator}"`) 27 | } 28 | 29 | if (typeof valueAsObject[discriminator] !== 'string') { 30 | throw new Error(`Value's key type is not a string`) 31 | } 32 | 33 | const hasAnyOptionsTheDiscriminatorValue = options.some( 34 | (option) => 35 | option.fields[discriminator].value === valueAsObject[discriminator] 36 | ) 37 | 38 | if (!hasAnyOptionsTheDiscriminatorValue) { 39 | throw new Error( 40 | `Value's key type is a string, but it does not match any of the options` 41 | ) 42 | } 43 | 44 | const option = options.find( 45 | (option) => 46 | option.fields[discriminator].value === valueAsObject[discriminator] 47 | ) as ZodObject>> 48 | 49 | for (const key in option.fields) { 50 | // skip the discriminator key 51 | if (key === discriminator) { 52 | continue 53 | } 54 | 55 | const field = option.fields[key] 56 | 57 | try { 58 | // try to parse the value with matching key in schema 59 | field.parse(valueAsObject[key]) 60 | } catch (error) { 61 | throw new Error(`Value's key "${key}" failed to parse: ${field.type}`) 62 | } 63 | } 64 | 65 | return valueAsObject as Infer 66 | } 67 | -------------------------------------------------------------------------------- /src/parse/enum.ts: -------------------------------------------------------------------------------- 1 | export function parseEnum>( 2 | values: Enum, 3 | value: unknown 4 | ): Enum[number] { 5 | if (typeof value !== 'string') { 6 | throw new Error(`Expected a string, got ${value}`) 7 | } 8 | 9 | if (!values.includes(value)) { 10 | throw new Error(`Expected one of ${values.join(', ')}, got ${value}`) 11 | } 12 | 13 | return value as Enum[number] 14 | } 15 | 16 | export function parseOptionalEnum>( 17 | values: Enum, 18 | value: unknown 19 | ): Enum[number] | undefined { 20 | if (value === undefined) { 21 | return value 22 | } 23 | 24 | return parseEnum(values, value) 25 | } 26 | 27 | export function parseNullableEnum>( 28 | values: Enum, 29 | value: unknown 30 | ): Enum[number] | null { 31 | if (value === null) { 32 | return value 33 | } 34 | 35 | return parseEnum(values, value) 36 | } 37 | -------------------------------------------------------------------------------- /src/parse/index.ts: -------------------------------------------------------------------------------- 1 | export * from './array' 2 | export * from './enum' 3 | export * from './number' 4 | export * from './object' 5 | export * from './string' 6 | export * from './union' 7 | export * from './literal' 8 | export * from './discriminatedUnion' 9 | -------------------------------------------------------------------------------- /src/parse/literal.ts: -------------------------------------------------------------------------------- 1 | export const parseLiteral = ( 2 | value: unknown, 3 | literal: Literal 4 | ): Literal => { 5 | if (value !== literal) { 6 | throw new Error(`Expected ${literal} but got ${value}`) 7 | } 8 | 9 | return value as Literal 10 | } 11 | 12 | export const parseOptionalLiteral = ( 13 | value: unknown, 14 | literal: Literal 15 | ): Literal | undefined => { 16 | if (value === undefined) { 17 | return undefined 18 | } 19 | 20 | return parseLiteral(value, literal) 21 | } 22 | 23 | export const parseNullableLiteral = ( 24 | value: unknown, 25 | literal: Literal 26 | ): Literal | null => { 27 | if (value === null) { 28 | return null 29 | } 30 | 31 | return parseLiteral(value, literal) 32 | } 33 | -------------------------------------------------------------------------------- /src/parse/number.ts: -------------------------------------------------------------------------------- 1 | export function parseNumber(value: unknown): number { 2 | if (typeof value !== 'number') throw new Error('Invalid type, not a number') 3 | return value 4 | } 5 | 6 | export function parseOptionalNumber(value: unknown): number | undefined { 7 | if (value === undefined) { 8 | return value 9 | } 10 | 11 | return parseNumber(value) 12 | } 13 | 14 | export function parseNullableNumber(value: unknown): number | null { 15 | if (value === null) { 16 | return value 17 | } 18 | 19 | return parseNumber(value) 20 | } 21 | -------------------------------------------------------------------------------- /src/parse/object.ts: -------------------------------------------------------------------------------- 1 | import type { InferZodObject, ZodObject, ZodType } from '../types' 2 | 3 | export function parseObject>( 4 | fields: Type, 5 | value: unknown 6 | ): InferZodObject> { 7 | if (typeof value !== 'object' || value == null) 8 | throw new Error('Not an object') 9 | 10 | const objectValue = value as Record 11 | 12 | // Check that each key in `fields` is present in the `value`, and its 13 | // value parses by the corresponding entry in `value` 14 | Object.entries(fields).forEach(([key, val]) => { 15 | const isKeyInObjectValue = key in objectValue 16 | 17 | if (!isKeyInObjectValue && fields[key] && 'isOptional' in fields[key]) { 18 | return 19 | } 20 | 21 | if (!isKeyInObjectValue) throw new Error(`Missing field ${key}`) 22 | 23 | val.parse(objectValue[key]) 24 | }) 25 | 26 | return value as InferZodObject> 27 | } 28 | 29 | export function parseOptionalObject>( 30 | fields: Type, 31 | value: unknown 32 | ): InferZodObject> | undefined { 33 | if (value === undefined) { 34 | return value 35 | } 36 | 37 | return parseObject(fields, value) 38 | } 39 | 40 | export function parseNullableObject>( 41 | fields: Type, 42 | value: unknown 43 | ): InferZodObject> | null { 44 | if (value === null) { 45 | return value 46 | } 47 | 48 | return parseObject(fields, value) 49 | } 50 | -------------------------------------------------------------------------------- /src/parse/string.ts: -------------------------------------------------------------------------------- 1 | export function parseString(value: unknown): string { 2 | if (typeof value !== 'string') throw new Error('Invalid type, not a string') 3 | return value 4 | } 5 | 6 | export function parseOptionalString(value: unknown): string | undefined { 7 | if (value === undefined) { 8 | return value 9 | } 10 | 11 | return parseString(value) 12 | } 13 | 14 | export function parseNullableString(value: unknown): string | null { 15 | if (value === null) { 16 | return value 17 | } 18 | 19 | return parseString(value) 20 | } 21 | -------------------------------------------------------------------------------- /src/parse/union.ts: -------------------------------------------------------------------------------- 1 | import type { Infer, ZodType } from '../types' 2 | 3 | export const parseUnion = >( 4 | options: Options, 5 | value: unknown 6 | ): Infer => { 7 | for (const option of options) { 8 | try { 9 | return option.parse(value) 10 | } catch (error) { 11 | // ignore error 12 | } 13 | } 14 | 15 | throw new Error( 16 | `Could not parse ${JSON.stringify(value)} as ${JSON.stringify( 17 | options.map((option) => option.type) 18 | )}` 19 | ) 20 | } 21 | 22 | export const parseOptionalUnion = >( 23 | options: Options, 24 | value: unknown 25 | ): Infer | undefined => { 26 | if (value === undefined) { 27 | return undefined 28 | } 29 | 30 | return parseUnion(options, value) 31 | } 32 | 33 | export const parseNullableUnion = >( 34 | options: Options, 35 | value: unknown 36 | ): Infer | null => { 37 | if (value === null) { 38 | return null 39 | } 40 | 41 | return parseUnion(options, value) 42 | } 43 | -------------------------------------------------------------------------------- /src/schemas/array.ts: -------------------------------------------------------------------------------- 1 | import type { ZodArray, ZodType } from '../types' 2 | 3 | import { parseArray, parseNullableArray, parseOptionalArray } from '../parse' 4 | 5 | export const array = (element: Type): ZodArray => ({ 6 | type: 'array', 7 | element, 8 | parse: (value: unknown) => parseArray(element, value), 9 | optional: () => ({ 10 | type: 'array', 11 | element, 12 | isOptional: true, 13 | parse: (value: unknown) => parseOptionalArray(element, value), 14 | }), 15 | 16 | nullable: () => ({ 17 | type: 'array', 18 | element, 19 | isNullable: true, 20 | parse: (value: unknown) => parseNullableArray(element, value), 21 | }), 22 | }) 23 | -------------------------------------------------------------------------------- /src/schemas/discriminated-union.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | DiscriminatedUnionOption, 3 | ZodDiscriminatedUnion, 4 | ZodLiteral, 5 | ZodObject, 6 | } from '../types' 7 | 8 | import { parseDiscriminatedUnion } from '../parse' 9 | 10 | export const discriminatedUnion = < 11 | Discriminator extends string, 12 | Options extends Array< 13 | ZodObject>> 14 | > 15 | >( 16 | key: Discriminator, 17 | options: Options 18 | ): ZodDiscriminatedUnion => ({ 19 | type: 'discriminated-union', 20 | discriminator: key, 21 | options, 22 | parse: (value: unknown) => parseDiscriminatedUnion(key, options, value), 23 | }) 24 | -------------------------------------------------------------------------------- /src/schemas/enum.ts: -------------------------------------------------------------------------------- 1 | import type { ZodEnum } from '../types' 2 | 3 | import { parseEnum, parseNullableEnum, parseOptionalEnum } from '../parse' 4 | 5 | export const Enum = >( 6 | values: Enum 7 | ): ZodEnum => ({ 8 | type: 'enum', 9 | values, 10 | parse: (value: unknown) => parseEnum(values, value), 11 | optional: () => ({ 12 | type: 'enum', 13 | isOptional: true, 14 | values, 15 | parse: (value: unknown) => parseOptionalEnum(values, value), 16 | }), 17 | nullable: () => ({ 18 | type: 'enum', 19 | isNullable: true, 20 | values, 21 | parse: (value: unknown) => parseNullableEnum(values, value), 22 | }), 23 | enum: values.reduce<{ [Key in Enum[number]]: Key }>( 24 | (accumulator, currentValue) => { 25 | accumulator[currentValue as Enum[number]] = currentValue 26 | return accumulator 27 | }, 28 | {} as { [Key in Enum[number]]: Key } 29 | ), 30 | }) 31 | -------------------------------------------------------------------------------- /src/schemas/index.ts: -------------------------------------------------------------------------------- 1 | import { array } from './array' 2 | import { discriminatedUnion } from './discriminated-union' 3 | import { Enum } from './enum' 4 | import { literal } from './literal' 5 | import { number } from './number' 6 | import { object } from './object' 7 | import { string } from './string' 8 | import { union } from './union' 9 | import { unknown } from './unknown' 10 | 11 | export const z = { 12 | string, 13 | number, 14 | unknown, 15 | array, 16 | object, 17 | union, 18 | enum: Enum, 19 | literal, 20 | discriminatedUnion, 21 | } as const 22 | -------------------------------------------------------------------------------- /src/schemas/literal.ts: -------------------------------------------------------------------------------- 1 | import type { ZodLiteral } from '../types' 2 | 3 | import { 4 | parseLiteral, 5 | parseNullableLiteral, 6 | parseOptionalLiteral, 7 | } from '../parse' 8 | 9 | export const literal = ( 10 | literal: Literal 11 | ): ZodLiteral => ({ 12 | type: 'literal', 13 | value: literal, 14 | parse: (value: unknown) => parseLiteral(value, literal), 15 | optional: () => ({ 16 | isOptional: true, 17 | type: 'literal', 18 | value: literal, 19 | parse: (value: unknown) => parseOptionalLiteral(value, literal), 20 | }), 21 | nullable: () => ({ 22 | isNullable: true, 23 | type: 'literal', 24 | value: literal, 25 | parse: (value: unknown) => parseNullableLiteral(value, literal), 26 | }), 27 | }) 28 | -------------------------------------------------------------------------------- /src/schemas/number.ts: -------------------------------------------------------------------------------- 1 | import type { ZodNumber } from '../types' 2 | 3 | import { parseNullableNumber, parseNumber, parseOptionalNumber } from '../parse' 4 | 5 | export const number = (): ZodNumber => ({ 6 | type: 'number', 7 | parse: parseNumber, 8 | optional: () => ({ 9 | type: 'number', 10 | isOptional: true, 11 | parse: parseOptionalNumber, 12 | }), 13 | nullable: () => ({ 14 | type: 'number', 15 | isNullable: true, 16 | parse: parseNullableNumber, 17 | }), 18 | }) 19 | -------------------------------------------------------------------------------- /src/schemas/object.ts: -------------------------------------------------------------------------------- 1 | import type { ZodObject, ZodType } from '../types' 2 | 3 | import { parseNullableObject, parseObject, parseOptionalObject } from '../parse' 4 | 5 | export const object = >( 6 | fields: Type 7 | ): ZodObject => ({ 8 | type: 'object', 9 | fields, 10 | parse: (value: unknown) => parseObject(fields, value), 11 | optional: () => ({ 12 | type: 'object', 13 | fields, 14 | isOptional: true, 15 | parse: (value: unknown) => parseOptionalObject(fields, value), 16 | }), 17 | nullable: () => ({ 18 | type: 'object', 19 | fields, 20 | isNullable: true, 21 | parse: (value: unknown) => parseNullableObject(fields, value), 22 | }), 23 | }) 24 | -------------------------------------------------------------------------------- /src/schemas/string.ts: -------------------------------------------------------------------------------- 1 | import type { ZodString } from '../types' 2 | 3 | import { parseNullableString, parseOptionalString, parseString } from '../parse' 4 | 5 | export const string = (): ZodString => ({ 6 | type: 'string', 7 | parse: parseString, 8 | optional: () => ({ 9 | type: 'string', 10 | isOptional: true, 11 | parse: parseOptionalString, 12 | }), 13 | nullable: () => ({ 14 | type: 'string', 15 | isNullable: true, 16 | parse: parseNullableString, 17 | }), 18 | }) 19 | -------------------------------------------------------------------------------- /src/schemas/union.ts: -------------------------------------------------------------------------------- 1 | import type { ZodType, ZodUnion } from '../types' 2 | 3 | import { parseNullableUnion, parseOptionalUnion, parseUnion } from '../parse' 4 | 5 | export const union = >( 6 | options: Options 7 | ): ZodUnion => ({ 8 | type: 'union', 9 | options, 10 | parse: (value: unknown) => parseUnion(options, value), 11 | optional: () => ({ 12 | type: 'union', 13 | isOptional: true, 14 | options, 15 | parse: (value: unknown) => parseOptionalUnion(options, value), 16 | }), 17 | nullable: () => ({ 18 | type: 'union', 19 | isNullable: true, 20 | parse: (value: unknown) => parseNullableUnion(options, value), 21 | }), 22 | }) 23 | -------------------------------------------------------------------------------- /src/schemas/unknown.ts: -------------------------------------------------------------------------------- 1 | import type { ZodUnknown } from '../types' 2 | 3 | export const unknown = (): ZodUnknown => ({ 4 | type: 'unknown', 5 | parse: (value: unknown) => value, 6 | }) 7 | -------------------------------------------------------------------------------- /src/types/index.ts: -------------------------------------------------------------------------------- 1 | export * from './zod-types' 2 | export * from './infer' 3 | -------------------------------------------------------------------------------- /src/types/infer.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | ZodString, 3 | ZodType, 4 | ZodUnknown, 5 | ZodNumber, 6 | ZodArray, 7 | ZodEnum, 8 | ZodObject, 9 | ZodOptional, 10 | ZodUnion, 11 | ZodLiteral, 12 | ZodDiscriminatedUnion, 13 | } from './zod-types' 14 | 15 | export type Infer = Type extends ZodUnknown 16 | ? unknown 17 | : Type extends ZodString 18 | ? string 19 | : Type extends ZodNumber 20 | ? number 21 | : Type extends ZodArray 22 | ? Array> 23 | : Type extends ZodEnum 24 | ? EnumType[number] 25 | : Type extends ZodLiteral 26 | ? LiteralType 27 | : Type extends ZodDiscriminatedUnion 28 | ? Infer 29 | : Type extends ZodObject 30 | ? InferObject 31 | : Type extends ZodUnion 32 | ? Infer 33 | : Type extends ZodOptional 34 | ? Infer | undefined | null 35 | : never 36 | 37 | // simplifying the types to avoid the error "Type instantiation is excessively deep and possibly infinite" 38 | 39 | // Simplified type for array inference 40 | export type InferElementType = ElementType extends ZodType 41 | ? Infer 42 | : never 43 | 44 | // Simplified type for object inference 45 | export type InferObject> = { 46 | [Key in keyof ObjectType]: Infer 47 | } 48 | 49 | // Simplified type for InferZodObject 50 | export type InferZodObject>> = 51 | InferObject 52 | -------------------------------------------------------------------------------- /src/types/zod-types.ts: -------------------------------------------------------------------------------- 1 | import type { Infer, InferElementType, InferZodObject } from './infer' 2 | 3 | export type ZodType = 4 | | ZodUnknown 5 | | ZodString 6 | | ZodNumber 7 | | ZodArray 8 | | ZodObject> 9 | | ZodOptional 10 | | ZodNullable 11 | | ZodEnum> 12 | | ZodUnion> 13 | | ZodLiteral 14 | | ZodDiscriminatedUnion< 15 | string, 16 | Array< 17 | ZodObject< 18 | { [K in string]: ZodLiteral } & Record 19 | > 20 | > 21 | > 22 | 23 | type OptionalOrNullable = 'optional' | 'nullable' 24 | 25 | export interface ZodOptional { 26 | type: Type['type'] 27 | isOptional: true 28 | parse(val: unknown): Infer | undefined 29 | } 30 | 31 | export interface ZodNullable { 32 | type: Type['type'] 33 | isNullable: true 34 | parse(val: unknown): Infer | null 35 | } 36 | export interface ZodEnum> { 37 | type: 'enum' 38 | values: Enum 39 | parse(val: unknown): Enum[number] 40 | enum: { [Key in Enum[number]]: Key } 41 | optional(): Omit>, OptionalOrNullable> 42 | nullable(): Omit>, OptionalOrNullable> 43 | } 44 | 45 | export interface ZodUnknown { 46 | type: 'unknown' 47 | parse(val: unknown): unknown 48 | } 49 | 50 | export interface ZodString { 51 | type: 'string' 52 | parse(val: unknown): string 53 | optional(): Omit, OptionalOrNullable> 54 | nullable(): Omit, OptionalOrNullable> 55 | } 56 | 57 | export interface ZodNumber { 58 | type: 'number' 59 | parse(val: unknown): number 60 | optional(): Omit, OptionalOrNullable> 61 | nullable(): Omit, OptionalOrNullable> 62 | } 63 | 64 | export interface ZodArray { 65 | type: 'array' 66 | element: Type 67 | parse(val: unknown): Array> 68 | optional(): Omit>, OptionalOrNullable> 69 | nullable(): Omit>, OptionalOrNullable> 70 | } 71 | 72 | export interface ZodObject> { 73 | type: 'object' 74 | fields: Type 75 | parse(val: unknown): InferZodObject> 76 | optional(): Omit>, OptionalOrNullable> 77 | nullable(): Omit>, OptionalOrNullable> 78 | } 79 | 80 | export interface ZodUnion> { 81 | type: 'union' 82 | options: Union 83 | parse(val: unknown): Infer 84 | optional(): Omit>, OptionalOrNullable> 85 | nullable(): Omit>, OptionalOrNullable> 86 | } 87 | 88 | export interface ZodLiteral { 89 | type: 'literal' 90 | value: Literal 91 | parse(val: unknown): Literal 92 | optional(): Omit>, OptionalOrNullable> 93 | nullable(): Omit>, OptionalOrNullable> 94 | } 95 | 96 | export type DiscriminatedUnionOption< 97 | Discriminator extends string, 98 | DiscriminatorType extends ZodLiteral 99 | > = { 100 | [K in Discriminator]: DiscriminatorType 101 | } & Record 102 | 103 | export interface ZodDiscriminatedUnion< 104 | Discriminator extends string, 105 | Union extends Array< 106 | ZodObject>> 107 | > 108 | > { 109 | type: 'discriminated-union' 110 | discriminator: Discriminator 111 | options: Union 112 | parse(val: unknown): Infer 113 | } 114 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Language and Environment */ 4 | "target": "ES2017" /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */, 5 | 6 | /* Modules */ 7 | "module": "CommonJS" /* Specify what module code is generated. */, 8 | "esModuleInterop": true /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */, 9 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 10 | "forceConsistentCasingInFileNames": true /* Ensure that casing is correct in imports. */, 11 | 12 | /* Type Checking */ 13 | "strict": true /* Enable all strict type-checking options. */, 14 | "skipLibCheck": true /* Skip type checking all .d.ts files. */, 15 | "noUnusedLocals": true, 16 | "noUnusedParameters": true, 17 | "outDir": "./dist", 18 | "rootDir": "./src" 19 | } 20 | } 21 | --------------------------------------------------------------------------------