├── .gitignore ├── .prettierrc.json ├── LICENSE ├── README.md ├── examples └── react-project │ ├── .eslintrc.cjs │ ├── .gitignore │ ├── README.md │ ├── index.html │ ├── package.json │ ├── pnpm-lock.yaml │ ├── public │ └── vite.svg │ ├── src │ ├── app │ │ ├── App.css │ │ ├── App.tsx │ │ ├── assets │ │ │ └── react.svg │ │ ├── container.ts │ │ ├── impl │ │ │ ├── api.ts │ │ │ ├── uikit.tsx │ │ │ └── users.ts │ │ ├── index.css │ │ └── main.tsx │ ├── entities │ │ └── user │ │ │ ├── index.ts │ │ │ └── model.ts │ ├── features │ │ ├── create-user │ │ │ ├── container.ts │ │ │ ├── index.ts │ │ │ ├── model │ │ │ │ └── use-create-user-from.ts │ │ │ └── ui │ │ │ │ └── create-user-form.tsx │ │ └── users-list │ │ │ ├── container.ts │ │ │ ├── index.ts │ │ │ ├── model │ │ │ └── use-users-list.ts │ │ │ └── ui │ │ │ └── users-list.tsx │ ├── kernel │ │ └── uikit.ts │ └── vite-env.d.ts │ ├── tsconfig.json │ ├── tsconfig.node.json │ └── vite.config.ts ├── images └── logo-1.png ├── lib ├── create-container.ts ├── create-module.ts ├── index.ts ├── merge-containers.ts └── types │ ├── container.ts │ ├── module.ts │ ├── provider.ts │ └── utils.ts ├── package.json ├── pnpm-lock.yaml ├── test ├── create-container.test.ts └── merge-containers.test.ts ├── tsconfig.json └── tsup.config.ts /.gitignore: -------------------------------------------------------------------------------- 1 | dist 2 | node_modules 3 | .npmrc 4 | -------------------------------------------------------------------------------- /.prettierrc.json: -------------------------------------------------------------------------------- 1 | {} 2 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | The MIT License (MIT) 2 | 3 | Copyright 2024 Evgeny Paromov 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of 6 | this software and associated documentation files (the "Software"), to deal in 7 | the Software without restriction, including without limitation the rights to 8 | use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of 9 | the Software, and to permit persons to whom the Software is furnished to do so, 10 | subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS 17 | FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR 18 | COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER 19 | IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN 20 | CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 21 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | Tiny invert logo 2 | 3 | **Tiny invert is a tiny yet powerful tool for dependency inversion.** 4 | 5 | ❌ It's not an implementation of the dependency injection pattern. 6 | 7 | ❌ It's not a copy of solutions from Java and C#. 8 | 9 | ✅ It's an implementation of dependency inversion in the most effective way for TypeScript. 10 | 11 | - **Tiny**: Less than 1kb in size. 12 | - **Typesafe**: All errors are checked at compile time by TypeScript. 13 | - **Modular**: Designed to work with independent modules. 14 | - **TS-way**: No decorators, classes, or keys are needed, only simple objects and lambdas. 15 | - **Explicit**: It is easy to track all dependencies of a module. 16 | 17 | ```typescript 18 | import { createContainer, createModule } from "tiny-invert"; 19 | 20 | // Define module dependencies 21 | interface Logger {} 22 | interface Api {} 23 | 24 | type ModuleDeps = { 25 | logger: Logger; 26 | api: Api; 27 | }; 28 | 29 | // Create container 30 | const Container = createContainer(); 31 | 32 | // Define provider with inverted dependency 33 | const loginProvider = Container.provider((ctx) => { 34 | // Initialization stage 35 | return function login(username: string, password: string) { 36 | // Runtime stage 37 | 38 | // Module dependencies usage 39 | ctx.deps.logger("login: start"); 40 | return ctx.deps.api.login(username, password); 41 | }; 42 | }); 43 | // Define dependent provider 44 | const authServiceProvider = Container.provider( 45 | (ctx) => ({ 46 | // Other providers usage 47 | login: ctx.innerDeps.login, 48 | }), 49 | { 50 | // Used providers 51 | login: loginProvider, 52 | }, 53 | ); 54 | 55 | // Define module 56 | const AuthServiceModule = createModule( 57 | // Entry provider 58 | authServiceProvider, 59 | ); 60 | 61 | // Create module instance 62 | const authService = AuthServiceModule.init({ 63 | logger: new Logger(), 64 | api: new Api(), 65 | }); 66 | 67 | // Run 68 | authService.login("Evgeny Paromov", "12345"); 69 | ``` 70 | 71 | ## Table of Contents 72 | 73 | - [Guide](#guide) 74 | - [Container](#container) 75 | - [Provider](#provider) 76 | - [Module](#module) 77 | - [Modules composition](#modules-composition) 78 | - [Recipes](#recipes) 79 | - [Provider entrypoint](#provider-entrypoint) 80 | - [Unit testing](#unit-testing) 81 | - [Async providers](#async-providers) 82 | 83 | ## Install 84 | 85 | ```sh 86 | npm install tiny-invert 87 | ``` 88 | 89 | ## Guide 90 | 91 | ### Container 92 | 93 | Container is used to define module dependencies. All providers created by the container can use the module dependencies. 94 | 95 | **createContainer has no runtime. It is used only for TypeScript type checking.** 96 | 97 | ```typescript 98 | interface Logger {} 99 | interface Api {} 100 | 101 | type ModuleDeps = { 102 | logger: Logger; 103 | api: Api; 104 | }; 105 | 106 | const Container = createContainer(); 107 | ``` 108 | 109 | Containers can be merged and extended. 110 | 111 | ```typescript 112 | import { createContainer, mergeContainers } from "tiny-invert"; 113 | 114 | const Container = mergeContainers([ 115 | createContainer<{ test1: string }>(), 116 | createContainer<{ test2: string }>(), 117 | ]); 118 | // Container<{ test1: string } & { test2: string }> 119 | 120 | const ExtendedContainer = Container.extend<{ test3: string }>(); 121 | // Container<{ test1: string } & { test2: string } & { test3: string }> 122 | ``` 123 | 124 | You can infer Container dependencies type 125 | 126 | ```typescript 127 | const Container = createContainer<{ test1: string }>(); 128 | 129 | type CotnainerDeps = typeof Container.$inferDeps; 130 | ``` 131 | 132 | ### Providers 133 | 134 | Provider is an object with a factory and links of dependency providers. 135 | 136 | To create a provider, you should call the `provider` method on `Container` with a `factory` and a record of dependency providers (optional). 137 | 138 | The factory takes one argument ctx which contains all module dependencies `ctx.deps` and provider dependencies `ctx.innerDeps`. 139 | 140 | ```typescript 141 | const loginProvider = Container.provider( 142 | (ctx) => { 143 | // Module deps configured by the container 144 | ctx.deps; 145 | 146 | // Provider deps configured by the second argument 147 | ctx.innerDeps.api; 148 | 149 | return function login(username: string, password: string) { 150 | return ctx.deps.api.login(username, password); 151 | }; 152 | }, 153 | { 154 | api: apiProvider, 155 | }, 156 | ); 157 | ``` 158 | 159 | Dependencies should contain providers which are created by the container with the same module dependencies type. 160 | 161 | To use providers from different containers, you should use `Container.extend` or `mergeContainers`. 162 | 163 | ```typescript 164 | const Container1 = createContainer<{ test1: string }>(); 165 | const Container2 = createContainer<{ test2: string }>(); 166 | const provider1 = Container1.provider((ctx) => { 167 | ... 168 | }) 169 | const provider2 = Container2.provider((ctx) => { 170 | ... 171 | }) 172 | 173 | const provider3 = mergeContainers([Container1, Container2]).provider((ctx) => { 174 | ctx.innerDeps.provider1 175 | ctx.innerDeps.provider2 176 | }, { 177 | provider2, provider1 178 | }) 179 | ``` 180 | 181 | Use this to Interface Segregation Principle (ISP) realization. 182 | 183 | Use can infer provider dependencies and return type. 184 | 185 | ```typescript 186 | type ProviderDeps = typeof provider.$inferDeps; 187 | type ProviderResult = typeof provider.$inferResult; 188 | type ProviderInnerDeps = typeof provider.$inferInnerDeps; 189 | ``` 190 | 191 | ### Module 192 | 193 | Modules are used to define the entry point of provider hierarchy. 194 | 195 | To create a module, you should pass the entry provider to `createModule`. 196 | 197 | ```typescript 198 | 199 | const Container = createContainer<{ ... }>(); 200 | const provider = Container.provider((ctx) => { 201 | ... 202 | }) 203 | const Module = createModule(provider); 204 | ``` 205 | 206 | The module has an `init` method which runs all provider factories from leaves to the entry provider. 207 | 208 | `init` takes module dependencies of the entry provider and returns the entry provider result. 209 | 210 | ```typescript 211 | const Container = createContainer<{ test: string }>(); 212 | const Module = createModule(Container.provider((ctx) => ctx.deps.test)); 213 | 214 | Module.init({}); 215 | ``` 216 | 217 | Each provider will be called only once. But in the next 'init' call, it will be called again. You can cache init results or provider factories to prevent this. 218 | 219 | ```typescript 220 | const CachedInit = cache(Module.init); 221 | ``` 222 | 223 | ### Modules composition 224 | 225 | Modules can be composed. Child modules can be converted to providers and used in parent modules. 226 | 227 | ```typescript 228 | // SHARED TYPES 229 | type Config = {}; 230 | 231 | // CHILD MODULE 232 | type DependencyFromParent = {}; 233 | 234 | const ChildContainer = createContainer<{ 235 | confing: Config; 236 | parentDep: DependencyFromParent; 237 | }>(); 238 | 239 | const childProvider = ChildContainer.provider((ctx) => {}); 240 | 241 | const ChildModule = createModule(childProvider); 242 | 243 | // PARENT MODULE 244 | const ParentContainer = createContainer<{ config: Config }>(); 245 | 246 | const childDependencyProvider = ParentContainer.provider( 247 | (ctx): DependencyFromParent => {}, 248 | ); 249 | 250 | const childModuleProvider = ParentContainer.provider( 251 | (ctx) => 252 | ChildModule.init({ 253 | confing: ctx.deps.config, 254 | parentDep: ctx.innerDeps.childDep, 255 | }), 256 | { 257 | childDep: childDependencyProvider, 258 | }, 259 | ); 260 | 261 | const parentProvider = ParentContainer.provider( 262 | (ctx) => { 263 | ctx.innerDeps.childModule; 264 | return () => {}; 265 | }, 266 | { 267 | childModule: childModuleProvider, 268 | }, 269 | ); 270 | 271 | const ParentModule = createModule(parentProvider); 272 | 273 | const parentModule = ParentModule.init({ config: {} }); 274 | ``` 275 | 276 | ## Recipes 277 | 278 | ### Provider entrypoint 279 | 280 | ```typescript 281 | const Container = createContainer(); 282 | 283 | const provider1 = Container.provider((ctx) => {}); 284 | const provider2 = Container.provider((ctx) => {}); 285 | 286 | createModule( 287 | Container.provider((ctx) => ctx.innerDeps, { 288 | provider1, 289 | provider2, 290 | }), 291 | ); 292 | ``` 293 | 294 | ### Unit testing 295 | 296 | ```typescript 297 | const ServiceProvider = Container.provider((ctx) => {}, { 298 | provider1, 299 | }); 300 | 301 | test("service", () => { 302 | const serviceInstance = ServiceProvider.factory({ 303 | deps: { 304 | api: new ApiImpl(), 305 | }, 306 | innerDeps: { 307 | provider1: () => {}, 308 | }, 309 | }); 310 | }); 311 | ``` 312 | 313 | ### Async providers 314 | 315 | ```typescript 316 | const Container = createContainer(); 317 | 318 | const provider1 = Container.provider(async (ctx) => { 319 | return "asyncValue"; 320 | }); 321 | const provider2 = Container.provider( 322 | async (ctx) => { 323 | // before provider1 ready 324 | 325 | await ctx.innerDeps.provider1; 326 | 327 | // after provider1 ready 328 | 329 | return "asyncValue2"; 330 | }, 331 | { 332 | provider1, 333 | }, 334 | ); 335 | 336 | const Module = createModule(provider2); 337 | 338 | const asyncModuleInstance = await Module.init(); 339 | ``` 340 | -------------------------------------------------------------------------------- /examples/react-project/.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | root: true, 3 | env: { browser: true, es2020: true }, 4 | extends: [ 5 | 'eslint:recommended', 6 | 'plugin:@typescript-eslint/recommended', 7 | 'plugin:react-hooks/recommended', 8 | ], 9 | ignorePatterns: ['dist', '.eslintrc.cjs'], 10 | parser: '@typescript-eslint/parser', 11 | plugins: ['react-refresh'], 12 | rules: { 13 | 'react-refresh/only-export-components': [ 14 | 'warn', 15 | { allowConstantExport: true }, 16 | ], 17 | }, 18 | } 19 | -------------------------------------------------------------------------------- /examples/react-project/.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | pnpm-debug.log* 8 | lerna-debug.log* 9 | 10 | node_modules 11 | dist 12 | dist-ssr 13 | *.local 14 | 15 | # Editor directories and files 16 | .vscode/* 17 | !.vscode/extensions.json 18 | .idea 19 | .DS_Store 20 | *.suo 21 | *.ntvs* 22 | *.njsproj 23 | *.sln 24 | *.sw? 25 | -------------------------------------------------------------------------------- /examples/react-project/README.md: -------------------------------------------------------------------------------- 1 | # React + TypeScript + Vite 2 | 3 | This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules. 4 | 5 | Currently, two official plugins are available: 6 | 7 | - [@vitejs/plugin-react](https://github.com/vitejs/vite-plugin-react/blob/main/packages/plugin-react/README.md) uses [Babel](https://babeljs.io/) for Fast Refresh 8 | - [@vitejs/plugin-react-swc](https://github.com/vitejs/vite-plugin-react-swc) uses [SWC](https://swc.rs/) for Fast Refresh 9 | 10 | ## Expanding the ESLint configuration 11 | 12 | If you are developing a production application, we recommend updating the configuration to enable type aware lint rules: 13 | 14 | - Configure the top-level `parserOptions` property like this: 15 | 16 | ```js 17 | export default { 18 | // other rules... 19 | parserOptions: { 20 | ecmaVersion: 'latest', 21 | sourceType: 'module', 22 | project: ['./tsconfig.json', './tsconfig.node.json'], 23 | tsconfigRootDir: __dirname, 24 | }, 25 | } 26 | ``` 27 | 28 | - Replace `plugin:@typescript-eslint/recommended` to `plugin:@typescript-eslint/recommended-type-checked` or `plugin:@typescript-eslint/strict-type-checked` 29 | - Optionally add `plugin:@typescript-eslint/stylistic-type-checked` 30 | - Install [eslint-plugin-react](https://github.com/jsx-eslint/eslint-plugin-react) and add `plugin:react/recommended` & `plugin:react/jsx-runtime` to the `extends` list 31 | -------------------------------------------------------------------------------- /examples/react-project/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | Vite + React + TS 8 | 9 | 10 |
11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /examples/react-project/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "react-project", 3 | "private": true, 4 | "version": "0.0.0", 5 | "type": "module", 6 | "scripts": { 7 | "dev": "vite", 8 | "build": "tsc && vite build", 9 | "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0", 10 | "preview": "vite preview" 11 | }, 12 | "dependencies": { 13 | "nanoid": "^5.0.7", 14 | "react": "^18.2.0", 15 | "react-dom": "^18.2.0", 16 | "react-hook-form": "^7.51.4" 17 | }, 18 | "devDependencies": { 19 | "@types/react": "^18.2.66", 20 | "@types/react-dom": "^18.2.22", 21 | "@typescript-eslint/eslint-plugin": "^7.2.0", 22 | "@typescript-eslint/parser": "^7.2.0", 23 | "@vitejs/plugin-react-swc": "^3.5.0", 24 | "eslint": "^8.57.0", 25 | "eslint-plugin-react-hooks": "^4.6.0", 26 | "eslint-plugin-react-refresh": "^0.4.6", 27 | "typescript": "^5.2.2", 28 | "vite": "^5.2.0" 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /examples/react-project/pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | nanoid: 12 | specifier: ^5.0.7 13 | version: 5.0.7 14 | react: 15 | specifier: ^18.2.0 16 | version: 18.3.1 17 | react-dom: 18 | specifier: ^18.2.0 19 | version: 18.3.1(react@18.3.1) 20 | react-hook-form: 21 | specifier: ^7.51.4 22 | version: 7.51.4(react@18.3.1) 23 | devDependencies: 24 | '@types/react': 25 | specifier: ^18.2.66 26 | version: 18.3.1 27 | '@types/react-dom': 28 | specifier: ^18.2.22 29 | version: 18.3.0 30 | '@typescript-eslint/eslint-plugin': 31 | specifier: ^7.2.0 32 | version: 7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5) 33 | '@typescript-eslint/parser': 34 | specifier: ^7.2.0 35 | version: 7.8.0(eslint@8.57.0)(typescript@5.4.5) 36 | '@vitejs/plugin-react-swc': 37 | specifier: ^3.5.0 38 | version: 3.6.0(vite@5.2.11) 39 | eslint: 40 | specifier: ^8.57.0 41 | version: 8.57.0 42 | eslint-plugin-react-hooks: 43 | specifier: ^4.6.0 44 | version: 4.6.2(eslint@8.57.0) 45 | eslint-plugin-react-refresh: 46 | specifier: ^0.4.6 47 | version: 0.4.7(eslint@8.57.0) 48 | typescript: 49 | specifier: ^5.2.2 50 | version: 5.4.5 51 | vite: 52 | specifier: ^5.2.0 53 | version: 5.2.11 54 | 55 | packages: 56 | 57 | '@esbuild/aix-ppc64@0.20.2': 58 | resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} 59 | engines: {node: '>=12'} 60 | cpu: [ppc64] 61 | os: [aix] 62 | 63 | '@esbuild/android-arm64@0.20.2': 64 | resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} 65 | engines: {node: '>=12'} 66 | cpu: [arm64] 67 | os: [android] 68 | 69 | '@esbuild/android-arm@0.20.2': 70 | resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} 71 | engines: {node: '>=12'} 72 | cpu: [arm] 73 | os: [android] 74 | 75 | '@esbuild/android-x64@0.20.2': 76 | resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} 77 | engines: {node: '>=12'} 78 | cpu: [x64] 79 | os: [android] 80 | 81 | '@esbuild/darwin-arm64@0.20.2': 82 | resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} 83 | engines: {node: '>=12'} 84 | cpu: [arm64] 85 | os: [darwin] 86 | 87 | '@esbuild/darwin-x64@0.20.2': 88 | resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} 89 | engines: {node: '>=12'} 90 | cpu: [x64] 91 | os: [darwin] 92 | 93 | '@esbuild/freebsd-arm64@0.20.2': 94 | resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} 95 | engines: {node: '>=12'} 96 | cpu: [arm64] 97 | os: [freebsd] 98 | 99 | '@esbuild/freebsd-x64@0.20.2': 100 | resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} 101 | engines: {node: '>=12'} 102 | cpu: [x64] 103 | os: [freebsd] 104 | 105 | '@esbuild/linux-arm64@0.20.2': 106 | resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} 107 | engines: {node: '>=12'} 108 | cpu: [arm64] 109 | os: [linux] 110 | 111 | '@esbuild/linux-arm@0.20.2': 112 | resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} 113 | engines: {node: '>=12'} 114 | cpu: [arm] 115 | os: [linux] 116 | 117 | '@esbuild/linux-ia32@0.20.2': 118 | resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} 119 | engines: {node: '>=12'} 120 | cpu: [ia32] 121 | os: [linux] 122 | 123 | '@esbuild/linux-loong64@0.20.2': 124 | resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} 125 | engines: {node: '>=12'} 126 | cpu: [loong64] 127 | os: [linux] 128 | 129 | '@esbuild/linux-mips64el@0.20.2': 130 | resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} 131 | engines: {node: '>=12'} 132 | cpu: [mips64el] 133 | os: [linux] 134 | 135 | '@esbuild/linux-ppc64@0.20.2': 136 | resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} 137 | engines: {node: '>=12'} 138 | cpu: [ppc64] 139 | os: [linux] 140 | 141 | '@esbuild/linux-riscv64@0.20.2': 142 | resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} 143 | engines: {node: '>=12'} 144 | cpu: [riscv64] 145 | os: [linux] 146 | 147 | '@esbuild/linux-s390x@0.20.2': 148 | resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} 149 | engines: {node: '>=12'} 150 | cpu: [s390x] 151 | os: [linux] 152 | 153 | '@esbuild/linux-x64@0.20.2': 154 | resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} 155 | engines: {node: '>=12'} 156 | cpu: [x64] 157 | os: [linux] 158 | 159 | '@esbuild/netbsd-x64@0.20.2': 160 | resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} 161 | engines: {node: '>=12'} 162 | cpu: [x64] 163 | os: [netbsd] 164 | 165 | '@esbuild/openbsd-x64@0.20.2': 166 | resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} 167 | engines: {node: '>=12'} 168 | cpu: [x64] 169 | os: [openbsd] 170 | 171 | '@esbuild/sunos-x64@0.20.2': 172 | resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} 173 | engines: {node: '>=12'} 174 | cpu: [x64] 175 | os: [sunos] 176 | 177 | '@esbuild/win32-arm64@0.20.2': 178 | resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} 179 | engines: {node: '>=12'} 180 | cpu: [arm64] 181 | os: [win32] 182 | 183 | '@esbuild/win32-ia32@0.20.2': 184 | resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} 185 | engines: {node: '>=12'} 186 | cpu: [ia32] 187 | os: [win32] 188 | 189 | '@esbuild/win32-x64@0.20.2': 190 | resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} 191 | engines: {node: '>=12'} 192 | cpu: [x64] 193 | os: [win32] 194 | 195 | '@eslint-community/eslint-utils@4.4.0': 196 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 197 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 198 | peerDependencies: 199 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 200 | 201 | '@eslint-community/regexpp@4.10.0': 202 | resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} 203 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 204 | 205 | '@eslint/eslintrc@2.1.4': 206 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 207 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 208 | 209 | '@eslint/js@8.57.0': 210 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} 211 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 212 | 213 | '@humanwhocodes/config-array@0.11.14': 214 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 215 | engines: {node: '>=10.10.0'} 216 | 217 | '@humanwhocodes/module-importer@1.0.1': 218 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 219 | engines: {node: '>=12.22'} 220 | 221 | '@humanwhocodes/object-schema@2.0.3': 222 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 223 | 224 | '@nodelib/fs.scandir@2.1.5': 225 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 226 | engines: {node: '>= 8'} 227 | 228 | '@nodelib/fs.stat@2.0.5': 229 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 230 | engines: {node: '>= 8'} 231 | 232 | '@nodelib/fs.walk@1.2.8': 233 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 234 | engines: {node: '>= 8'} 235 | 236 | '@rollup/rollup-android-arm-eabi@4.17.2': 237 | resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} 238 | cpu: [arm] 239 | os: [android] 240 | 241 | '@rollup/rollup-android-arm64@4.17.2': 242 | resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} 243 | cpu: [arm64] 244 | os: [android] 245 | 246 | '@rollup/rollup-darwin-arm64@4.17.2': 247 | resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} 248 | cpu: [arm64] 249 | os: [darwin] 250 | 251 | '@rollup/rollup-darwin-x64@4.17.2': 252 | resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} 253 | cpu: [x64] 254 | os: [darwin] 255 | 256 | '@rollup/rollup-linux-arm-gnueabihf@4.17.2': 257 | resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} 258 | cpu: [arm] 259 | os: [linux] 260 | 261 | '@rollup/rollup-linux-arm-musleabihf@4.17.2': 262 | resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} 263 | cpu: [arm] 264 | os: [linux] 265 | 266 | '@rollup/rollup-linux-arm64-gnu@4.17.2': 267 | resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} 268 | cpu: [arm64] 269 | os: [linux] 270 | 271 | '@rollup/rollup-linux-arm64-musl@4.17.2': 272 | resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} 273 | cpu: [arm64] 274 | os: [linux] 275 | 276 | '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': 277 | resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} 278 | cpu: [ppc64] 279 | os: [linux] 280 | 281 | '@rollup/rollup-linux-riscv64-gnu@4.17.2': 282 | resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} 283 | cpu: [riscv64] 284 | os: [linux] 285 | 286 | '@rollup/rollup-linux-s390x-gnu@4.17.2': 287 | resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} 288 | cpu: [s390x] 289 | os: [linux] 290 | 291 | '@rollup/rollup-linux-x64-gnu@4.17.2': 292 | resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} 293 | cpu: [x64] 294 | os: [linux] 295 | 296 | '@rollup/rollup-linux-x64-musl@4.17.2': 297 | resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} 298 | cpu: [x64] 299 | os: [linux] 300 | 301 | '@rollup/rollup-win32-arm64-msvc@4.17.2': 302 | resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} 303 | cpu: [arm64] 304 | os: [win32] 305 | 306 | '@rollup/rollup-win32-ia32-msvc@4.17.2': 307 | resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} 308 | cpu: [ia32] 309 | os: [win32] 310 | 311 | '@rollup/rollup-win32-x64-msvc@4.17.2': 312 | resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} 313 | cpu: [x64] 314 | os: [win32] 315 | 316 | '@swc/core-darwin-arm64@1.5.5': 317 | resolution: {integrity: sha512-Ol5ZwZYdTOZsv2NwjcT/qVVALKzVFeh+IJ4GNarr3P99+38Dkwi81OqCI1o/WaDXQYKAQC/V+CzMbkEuJJfq9Q==} 318 | engines: {node: '>=10'} 319 | cpu: [arm64] 320 | os: [darwin] 321 | 322 | '@swc/core-darwin-x64@1.5.5': 323 | resolution: {integrity: sha512-XHWpKBIPKYLgh5/lV2PYjO84lkzf5JR51kjiloyz2Pa9HIV8tHoAP8bYdJwm4nUp2I7KcEh3pPH0AVu5LpxMKw==} 324 | engines: {node: '>=10'} 325 | cpu: [x64] 326 | os: [darwin] 327 | 328 | '@swc/core-linux-arm-gnueabihf@1.5.5': 329 | resolution: {integrity: sha512-vtoWNCWAe+CNSqtqIwFnIH48qgPPlUZKoQ4EVFeMM+7/kDi6SeNxoh5TierJs5bKAWxD49VkPvRoWFCk6V62mA==} 330 | engines: {node: '>=10'} 331 | cpu: [arm] 332 | os: [linux] 333 | 334 | '@swc/core-linux-arm64-gnu@1.5.5': 335 | resolution: {integrity: sha512-L4l7M78U6h/rCAxId+y5Vu+1KfDRF6dJZtitFcaT293guiUQFwJv8gLxI4Jh5wFtZ0fYd0QaCuvh2Ip79CzGMg==} 336 | engines: {node: '>=10'} 337 | cpu: [arm64] 338 | os: [linux] 339 | 340 | '@swc/core-linux-arm64-musl@1.5.5': 341 | resolution: {integrity: sha512-DkzJc13ukXa7oJpyn24BjIgsiOybYrc+IxjsQyfNlDrrs1QXP4elStcpkD02SsIuSyHjZV8Hw2HFBMQB3OHPrA==} 342 | engines: {node: '>=10'} 343 | cpu: [arm64] 344 | os: [linux] 345 | 346 | '@swc/core-linux-x64-gnu@1.5.5': 347 | resolution: {integrity: sha512-kj4ZwWJGeBEUzHrRQP2VudN+kkkYH7OI1dPVDc6kWQx5X4329JeKOas4qY0l7gDVjBbRwN9IbbPI6TIn2KfAug==} 348 | engines: {node: '>=10'} 349 | cpu: [x64] 350 | os: [linux] 351 | 352 | '@swc/core-linux-x64-musl@1.5.5': 353 | resolution: {integrity: sha512-6pTorCs4mYhPhYtC4jNOnhGgjNd3DZcRoZ9P0tzXXP69aCbYjvlgNH/NRvAROp9AaVFeZ7a7PmCWb6+Rbe7NKg==} 354 | engines: {node: '>=10'} 355 | cpu: [x64] 356 | os: [linux] 357 | 358 | '@swc/core-win32-arm64-msvc@1.5.5': 359 | resolution: {integrity: sha512-o0/9pstmEjwZyrY/bA+mymF0zH7E+GT/XCVqdKeWW9Wn3gTTyWa5MZnrFgI2THQ+AXwdglMB/Zo76ARQPaz/+A==} 360 | engines: {node: '>=10'} 361 | cpu: [arm64] 362 | os: [win32] 363 | 364 | '@swc/core-win32-ia32-msvc@1.5.5': 365 | resolution: {integrity: sha512-B+nypUwsmCuaH6RtKWgiPCb+ENjxstJPPJeMJvBqlJqyCaIkZzN4M07Ozi3xVv1VG21SRkd6G3xIqRoalrNc0Q==} 366 | engines: {node: '>=10'} 367 | cpu: [ia32] 368 | os: [win32] 369 | 370 | '@swc/core-win32-x64-msvc@1.5.5': 371 | resolution: {integrity: sha512-ry83ki9ZX0Q+GWGnqc2J618Z+FvKE8Ajn42F8EYi8Wj0q6Jz3mj+pJzgzakk2INm2ldEZ+FaRPipn4ozsZDcBg==} 372 | engines: {node: '>=10'} 373 | cpu: [x64] 374 | os: [win32] 375 | 376 | '@swc/core@1.5.5': 377 | resolution: {integrity: sha512-M8O22EEgdSONLd+7KRrXj8pn+RdAZZ7ISnPjE9KCQQlI0kkFNEquWR+uFdlFxQfwlyCe/Zb6uGXGDvtcov4IMg==} 378 | engines: {node: '>=10'} 379 | peerDependencies: 380 | '@swc/helpers': ^0.5.0 381 | peerDependenciesMeta: 382 | '@swc/helpers': 383 | optional: true 384 | 385 | '@swc/counter@0.1.3': 386 | resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} 387 | 388 | '@swc/types@0.1.6': 389 | resolution: {integrity: sha512-/JLo/l2JsT/LRd80C3HfbmVpxOAJ11FO2RCEslFrgzLltoP9j8XIbsyDcfCt2WWyX+CM96rBoNM+IToAkFOugg==} 390 | 391 | '@types/estree@1.0.5': 392 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 393 | 394 | '@types/json-schema@7.0.15': 395 | resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} 396 | 397 | '@types/prop-types@15.7.12': 398 | resolution: {integrity: sha512-5zvhXYtRNRluoE/jAp4GVsSduVUzNWKkOZrCDBWYtE7biZywwdC2AcEzg+cSMLFRfVgeAFqpfNabiPjxFddV1Q==} 399 | 400 | '@types/react-dom@18.3.0': 401 | resolution: {integrity: sha512-EhwApuTmMBmXuFOikhQLIBUn6uFg81SwLMOAUgodJF14SOBOCMdU04gDoYi0WOJJHD144TL32z4yDqCW3dnkQg==} 402 | 403 | '@types/react@18.3.1': 404 | resolution: {integrity: sha512-V0kuGBX3+prX+DQ/7r2qsv1NsdfnCLnTgnRJ1pYnxykBhGMz+qj+box5lq7XsO5mtZsBqpjwwTu/7wszPfMBcw==} 405 | 406 | '@types/semver@7.5.8': 407 | resolution: {integrity: sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==} 408 | 409 | '@typescript-eslint/eslint-plugin@7.8.0': 410 | resolution: {integrity: sha512-gFTT+ezJmkwutUPmB0skOj3GZJtlEGnlssems4AjkVweUPGj7jRwwqg0Hhg7++kPGJqKtTYx+R05Ftww372aIg==} 411 | engines: {node: ^18.18.0 || >=20.0.0} 412 | peerDependencies: 413 | '@typescript-eslint/parser': ^7.0.0 414 | eslint: ^8.56.0 415 | typescript: '*' 416 | peerDependenciesMeta: 417 | typescript: 418 | optional: true 419 | 420 | '@typescript-eslint/parser@7.8.0': 421 | resolution: {integrity: sha512-KgKQly1pv0l4ltcftP59uQZCi4HUYswCLbTqVZEJu7uLX8CTLyswqMLqLN+2QFz4jCptqWVV4SB7vdxcH2+0kQ==} 422 | engines: {node: ^18.18.0 || >=20.0.0} 423 | peerDependencies: 424 | eslint: ^8.56.0 425 | typescript: '*' 426 | peerDependenciesMeta: 427 | typescript: 428 | optional: true 429 | 430 | '@typescript-eslint/scope-manager@7.8.0': 431 | resolution: {integrity: sha512-viEmZ1LmwsGcnr85gIq+FCYI7nO90DVbE37/ll51hjv9aG+YZMb4WDE2fyWpUR4O/UrhGRpYXK/XajcGTk2B8g==} 432 | engines: {node: ^18.18.0 || >=20.0.0} 433 | 434 | '@typescript-eslint/type-utils@7.8.0': 435 | resolution: {integrity: sha512-H70R3AefQDQpz9mGv13Uhi121FNMh+WEaRqcXTX09YEDky21km4dV1ZXJIp8QjXc4ZaVkXVdohvWDzbnbHDS+A==} 436 | engines: {node: ^18.18.0 || >=20.0.0} 437 | peerDependencies: 438 | eslint: ^8.56.0 439 | typescript: '*' 440 | peerDependenciesMeta: 441 | typescript: 442 | optional: true 443 | 444 | '@typescript-eslint/types@7.8.0': 445 | resolution: {integrity: sha512-wf0peJ+ZGlcH+2ZS23aJbOv+ztjeeP8uQ9GgwMJGVLx/Nj9CJt17GWgWWoSmoRVKAX2X+7fzEnAjxdvK2gqCLw==} 446 | engines: {node: ^18.18.0 || >=20.0.0} 447 | 448 | '@typescript-eslint/typescript-estree@7.8.0': 449 | resolution: {integrity: sha512-5pfUCOwK5yjPaJQNy44prjCwtr981dO8Qo9J9PwYXZ0MosgAbfEMB008dJ5sNo3+/BN6ytBPuSvXUg9SAqB0dg==} 450 | engines: {node: ^18.18.0 || >=20.0.0} 451 | peerDependencies: 452 | typescript: '*' 453 | peerDependenciesMeta: 454 | typescript: 455 | optional: true 456 | 457 | '@typescript-eslint/utils@7.8.0': 458 | resolution: {integrity: sha512-L0yFqOCflVqXxiZyXrDr80lnahQfSOfc9ELAAZ75sqicqp2i36kEZZGuUymHNFoYOqxRT05up760b4iGsl02nQ==} 459 | engines: {node: ^18.18.0 || >=20.0.0} 460 | peerDependencies: 461 | eslint: ^8.56.0 462 | 463 | '@typescript-eslint/visitor-keys@7.8.0': 464 | resolution: {integrity: sha512-q4/gibTNBQNA0lGyYQCmWRS5D15n8rXh4QjK3KV+MBPlTYHpfBUT3D3PaPR/HeNiI9W6R7FvlkcGhNyAoP+caA==} 465 | engines: {node: ^18.18.0 || >=20.0.0} 466 | 467 | '@ungap/structured-clone@1.2.0': 468 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 469 | 470 | '@vitejs/plugin-react-swc@3.6.0': 471 | resolution: {integrity: sha512-XFRbsGgpGxGzEV5i5+vRiro1bwcIaZDIdBRP16qwm+jP68ue/S8FJTBEgOeojtVDYrbSua3XFp71kC8VJE6v+g==} 472 | peerDependencies: 473 | vite: ^4 || ^5 474 | 475 | acorn-jsx@5.3.2: 476 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 477 | peerDependencies: 478 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 479 | 480 | acorn@8.11.3: 481 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 482 | engines: {node: '>=0.4.0'} 483 | hasBin: true 484 | 485 | ajv@6.12.6: 486 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 487 | 488 | ansi-regex@5.0.1: 489 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 490 | engines: {node: '>=8'} 491 | 492 | ansi-styles@4.3.0: 493 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 494 | engines: {node: '>=8'} 495 | 496 | argparse@2.0.1: 497 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 498 | 499 | array-union@2.1.0: 500 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 501 | engines: {node: '>=8'} 502 | 503 | balanced-match@1.0.2: 504 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 505 | 506 | brace-expansion@1.1.11: 507 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 508 | 509 | brace-expansion@2.0.1: 510 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 511 | 512 | braces@3.0.2: 513 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 514 | engines: {node: '>=8'} 515 | 516 | callsites@3.1.0: 517 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 518 | engines: {node: '>=6'} 519 | 520 | chalk@4.1.2: 521 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 522 | engines: {node: '>=10'} 523 | 524 | color-convert@2.0.1: 525 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 526 | engines: {node: '>=7.0.0'} 527 | 528 | color-name@1.1.4: 529 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 530 | 531 | concat-map@0.0.1: 532 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 533 | 534 | cross-spawn@7.0.3: 535 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 536 | engines: {node: '>= 8'} 537 | 538 | csstype@3.1.3: 539 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 540 | 541 | debug@4.3.4: 542 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 543 | engines: {node: '>=6.0'} 544 | peerDependencies: 545 | supports-color: '*' 546 | peerDependenciesMeta: 547 | supports-color: 548 | optional: true 549 | 550 | deep-is@0.1.4: 551 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 552 | 553 | dir-glob@3.0.1: 554 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 555 | engines: {node: '>=8'} 556 | 557 | doctrine@3.0.0: 558 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 559 | engines: {node: '>=6.0.0'} 560 | 561 | esbuild@0.20.2: 562 | resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} 563 | engines: {node: '>=12'} 564 | hasBin: true 565 | 566 | escape-string-regexp@4.0.0: 567 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 568 | engines: {node: '>=10'} 569 | 570 | eslint-plugin-react-hooks@4.6.2: 571 | resolution: {integrity: sha512-QzliNJq4GinDBcD8gPB5v0wh6g8q3SUi6EFF0x8N/BL9PoVs0atuGc47ozMRyOWAKdwaZ5OnbOEa3WR+dSGKuQ==} 572 | engines: {node: '>=10'} 573 | peerDependencies: 574 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 575 | 576 | eslint-plugin-react-refresh@0.4.7: 577 | resolution: {integrity: sha512-yrj+KInFmwuQS2UQcg1SF83ha1tuHC1jMQbRNyuWtlEzzKRDgAl7L4Yp4NlDUZTZNlWvHEzOtJhMi40R7JxcSw==} 578 | peerDependencies: 579 | eslint: '>=7' 580 | 581 | eslint-scope@7.2.2: 582 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 583 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 584 | 585 | eslint-visitor-keys@3.4.3: 586 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 587 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 588 | 589 | eslint@8.57.0: 590 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} 591 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 592 | hasBin: true 593 | 594 | espree@9.6.1: 595 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 596 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 597 | 598 | esquery@1.5.0: 599 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} 600 | engines: {node: '>=0.10'} 601 | 602 | esrecurse@4.3.0: 603 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 604 | engines: {node: '>=4.0'} 605 | 606 | estraverse@5.3.0: 607 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 608 | engines: {node: '>=4.0'} 609 | 610 | esutils@2.0.3: 611 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 612 | engines: {node: '>=0.10.0'} 613 | 614 | fast-deep-equal@3.1.3: 615 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 616 | 617 | fast-glob@3.3.2: 618 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 619 | engines: {node: '>=8.6.0'} 620 | 621 | fast-json-stable-stringify@2.1.0: 622 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 623 | 624 | fast-levenshtein@2.0.6: 625 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 626 | 627 | fastq@1.17.1: 628 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 629 | 630 | file-entry-cache@6.0.1: 631 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 632 | engines: {node: ^10.12.0 || >=12.0.0} 633 | 634 | fill-range@7.0.1: 635 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 636 | engines: {node: '>=8'} 637 | 638 | find-up@5.0.0: 639 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 640 | engines: {node: '>=10'} 641 | 642 | flat-cache@3.2.0: 643 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 644 | engines: {node: ^10.12.0 || >=12.0.0} 645 | 646 | flatted@3.3.1: 647 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 648 | 649 | fs.realpath@1.0.0: 650 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 651 | 652 | fsevents@2.3.3: 653 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 654 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 655 | os: [darwin] 656 | 657 | glob-parent@5.1.2: 658 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 659 | engines: {node: '>= 6'} 660 | 661 | glob-parent@6.0.2: 662 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 663 | engines: {node: '>=10.13.0'} 664 | 665 | glob@7.2.3: 666 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 667 | 668 | globals@13.24.0: 669 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 670 | engines: {node: '>=8'} 671 | 672 | globby@11.1.0: 673 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 674 | engines: {node: '>=10'} 675 | 676 | graphemer@1.4.0: 677 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 678 | 679 | has-flag@4.0.0: 680 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 681 | engines: {node: '>=8'} 682 | 683 | ignore@5.3.1: 684 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 685 | engines: {node: '>= 4'} 686 | 687 | import-fresh@3.3.0: 688 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 689 | engines: {node: '>=6'} 690 | 691 | imurmurhash@0.1.4: 692 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 693 | engines: {node: '>=0.8.19'} 694 | 695 | inflight@1.0.6: 696 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 697 | 698 | inherits@2.0.4: 699 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 700 | 701 | is-extglob@2.1.1: 702 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 703 | engines: {node: '>=0.10.0'} 704 | 705 | is-glob@4.0.3: 706 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 707 | engines: {node: '>=0.10.0'} 708 | 709 | is-number@7.0.0: 710 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 711 | engines: {node: '>=0.12.0'} 712 | 713 | is-path-inside@3.0.3: 714 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 715 | engines: {node: '>=8'} 716 | 717 | isexe@2.0.0: 718 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 719 | 720 | js-tokens@4.0.0: 721 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} 722 | 723 | js-yaml@4.1.0: 724 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 725 | hasBin: true 726 | 727 | json-buffer@3.0.1: 728 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 729 | 730 | json-schema-traverse@0.4.1: 731 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 732 | 733 | json-stable-stringify-without-jsonify@1.0.1: 734 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 735 | 736 | keyv@4.5.4: 737 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 738 | 739 | levn@0.4.1: 740 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 741 | engines: {node: '>= 0.8.0'} 742 | 743 | locate-path@6.0.0: 744 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 745 | engines: {node: '>=10'} 746 | 747 | lodash.merge@4.6.2: 748 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 749 | 750 | loose-envify@1.4.0: 751 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} 752 | hasBin: true 753 | 754 | merge2@1.4.1: 755 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 756 | engines: {node: '>= 8'} 757 | 758 | micromatch@4.0.5: 759 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 760 | engines: {node: '>=8.6'} 761 | 762 | minimatch@3.1.2: 763 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 764 | 765 | minimatch@9.0.4: 766 | resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} 767 | engines: {node: '>=16 || 14 >=14.17'} 768 | 769 | ms@2.1.2: 770 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 771 | 772 | nanoid@3.3.7: 773 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 774 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 775 | hasBin: true 776 | 777 | nanoid@5.0.7: 778 | resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} 779 | engines: {node: ^18 || >=20} 780 | hasBin: true 781 | 782 | natural-compare@1.4.0: 783 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 784 | 785 | once@1.4.0: 786 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 787 | 788 | optionator@0.9.4: 789 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 790 | engines: {node: '>= 0.8.0'} 791 | 792 | p-limit@3.1.0: 793 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 794 | engines: {node: '>=10'} 795 | 796 | p-locate@5.0.0: 797 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 798 | engines: {node: '>=10'} 799 | 800 | parent-module@1.0.1: 801 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 802 | engines: {node: '>=6'} 803 | 804 | path-exists@4.0.0: 805 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 806 | engines: {node: '>=8'} 807 | 808 | path-is-absolute@1.0.1: 809 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 810 | engines: {node: '>=0.10.0'} 811 | 812 | path-key@3.1.1: 813 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 814 | engines: {node: '>=8'} 815 | 816 | path-type@4.0.0: 817 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 818 | engines: {node: '>=8'} 819 | 820 | picocolors@1.0.0: 821 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 822 | 823 | picomatch@2.3.1: 824 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 825 | engines: {node: '>=8.6'} 826 | 827 | postcss@8.4.38: 828 | resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} 829 | engines: {node: ^10 || ^12 || >=14} 830 | 831 | prelude-ls@1.2.1: 832 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 833 | engines: {node: '>= 0.8.0'} 834 | 835 | punycode@2.3.1: 836 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 837 | engines: {node: '>=6'} 838 | 839 | queue-microtask@1.2.3: 840 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 841 | 842 | react-dom@18.3.1: 843 | resolution: {integrity: sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==} 844 | peerDependencies: 845 | react: ^18.3.1 846 | 847 | react-hook-form@7.51.4: 848 | resolution: {integrity: sha512-V14i8SEkh+V1gs6YtD0hdHYnoL4tp/HX/A45wWQN15CYr9bFRmmRdYStSO5L65lCCZRF+kYiSKhm9alqbcdiVA==} 849 | engines: {node: '>=12.22.0'} 850 | peerDependencies: 851 | react: ^16.8.0 || ^17 || ^18 852 | 853 | react@18.3.1: 854 | resolution: {integrity: sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==} 855 | engines: {node: '>=0.10.0'} 856 | 857 | resolve-from@4.0.0: 858 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 859 | engines: {node: '>=4'} 860 | 861 | reusify@1.0.4: 862 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 863 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 864 | 865 | rimraf@3.0.2: 866 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 867 | hasBin: true 868 | 869 | rollup@4.17.2: 870 | resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} 871 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 872 | hasBin: true 873 | 874 | run-parallel@1.2.0: 875 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 876 | 877 | scheduler@0.23.2: 878 | resolution: {integrity: sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==} 879 | 880 | semver@7.6.2: 881 | resolution: {integrity: sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==} 882 | engines: {node: '>=10'} 883 | hasBin: true 884 | 885 | shebang-command@2.0.0: 886 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 887 | engines: {node: '>=8'} 888 | 889 | shebang-regex@3.0.0: 890 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 891 | engines: {node: '>=8'} 892 | 893 | slash@3.0.0: 894 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 895 | engines: {node: '>=8'} 896 | 897 | source-map-js@1.2.0: 898 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 899 | engines: {node: '>=0.10.0'} 900 | 901 | strip-ansi@6.0.1: 902 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 903 | engines: {node: '>=8'} 904 | 905 | strip-json-comments@3.1.1: 906 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 907 | engines: {node: '>=8'} 908 | 909 | supports-color@7.2.0: 910 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 911 | engines: {node: '>=8'} 912 | 913 | text-table@0.2.0: 914 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 915 | 916 | to-regex-range@5.0.1: 917 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 918 | engines: {node: '>=8.0'} 919 | 920 | ts-api-utils@1.3.0: 921 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 922 | engines: {node: '>=16'} 923 | peerDependencies: 924 | typescript: '>=4.2.0' 925 | 926 | type-check@0.4.0: 927 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 928 | engines: {node: '>= 0.8.0'} 929 | 930 | type-fest@0.20.2: 931 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 932 | engines: {node: '>=10'} 933 | 934 | typescript@5.4.5: 935 | resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} 936 | engines: {node: '>=14.17'} 937 | hasBin: true 938 | 939 | uri-js@4.4.1: 940 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 941 | 942 | vite@5.2.11: 943 | resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} 944 | engines: {node: ^18.0.0 || >=20.0.0} 945 | hasBin: true 946 | peerDependencies: 947 | '@types/node': ^18.0.0 || >=20.0.0 948 | less: '*' 949 | lightningcss: ^1.21.0 950 | sass: '*' 951 | stylus: '*' 952 | sugarss: '*' 953 | terser: ^5.4.0 954 | peerDependenciesMeta: 955 | '@types/node': 956 | optional: true 957 | less: 958 | optional: true 959 | lightningcss: 960 | optional: true 961 | sass: 962 | optional: true 963 | stylus: 964 | optional: true 965 | sugarss: 966 | optional: true 967 | terser: 968 | optional: true 969 | 970 | which@2.0.2: 971 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 972 | engines: {node: '>= 8'} 973 | hasBin: true 974 | 975 | word-wrap@1.2.5: 976 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 977 | engines: {node: '>=0.10.0'} 978 | 979 | wrappy@1.0.2: 980 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 981 | 982 | yocto-queue@0.1.0: 983 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 984 | engines: {node: '>=10'} 985 | 986 | snapshots: 987 | 988 | '@esbuild/aix-ppc64@0.20.2': 989 | optional: true 990 | 991 | '@esbuild/android-arm64@0.20.2': 992 | optional: true 993 | 994 | '@esbuild/android-arm@0.20.2': 995 | optional: true 996 | 997 | '@esbuild/android-x64@0.20.2': 998 | optional: true 999 | 1000 | '@esbuild/darwin-arm64@0.20.2': 1001 | optional: true 1002 | 1003 | '@esbuild/darwin-x64@0.20.2': 1004 | optional: true 1005 | 1006 | '@esbuild/freebsd-arm64@0.20.2': 1007 | optional: true 1008 | 1009 | '@esbuild/freebsd-x64@0.20.2': 1010 | optional: true 1011 | 1012 | '@esbuild/linux-arm64@0.20.2': 1013 | optional: true 1014 | 1015 | '@esbuild/linux-arm@0.20.2': 1016 | optional: true 1017 | 1018 | '@esbuild/linux-ia32@0.20.2': 1019 | optional: true 1020 | 1021 | '@esbuild/linux-loong64@0.20.2': 1022 | optional: true 1023 | 1024 | '@esbuild/linux-mips64el@0.20.2': 1025 | optional: true 1026 | 1027 | '@esbuild/linux-ppc64@0.20.2': 1028 | optional: true 1029 | 1030 | '@esbuild/linux-riscv64@0.20.2': 1031 | optional: true 1032 | 1033 | '@esbuild/linux-s390x@0.20.2': 1034 | optional: true 1035 | 1036 | '@esbuild/linux-x64@0.20.2': 1037 | optional: true 1038 | 1039 | '@esbuild/netbsd-x64@0.20.2': 1040 | optional: true 1041 | 1042 | '@esbuild/openbsd-x64@0.20.2': 1043 | optional: true 1044 | 1045 | '@esbuild/sunos-x64@0.20.2': 1046 | optional: true 1047 | 1048 | '@esbuild/win32-arm64@0.20.2': 1049 | optional: true 1050 | 1051 | '@esbuild/win32-ia32@0.20.2': 1052 | optional: true 1053 | 1054 | '@esbuild/win32-x64@0.20.2': 1055 | optional: true 1056 | 1057 | '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': 1058 | dependencies: 1059 | eslint: 8.57.0 1060 | eslint-visitor-keys: 3.4.3 1061 | 1062 | '@eslint-community/regexpp@4.10.0': {} 1063 | 1064 | '@eslint/eslintrc@2.1.4': 1065 | dependencies: 1066 | ajv: 6.12.6 1067 | debug: 4.3.4 1068 | espree: 9.6.1 1069 | globals: 13.24.0 1070 | ignore: 5.3.1 1071 | import-fresh: 3.3.0 1072 | js-yaml: 4.1.0 1073 | minimatch: 3.1.2 1074 | strip-json-comments: 3.1.1 1075 | transitivePeerDependencies: 1076 | - supports-color 1077 | 1078 | '@eslint/js@8.57.0': {} 1079 | 1080 | '@humanwhocodes/config-array@0.11.14': 1081 | dependencies: 1082 | '@humanwhocodes/object-schema': 2.0.3 1083 | debug: 4.3.4 1084 | minimatch: 3.1.2 1085 | transitivePeerDependencies: 1086 | - supports-color 1087 | 1088 | '@humanwhocodes/module-importer@1.0.1': {} 1089 | 1090 | '@humanwhocodes/object-schema@2.0.3': {} 1091 | 1092 | '@nodelib/fs.scandir@2.1.5': 1093 | dependencies: 1094 | '@nodelib/fs.stat': 2.0.5 1095 | run-parallel: 1.2.0 1096 | 1097 | '@nodelib/fs.stat@2.0.5': {} 1098 | 1099 | '@nodelib/fs.walk@1.2.8': 1100 | dependencies: 1101 | '@nodelib/fs.scandir': 2.1.5 1102 | fastq: 1.17.1 1103 | 1104 | '@rollup/rollup-android-arm-eabi@4.17.2': 1105 | optional: true 1106 | 1107 | '@rollup/rollup-android-arm64@4.17.2': 1108 | optional: true 1109 | 1110 | '@rollup/rollup-darwin-arm64@4.17.2': 1111 | optional: true 1112 | 1113 | '@rollup/rollup-darwin-x64@4.17.2': 1114 | optional: true 1115 | 1116 | '@rollup/rollup-linux-arm-gnueabihf@4.17.2': 1117 | optional: true 1118 | 1119 | '@rollup/rollup-linux-arm-musleabihf@4.17.2': 1120 | optional: true 1121 | 1122 | '@rollup/rollup-linux-arm64-gnu@4.17.2': 1123 | optional: true 1124 | 1125 | '@rollup/rollup-linux-arm64-musl@4.17.2': 1126 | optional: true 1127 | 1128 | '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': 1129 | optional: true 1130 | 1131 | '@rollup/rollup-linux-riscv64-gnu@4.17.2': 1132 | optional: true 1133 | 1134 | '@rollup/rollup-linux-s390x-gnu@4.17.2': 1135 | optional: true 1136 | 1137 | '@rollup/rollup-linux-x64-gnu@4.17.2': 1138 | optional: true 1139 | 1140 | '@rollup/rollup-linux-x64-musl@4.17.2': 1141 | optional: true 1142 | 1143 | '@rollup/rollup-win32-arm64-msvc@4.17.2': 1144 | optional: true 1145 | 1146 | '@rollup/rollup-win32-ia32-msvc@4.17.2': 1147 | optional: true 1148 | 1149 | '@rollup/rollup-win32-x64-msvc@4.17.2': 1150 | optional: true 1151 | 1152 | '@swc/core-darwin-arm64@1.5.5': 1153 | optional: true 1154 | 1155 | '@swc/core-darwin-x64@1.5.5': 1156 | optional: true 1157 | 1158 | '@swc/core-linux-arm-gnueabihf@1.5.5': 1159 | optional: true 1160 | 1161 | '@swc/core-linux-arm64-gnu@1.5.5': 1162 | optional: true 1163 | 1164 | '@swc/core-linux-arm64-musl@1.5.5': 1165 | optional: true 1166 | 1167 | '@swc/core-linux-x64-gnu@1.5.5': 1168 | optional: true 1169 | 1170 | '@swc/core-linux-x64-musl@1.5.5': 1171 | optional: true 1172 | 1173 | '@swc/core-win32-arm64-msvc@1.5.5': 1174 | optional: true 1175 | 1176 | '@swc/core-win32-ia32-msvc@1.5.5': 1177 | optional: true 1178 | 1179 | '@swc/core-win32-x64-msvc@1.5.5': 1180 | optional: true 1181 | 1182 | '@swc/core@1.5.5': 1183 | dependencies: 1184 | '@swc/counter': 0.1.3 1185 | '@swc/types': 0.1.6 1186 | optionalDependencies: 1187 | '@swc/core-darwin-arm64': 1.5.5 1188 | '@swc/core-darwin-x64': 1.5.5 1189 | '@swc/core-linux-arm-gnueabihf': 1.5.5 1190 | '@swc/core-linux-arm64-gnu': 1.5.5 1191 | '@swc/core-linux-arm64-musl': 1.5.5 1192 | '@swc/core-linux-x64-gnu': 1.5.5 1193 | '@swc/core-linux-x64-musl': 1.5.5 1194 | '@swc/core-win32-arm64-msvc': 1.5.5 1195 | '@swc/core-win32-ia32-msvc': 1.5.5 1196 | '@swc/core-win32-x64-msvc': 1.5.5 1197 | 1198 | '@swc/counter@0.1.3': {} 1199 | 1200 | '@swc/types@0.1.6': 1201 | dependencies: 1202 | '@swc/counter': 0.1.3 1203 | 1204 | '@types/estree@1.0.5': {} 1205 | 1206 | '@types/json-schema@7.0.15': {} 1207 | 1208 | '@types/prop-types@15.7.12': {} 1209 | 1210 | '@types/react-dom@18.3.0': 1211 | dependencies: 1212 | '@types/react': 18.3.1 1213 | 1214 | '@types/react@18.3.1': 1215 | dependencies: 1216 | '@types/prop-types': 15.7.12 1217 | csstype: 3.1.3 1218 | 1219 | '@types/semver@7.5.8': {} 1220 | 1221 | '@typescript-eslint/eslint-plugin@7.8.0(@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5))(eslint@8.57.0)(typescript@5.4.5)': 1222 | dependencies: 1223 | '@eslint-community/regexpp': 4.10.0 1224 | '@typescript-eslint/parser': 7.8.0(eslint@8.57.0)(typescript@5.4.5) 1225 | '@typescript-eslint/scope-manager': 7.8.0 1226 | '@typescript-eslint/type-utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) 1227 | '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) 1228 | '@typescript-eslint/visitor-keys': 7.8.0 1229 | debug: 4.3.4 1230 | eslint: 8.57.0 1231 | graphemer: 1.4.0 1232 | ignore: 5.3.1 1233 | natural-compare: 1.4.0 1234 | semver: 7.6.2 1235 | ts-api-utils: 1.3.0(typescript@5.4.5) 1236 | optionalDependencies: 1237 | typescript: 5.4.5 1238 | transitivePeerDependencies: 1239 | - supports-color 1240 | 1241 | '@typescript-eslint/parser@7.8.0(eslint@8.57.0)(typescript@5.4.5)': 1242 | dependencies: 1243 | '@typescript-eslint/scope-manager': 7.8.0 1244 | '@typescript-eslint/types': 7.8.0 1245 | '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) 1246 | '@typescript-eslint/visitor-keys': 7.8.0 1247 | debug: 4.3.4 1248 | eslint: 8.57.0 1249 | optionalDependencies: 1250 | typescript: 5.4.5 1251 | transitivePeerDependencies: 1252 | - supports-color 1253 | 1254 | '@typescript-eslint/scope-manager@7.8.0': 1255 | dependencies: 1256 | '@typescript-eslint/types': 7.8.0 1257 | '@typescript-eslint/visitor-keys': 7.8.0 1258 | 1259 | '@typescript-eslint/type-utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)': 1260 | dependencies: 1261 | '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) 1262 | '@typescript-eslint/utils': 7.8.0(eslint@8.57.0)(typescript@5.4.5) 1263 | debug: 4.3.4 1264 | eslint: 8.57.0 1265 | ts-api-utils: 1.3.0(typescript@5.4.5) 1266 | optionalDependencies: 1267 | typescript: 5.4.5 1268 | transitivePeerDependencies: 1269 | - supports-color 1270 | 1271 | '@typescript-eslint/types@7.8.0': {} 1272 | 1273 | '@typescript-eslint/typescript-estree@7.8.0(typescript@5.4.5)': 1274 | dependencies: 1275 | '@typescript-eslint/types': 7.8.0 1276 | '@typescript-eslint/visitor-keys': 7.8.0 1277 | debug: 4.3.4 1278 | globby: 11.1.0 1279 | is-glob: 4.0.3 1280 | minimatch: 9.0.4 1281 | semver: 7.6.2 1282 | ts-api-utils: 1.3.0(typescript@5.4.5) 1283 | optionalDependencies: 1284 | typescript: 5.4.5 1285 | transitivePeerDependencies: 1286 | - supports-color 1287 | 1288 | '@typescript-eslint/utils@7.8.0(eslint@8.57.0)(typescript@5.4.5)': 1289 | dependencies: 1290 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 1291 | '@types/json-schema': 7.0.15 1292 | '@types/semver': 7.5.8 1293 | '@typescript-eslint/scope-manager': 7.8.0 1294 | '@typescript-eslint/types': 7.8.0 1295 | '@typescript-eslint/typescript-estree': 7.8.0(typescript@5.4.5) 1296 | eslint: 8.57.0 1297 | semver: 7.6.2 1298 | transitivePeerDependencies: 1299 | - supports-color 1300 | - typescript 1301 | 1302 | '@typescript-eslint/visitor-keys@7.8.0': 1303 | dependencies: 1304 | '@typescript-eslint/types': 7.8.0 1305 | eslint-visitor-keys: 3.4.3 1306 | 1307 | '@ungap/structured-clone@1.2.0': {} 1308 | 1309 | '@vitejs/plugin-react-swc@3.6.0(vite@5.2.11)': 1310 | dependencies: 1311 | '@swc/core': 1.5.5 1312 | vite: 5.2.11 1313 | transitivePeerDependencies: 1314 | - '@swc/helpers' 1315 | 1316 | acorn-jsx@5.3.2(acorn@8.11.3): 1317 | dependencies: 1318 | acorn: 8.11.3 1319 | 1320 | acorn@8.11.3: {} 1321 | 1322 | ajv@6.12.6: 1323 | dependencies: 1324 | fast-deep-equal: 3.1.3 1325 | fast-json-stable-stringify: 2.1.0 1326 | json-schema-traverse: 0.4.1 1327 | uri-js: 4.4.1 1328 | 1329 | ansi-regex@5.0.1: {} 1330 | 1331 | ansi-styles@4.3.0: 1332 | dependencies: 1333 | color-convert: 2.0.1 1334 | 1335 | argparse@2.0.1: {} 1336 | 1337 | array-union@2.1.0: {} 1338 | 1339 | balanced-match@1.0.2: {} 1340 | 1341 | brace-expansion@1.1.11: 1342 | dependencies: 1343 | balanced-match: 1.0.2 1344 | concat-map: 0.0.1 1345 | 1346 | brace-expansion@2.0.1: 1347 | dependencies: 1348 | balanced-match: 1.0.2 1349 | 1350 | braces@3.0.2: 1351 | dependencies: 1352 | fill-range: 7.0.1 1353 | 1354 | callsites@3.1.0: {} 1355 | 1356 | chalk@4.1.2: 1357 | dependencies: 1358 | ansi-styles: 4.3.0 1359 | supports-color: 7.2.0 1360 | 1361 | color-convert@2.0.1: 1362 | dependencies: 1363 | color-name: 1.1.4 1364 | 1365 | color-name@1.1.4: {} 1366 | 1367 | concat-map@0.0.1: {} 1368 | 1369 | cross-spawn@7.0.3: 1370 | dependencies: 1371 | path-key: 3.1.1 1372 | shebang-command: 2.0.0 1373 | which: 2.0.2 1374 | 1375 | csstype@3.1.3: {} 1376 | 1377 | debug@4.3.4: 1378 | dependencies: 1379 | ms: 2.1.2 1380 | 1381 | deep-is@0.1.4: {} 1382 | 1383 | dir-glob@3.0.1: 1384 | dependencies: 1385 | path-type: 4.0.0 1386 | 1387 | doctrine@3.0.0: 1388 | dependencies: 1389 | esutils: 2.0.3 1390 | 1391 | esbuild@0.20.2: 1392 | optionalDependencies: 1393 | '@esbuild/aix-ppc64': 0.20.2 1394 | '@esbuild/android-arm': 0.20.2 1395 | '@esbuild/android-arm64': 0.20.2 1396 | '@esbuild/android-x64': 0.20.2 1397 | '@esbuild/darwin-arm64': 0.20.2 1398 | '@esbuild/darwin-x64': 0.20.2 1399 | '@esbuild/freebsd-arm64': 0.20.2 1400 | '@esbuild/freebsd-x64': 0.20.2 1401 | '@esbuild/linux-arm': 0.20.2 1402 | '@esbuild/linux-arm64': 0.20.2 1403 | '@esbuild/linux-ia32': 0.20.2 1404 | '@esbuild/linux-loong64': 0.20.2 1405 | '@esbuild/linux-mips64el': 0.20.2 1406 | '@esbuild/linux-ppc64': 0.20.2 1407 | '@esbuild/linux-riscv64': 0.20.2 1408 | '@esbuild/linux-s390x': 0.20.2 1409 | '@esbuild/linux-x64': 0.20.2 1410 | '@esbuild/netbsd-x64': 0.20.2 1411 | '@esbuild/openbsd-x64': 0.20.2 1412 | '@esbuild/sunos-x64': 0.20.2 1413 | '@esbuild/win32-arm64': 0.20.2 1414 | '@esbuild/win32-ia32': 0.20.2 1415 | '@esbuild/win32-x64': 0.20.2 1416 | 1417 | escape-string-regexp@4.0.0: {} 1418 | 1419 | eslint-plugin-react-hooks@4.6.2(eslint@8.57.0): 1420 | dependencies: 1421 | eslint: 8.57.0 1422 | 1423 | eslint-plugin-react-refresh@0.4.7(eslint@8.57.0): 1424 | dependencies: 1425 | eslint: 8.57.0 1426 | 1427 | eslint-scope@7.2.2: 1428 | dependencies: 1429 | esrecurse: 4.3.0 1430 | estraverse: 5.3.0 1431 | 1432 | eslint-visitor-keys@3.4.3: {} 1433 | 1434 | eslint@8.57.0: 1435 | dependencies: 1436 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 1437 | '@eslint-community/regexpp': 4.10.0 1438 | '@eslint/eslintrc': 2.1.4 1439 | '@eslint/js': 8.57.0 1440 | '@humanwhocodes/config-array': 0.11.14 1441 | '@humanwhocodes/module-importer': 1.0.1 1442 | '@nodelib/fs.walk': 1.2.8 1443 | '@ungap/structured-clone': 1.2.0 1444 | ajv: 6.12.6 1445 | chalk: 4.1.2 1446 | cross-spawn: 7.0.3 1447 | debug: 4.3.4 1448 | doctrine: 3.0.0 1449 | escape-string-regexp: 4.0.0 1450 | eslint-scope: 7.2.2 1451 | eslint-visitor-keys: 3.4.3 1452 | espree: 9.6.1 1453 | esquery: 1.5.0 1454 | esutils: 2.0.3 1455 | fast-deep-equal: 3.1.3 1456 | file-entry-cache: 6.0.1 1457 | find-up: 5.0.0 1458 | glob-parent: 6.0.2 1459 | globals: 13.24.0 1460 | graphemer: 1.4.0 1461 | ignore: 5.3.1 1462 | imurmurhash: 0.1.4 1463 | is-glob: 4.0.3 1464 | is-path-inside: 3.0.3 1465 | js-yaml: 4.1.0 1466 | json-stable-stringify-without-jsonify: 1.0.1 1467 | levn: 0.4.1 1468 | lodash.merge: 4.6.2 1469 | minimatch: 3.1.2 1470 | natural-compare: 1.4.0 1471 | optionator: 0.9.4 1472 | strip-ansi: 6.0.1 1473 | text-table: 0.2.0 1474 | transitivePeerDependencies: 1475 | - supports-color 1476 | 1477 | espree@9.6.1: 1478 | dependencies: 1479 | acorn: 8.11.3 1480 | acorn-jsx: 5.3.2(acorn@8.11.3) 1481 | eslint-visitor-keys: 3.4.3 1482 | 1483 | esquery@1.5.0: 1484 | dependencies: 1485 | estraverse: 5.3.0 1486 | 1487 | esrecurse@4.3.0: 1488 | dependencies: 1489 | estraverse: 5.3.0 1490 | 1491 | estraverse@5.3.0: {} 1492 | 1493 | esutils@2.0.3: {} 1494 | 1495 | fast-deep-equal@3.1.3: {} 1496 | 1497 | fast-glob@3.3.2: 1498 | dependencies: 1499 | '@nodelib/fs.stat': 2.0.5 1500 | '@nodelib/fs.walk': 1.2.8 1501 | glob-parent: 5.1.2 1502 | merge2: 1.4.1 1503 | micromatch: 4.0.5 1504 | 1505 | fast-json-stable-stringify@2.1.0: {} 1506 | 1507 | fast-levenshtein@2.0.6: {} 1508 | 1509 | fastq@1.17.1: 1510 | dependencies: 1511 | reusify: 1.0.4 1512 | 1513 | file-entry-cache@6.0.1: 1514 | dependencies: 1515 | flat-cache: 3.2.0 1516 | 1517 | fill-range@7.0.1: 1518 | dependencies: 1519 | to-regex-range: 5.0.1 1520 | 1521 | find-up@5.0.0: 1522 | dependencies: 1523 | locate-path: 6.0.0 1524 | path-exists: 4.0.0 1525 | 1526 | flat-cache@3.2.0: 1527 | dependencies: 1528 | flatted: 3.3.1 1529 | keyv: 4.5.4 1530 | rimraf: 3.0.2 1531 | 1532 | flatted@3.3.1: {} 1533 | 1534 | fs.realpath@1.0.0: {} 1535 | 1536 | fsevents@2.3.3: 1537 | optional: true 1538 | 1539 | glob-parent@5.1.2: 1540 | dependencies: 1541 | is-glob: 4.0.3 1542 | 1543 | glob-parent@6.0.2: 1544 | dependencies: 1545 | is-glob: 4.0.3 1546 | 1547 | glob@7.2.3: 1548 | dependencies: 1549 | fs.realpath: 1.0.0 1550 | inflight: 1.0.6 1551 | inherits: 2.0.4 1552 | minimatch: 3.1.2 1553 | once: 1.4.0 1554 | path-is-absolute: 1.0.1 1555 | 1556 | globals@13.24.0: 1557 | dependencies: 1558 | type-fest: 0.20.2 1559 | 1560 | globby@11.1.0: 1561 | dependencies: 1562 | array-union: 2.1.0 1563 | dir-glob: 3.0.1 1564 | fast-glob: 3.3.2 1565 | ignore: 5.3.1 1566 | merge2: 1.4.1 1567 | slash: 3.0.0 1568 | 1569 | graphemer@1.4.0: {} 1570 | 1571 | has-flag@4.0.0: {} 1572 | 1573 | ignore@5.3.1: {} 1574 | 1575 | import-fresh@3.3.0: 1576 | dependencies: 1577 | parent-module: 1.0.1 1578 | resolve-from: 4.0.0 1579 | 1580 | imurmurhash@0.1.4: {} 1581 | 1582 | inflight@1.0.6: 1583 | dependencies: 1584 | once: 1.4.0 1585 | wrappy: 1.0.2 1586 | 1587 | inherits@2.0.4: {} 1588 | 1589 | is-extglob@2.1.1: {} 1590 | 1591 | is-glob@4.0.3: 1592 | dependencies: 1593 | is-extglob: 2.1.1 1594 | 1595 | is-number@7.0.0: {} 1596 | 1597 | is-path-inside@3.0.3: {} 1598 | 1599 | isexe@2.0.0: {} 1600 | 1601 | js-tokens@4.0.0: {} 1602 | 1603 | js-yaml@4.1.0: 1604 | dependencies: 1605 | argparse: 2.0.1 1606 | 1607 | json-buffer@3.0.1: {} 1608 | 1609 | json-schema-traverse@0.4.1: {} 1610 | 1611 | json-stable-stringify-without-jsonify@1.0.1: {} 1612 | 1613 | keyv@4.5.4: 1614 | dependencies: 1615 | json-buffer: 3.0.1 1616 | 1617 | levn@0.4.1: 1618 | dependencies: 1619 | prelude-ls: 1.2.1 1620 | type-check: 0.4.0 1621 | 1622 | locate-path@6.0.0: 1623 | dependencies: 1624 | p-locate: 5.0.0 1625 | 1626 | lodash.merge@4.6.2: {} 1627 | 1628 | loose-envify@1.4.0: 1629 | dependencies: 1630 | js-tokens: 4.0.0 1631 | 1632 | merge2@1.4.1: {} 1633 | 1634 | micromatch@4.0.5: 1635 | dependencies: 1636 | braces: 3.0.2 1637 | picomatch: 2.3.1 1638 | 1639 | minimatch@3.1.2: 1640 | dependencies: 1641 | brace-expansion: 1.1.11 1642 | 1643 | minimatch@9.0.4: 1644 | dependencies: 1645 | brace-expansion: 2.0.1 1646 | 1647 | ms@2.1.2: {} 1648 | 1649 | nanoid@3.3.7: {} 1650 | 1651 | nanoid@5.0.7: {} 1652 | 1653 | natural-compare@1.4.0: {} 1654 | 1655 | once@1.4.0: 1656 | dependencies: 1657 | wrappy: 1.0.2 1658 | 1659 | optionator@0.9.4: 1660 | dependencies: 1661 | deep-is: 0.1.4 1662 | fast-levenshtein: 2.0.6 1663 | levn: 0.4.1 1664 | prelude-ls: 1.2.1 1665 | type-check: 0.4.0 1666 | word-wrap: 1.2.5 1667 | 1668 | p-limit@3.1.0: 1669 | dependencies: 1670 | yocto-queue: 0.1.0 1671 | 1672 | p-locate@5.0.0: 1673 | dependencies: 1674 | p-limit: 3.1.0 1675 | 1676 | parent-module@1.0.1: 1677 | dependencies: 1678 | callsites: 3.1.0 1679 | 1680 | path-exists@4.0.0: {} 1681 | 1682 | path-is-absolute@1.0.1: {} 1683 | 1684 | path-key@3.1.1: {} 1685 | 1686 | path-type@4.0.0: {} 1687 | 1688 | picocolors@1.0.0: {} 1689 | 1690 | picomatch@2.3.1: {} 1691 | 1692 | postcss@8.4.38: 1693 | dependencies: 1694 | nanoid: 3.3.7 1695 | picocolors: 1.0.0 1696 | source-map-js: 1.2.0 1697 | 1698 | prelude-ls@1.2.1: {} 1699 | 1700 | punycode@2.3.1: {} 1701 | 1702 | queue-microtask@1.2.3: {} 1703 | 1704 | react-dom@18.3.1(react@18.3.1): 1705 | dependencies: 1706 | loose-envify: 1.4.0 1707 | react: 18.3.1 1708 | scheduler: 0.23.2 1709 | 1710 | react-hook-form@7.51.4(react@18.3.1): 1711 | dependencies: 1712 | react: 18.3.1 1713 | 1714 | react@18.3.1: 1715 | dependencies: 1716 | loose-envify: 1.4.0 1717 | 1718 | resolve-from@4.0.0: {} 1719 | 1720 | reusify@1.0.4: {} 1721 | 1722 | rimraf@3.0.2: 1723 | dependencies: 1724 | glob: 7.2.3 1725 | 1726 | rollup@4.17.2: 1727 | dependencies: 1728 | '@types/estree': 1.0.5 1729 | optionalDependencies: 1730 | '@rollup/rollup-android-arm-eabi': 4.17.2 1731 | '@rollup/rollup-android-arm64': 4.17.2 1732 | '@rollup/rollup-darwin-arm64': 4.17.2 1733 | '@rollup/rollup-darwin-x64': 4.17.2 1734 | '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 1735 | '@rollup/rollup-linux-arm-musleabihf': 4.17.2 1736 | '@rollup/rollup-linux-arm64-gnu': 4.17.2 1737 | '@rollup/rollup-linux-arm64-musl': 4.17.2 1738 | '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 1739 | '@rollup/rollup-linux-riscv64-gnu': 4.17.2 1740 | '@rollup/rollup-linux-s390x-gnu': 4.17.2 1741 | '@rollup/rollup-linux-x64-gnu': 4.17.2 1742 | '@rollup/rollup-linux-x64-musl': 4.17.2 1743 | '@rollup/rollup-win32-arm64-msvc': 4.17.2 1744 | '@rollup/rollup-win32-ia32-msvc': 4.17.2 1745 | '@rollup/rollup-win32-x64-msvc': 4.17.2 1746 | fsevents: 2.3.3 1747 | 1748 | run-parallel@1.2.0: 1749 | dependencies: 1750 | queue-microtask: 1.2.3 1751 | 1752 | scheduler@0.23.2: 1753 | dependencies: 1754 | loose-envify: 1.4.0 1755 | 1756 | semver@7.6.2: {} 1757 | 1758 | shebang-command@2.0.0: 1759 | dependencies: 1760 | shebang-regex: 3.0.0 1761 | 1762 | shebang-regex@3.0.0: {} 1763 | 1764 | slash@3.0.0: {} 1765 | 1766 | source-map-js@1.2.0: {} 1767 | 1768 | strip-ansi@6.0.1: 1769 | dependencies: 1770 | ansi-regex: 5.0.1 1771 | 1772 | strip-json-comments@3.1.1: {} 1773 | 1774 | supports-color@7.2.0: 1775 | dependencies: 1776 | has-flag: 4.0.0 1777 | 1778 | text-table@0.2.0: {} 1779 | 1780 | to-regex-range@5.0.1: 1781 | dependencies: 1782 | is-number: 7.0.0 1783 | 1784 | ts-api-utils@1.3.0(typescript@5.4.5): 1785 | dependencies: 1786 | typescript: 5.4.5 1787 | 1788 | type-check@0.4.0: 1789 | dependencies: 1790 | prelude-ls: 1.2.1 1791 | 1792 | type-fest@0.20.2: {} 1793 | 1794 | typescript@5.4.5: {} 1795 | 1796 | uri-js@4.4.1: 1797 | dependencies: 1798 | punycode: 2.3.1 1799 | 1800 | vite@5.2.11: 1801 | dependencies: 1802 | esbuild: 0.20.2 1803 | postcss: 8.4.38 1804 | rollup: 4.17.2 1805 | optionalDependencies: 1806 | fsevents: 2.3.3 1807 | 1808 | which@2.0.2: 1809 | dependencies: 1810 | isexe: 2.0.0 1811 | 1812 | word-wrap@1.2.5: {} 1813 | 1814 | wrappy@1.0.2: {} 1815 | 1816 | yocto-queue@0.1.0: {} 1817 | -------------------------------------------------------------------------------- /examples/react-project/public/vite.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/react-project/src/app/App.css: -------------------------------------------------------------------------------- 1 | #root { 2 | max-width: 1280px; 3 | margin: 0 auto; 4 | padding: 2rem; 5 | text-align: center; 6 | } 7 | 8 | .logo { 9 | height: 6em; 10 | padding: 1.5em; 11 | will-change: filter; 12 | transition: filter 300ms; 13 | } 14 | .logo:hover { 15 | filter: drop-shadow(0 0 2em #646cffaa); 16 | } 17 | .logo.react:hover { 18 | filter: drop-shadow(0 0 2em #61dafbaa); 19 | } 20 | 21 | @keyframes logo-spin { 22 | from { 23 | transform: rotate(0deg); 24 | } 25 | to { 26 | transform: rotate(360deg); 27 | } 28 | } 29 | 30 | @media (prefers-reduced-motion: no-preference) { 31 | a:nth-of-type(2) .logo { 32 | animation: logo-spin infinite 20s linear; 33 | } 34 | } 35 | 36 | .card { 37 | padding: 2em; 38 | } 39 | 40 | .read-the-docs { 41 | color: #888; 42 | } 43 | -------------------------------------------------------------------------------- /examples/react-project/src/app/App.tsx: -------------------------------------------------------------------------------- 1 | import './App.css' 2 | import { AppCotainer } from './container' 3 | import { UsersProvider } from './impl/users' 4 | import { createModule } from 'tiny-invert'; 5 | 6 | 7 | const AppProvider = AppCotainer.provider( 8 | (ctx) => function App() { 9 | const { UsersList, CreateUser } = ctx.innerDeps.Users; 10 | 11 | return ( 12 | <> 13 |

ts di example

14 |
15 |
16 | 17 | 18 |
19 |
20 | 21 | ) 22 | }, { 23 | Users: UsersProvider, 24 | } 25 | ) 26 | 27 | export const App = createModule(AppProvider).init() 28 | -------------------------------------------------------------------------------- /examples/react-project/src/app/assets/react.svg: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /examples/react-project/src/app/container.ts: -------------------------------------------------------------------------------- 1 | import { createContainer } from "tiny-invert"; 2 | 3 | export const AppCotainer = createContainer("AppContainer"); 4 | -------------------------------------------------------------------------------- /examples/react-project/src/app/impl/api.ts: -------------------------------------------------------------------------------- 1 | import { CreateUserApi } from "@/features/create-user"; 2 | import { AppCotainer } from "../container"; 3 | import { UsersListApi } from "@/features/users-list"; 4 | import { UserEntity } from "@/entities/user"; 5 | import { nanoid } from "nanoid"; 6 | import { useEffect, useState } from "react"; 7 | 8 | export const ApiProvider = AppCotainer.provider( 9 | (): CreateUserApi & UsersListApi => { 10 | const usersStore: UserEntity[] = [ 11 | { 12 | id: nanoid(), 13 | name: "John", 14 | email: "j@j.j", 15 | }, 16 | ]; 17 | 18 | const listener = { 19 | listeners: new Set<() => void>(), 20 | emit: () => { 21 | listener.listeners.forEach((cb) => cb()); 22 | }, 23 | }; 24 | 25 | return { 26 | useUsersList: () => { 27 | const [isLoading, setIsLoading] = useState(false); 28 | 29 | const [users, setUsers] = useState([]); 30 | 31 | useEffect(() => { 32 | setIsLoading(true); 33 | const fetch = () => { 34 | setIsLoading(true); 35 | setTimeout(() => { 36 | console.log("fetching"); 37 | setUsers(usersStore.slice()); 38 | setIsLoading(false); 39 | }, 2000); 40 | }; 41 | 42 | fetch(); 43 | listener.listeners.add(fetch); 44 | return () => { 45 | listener.listeners.delete(fetch); 46 | }; 47 | }, []); 48 | return { 49 | users, 50 | isLoading, 51 | }; 52 | }, 53 | useCreateUser: () => { 54 | const [isLoading, setIsLoading] = useState(false); 55 | 56 | const createUser = (newUser: UserEntity) => 57 | new Promise((res) => { 58 | setIsLoading(true); 59 | setTimeout(() => { 60 | setIsLoading(false); 61 | usersStore.push(newUser); 62 | listener.emit(); 63 | res(newUser); 64 | }, 2000); 65 | }); 66 | 67 | return { 68 | createUser, 69 | isLoading, 70 | }; 71 | }, 72 | }; 73 | }, 74 | ); 75 | -------------------------------------------------------------------------------- /examples/react-project/src/app/impl/uikit.tsx: -------------------------------------------------------------------------------- 1 | import { UiKit } from "@/kernel/uikit"; 2 | import { AppCotainer } from "../container"; 3 | import { Ref, forwardRef } from "react"; 4 | 5 | export const UiKitProvider = AppCotainer.provider( 6 | (): UiKit => ({ 7 | Input: forwardRef((props, ref: Ref) => ( 8 | 12 | )), 13 | Button: ({ children, disabled, onClick }) => ( 14 | 17 | ), 18 | Form: ({ children, onSubmit }) => ( 19 |
{children}
20 | ), 21 | }), 22 | ); 23 | -------------------------------------------------------------------------------- /examples/react-project/src/app/impl/users.ts: -------------------------------------------------------------------------------- 1 | import { CreateUserFormModule } from "@/features/create-user"; 2 | import { AppCotainer } from "../container"; 3 | import { UiKitProvider } from "./uikit"; 4 | import { ApiProvider } from "./api"; 5 | import { UsersListModule } from "@/features/users-list"; 6 | 7 | export const UsersProvider = AppCotainer.provider( 8 | (ctx) => { 9 | return { 10 | CreateUser: CreateUserFormModule.init({ 11 | uikit: ctx.innerDeps.uikit, 12 | useCreateUser: ctx.innerDeps.api.useCreateUser, 13 | }), 14 | UsersList: UsersListModule.init({ 15 | uikit: ctx.innerDeps.uikit, 16 | useUsersList: ctx.innerDeps.api.useUsersList, 17 | }), 18 | }; 19 | }, 20 | { 21 | uikit: UiKitProvider, 22 | api: ApiProvider, 23 | }, 24 | ); 25 | -------------------------------------------------------------------------------- /examples/react-project/src/app/index.css: -------------------------------------------------------------------------------- 1 | :root { 2 | font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif; 3 | line-height: 1.5; 4 | font-weight: 400; 5 | 6 | color-scheme: light dark; 7 | color: rgba(255, 255, 255, 0.87); 8 | background-color: #242424; 9 | 10 | font-synthesis: none; 11 | text-rendering: optimizeLegibility; 12 | -webkit-font-smoothing: antialiased; 13 | -moz-osx-font-smoothing: grayscale; 14 | } 15 | 16 | a { 17 | font-weight: 500; 18 | color: #646cff; 19 | text-decoration: inherit; 20 | } 21 | a:hover { 22 | color: #535bf2; 23 | } 24 | 25 | body { 26 | margin: 0; 27 | display: flex; 28 | place-items: center; 29 | min-width: 320px; 30 | min-height: 100vh; 31 | } 32 | 33 | h1 { 34 | font-size: 3.2em; 35 | line-height: 1.1; 36 | } 37 | 38 | button { 39 | border-radius: 8px; 40 | border: 1px solid transparent; 41 | padding: 0.6em 1.2em; 42 | font-size: 1em; 43 | font-weight: 500; 44 | font-family: inherit; 45 | background-color: #1a1a1a; 46 | cursor: pointer; 47 | transition: border-color 0.25s; 48 | } 49 | button:hover { 50 | border-color: #646cff; 51 | } 52 | button:focus, 53 | button:focus-visible { 54 | outline: 4px auto -webkit-focus-ring-color; 55 | } 56 | 57 | @media (prefers-color-scheme: light) { 58 | :root { 59 | color: #213547; 60 | background-color: #ffffff; 61 | } 62 | a:hover { 63 | color: #747bff; 64 | } 65 | button { 66 | background-color: #f9f9f9; 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /examples/react-project/src/app/main.tsx: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | import ReactDOM from 'react-dom/client' 3 | import { App } from './App.tsx' 4 | import './index.css' 5 | 6 | 7 | ReactDOM.createRoot(document.getElementById('root')!).render( 8 | 9 | 10 | , 11 | ) 12 | -------------------------------------------------------------------------------- /examples/react-project/src/entities/user/index.ts: -------------------------------------------------------------------------------- 1 | export type { UserEntity, UserId } from "./model"; 2 | -------------------------------------------------------------------------------- /examples/react-project/src/entities/user/model.ts: -------------------------------------------------------------------------------- 1 | export type UserId = string; 2 | export type UserEntity = { 3 | id: UserId; 4 | name: string; 5 | email: string; 6 | }; 7 | -------------------------------------------------------------------------------- /examples/react-project/src/features/create-user/container.ts: -------------------------------------------------------------------------------- 1 | import { UserEntity } from "../../entities/user/model"; 2 | import { UiKitContainer } from "@/kernel/uikit"; 3 | 4 | export type CreateUserApi = { 5 | useCreateUser: () => { 6 | createUser: (newUser: UserEntity) => Promise; 7 | isLoading: boolean; 8 | }; 9 | }; 10 | 11 | export const CreateUserContainer = UiKitContainer.extend( 12 | "features/create-user", 13 | ); 14 | -------------------------------------------------------------------------------- /examples/react-project/src/features/create-user/index.ts: -------------------------------------------------------------------------------- 1 | import { createModule } from "tiny-invert"; 2 | export type { CreateUserApi } from "./container"; 3 | import { CreateUserFormProvider } from "./ui/create-user-form"; 4 | 5 | export const CreateUserFormModule = createModule(CreateUserFormProvider); 6 | -------------------------------------------------------------------------------- /examples/react-project/src/features/create-user/model/use-create-user-from.ts: -------------------------------------------------------------------------------- 1 | import { useForm } from "react-hook-form"; 2 | import { CreateUserContainer } from "../container"; 3 | import { nanoid } from "nanoid"; 4 | 5 | export const useCreateUserFormProvider = CreateUserContainer.provider( 6 | (ctx) => () => { 7 | const { isLoading, createUser } = ctx.deps.useCreateUser(); 8 | 9 | const userForm = useForm<{ 10 | name: string; 11 | email: string; 12 | }>({ 13 | defaultValues: { 14 | name: "", 15 | email: "", 16 | }, 17 | }); 18 | 19 | return { 20 | isLoading, 21 | register: userForm.register, 22 | handleSubmit: userForm.handleSubmit(async (data) => { 23 | await createUser({ 24 | id: nanoid(), 25 | name: data.name, 26 | email: data.email, 27 | }); 28 | }), 29 | }; 30 | }, 31 | ); 32 | -------------------------------------------------------------------------------- /examples/react-project/src/features/create-user/ui/create-user-form.tsx: -------------------------------------------------------------------------------- 1 | import { CreateUserContainer } from "../container"; 2 | import { useCreateUserFormProvider } from "../model/use-create-user-from"; 3 | 4 | 5 | export const CreateUserFormProvider = CreateUserContainer.provider( 6 | (ctx) => function CreateUserForm() { 7 | const { 8 | Input, Form, Button 9 | } = ctx.deps.uikit 10 | 11 | const { isLoading, handleSubmit, register } = ctx.innerDeps.useCreateUserForm(); 12 | 13 | 14 | return ( 15 |
16 | 21 | 26 | 29 |
30 | ) 31 | }, 32 | { 33 | useCreateUserForm: useCreateUserFormProvider, 34 | } 35 | ); 36 | -------------------------------------------------------------------------------- /examples/react-project/src/features/users-list/container.ts: -------------------------------------------------------------------------------- 1 | import { UserEntity } from "../../entities/user/model"; 2 | import { UiKitContainer } from "@/kernel/uikit"; 3 | 4 | export type UsersListApi = { 5 | useUsersList: () => { 6 | users: UserEntity[]; 7 | isLoading: boolean; 8 | }; 9 | }; 10 | 11 | export const UsersListContainer = UiKitContainer.extend( 12 | "features/users-list", 13 | ); 14 | -------------------------------------------------------------------------------- /examples/react-project/src/features/users-list/index.ts: -------------------------------------------------------------------------------- 1 | import { createModule } from "tiny-invert"; 2 | import { UsersListProvider } from "./ui/users-list"; 3 | export { type UsersListApi } from "./container"; 4 | 5 | export const UsersListModule = createModule(UsersListProvider); 6 | -------------------------------------------------------------------------------- /examples/react-project/src/features/users-list/model/use-users-list.ts: -------------------------------------------------------------------------------- 1 | import { UsersListContainer } from "../container"; 2 | import { useMemo, useState } from "react"; 3 | 4 | export const useUsersListProvider = UsersListContainer.provider((ctx) => () => { 5 | const [query, setQuery] = useState(""); 6 | 7 | const { isLoading, users } = ctx.deps.useUsersList(); 8 | 9 | const filteredUsers = useMemo(() => { 10 | if (!query) { 11 | return users; 12 | } 13 | return users.filter((user) => user.name.includes(query)); 14 | }, [query, users]); 15 | 16 | return { 17 | isLoading, 18 | users: filteredUsers, 19 | query, 20 | setQuery, 21 | }; 22 | }); 23 | -------------------------------------------------------------------------------- /examples/react-project/src/features/users-list/ui/users-list.tsx: -------------------------------------------------------------------------------- 1 | import { UsersListContainer } from "../container"; 2 | import { useUsersListProvider } from "../model/use-users-list"; 3 | 4 | 5 | export const UsersListProvider = UsersListContainer.provider( 6 | (ctx) => function CreateUserForm() { 7 | const { 8 | Input 9 | } = ctx.deps.uikit 10 | 11 | const { isLoading, query, users, setQuery } = ctx.innerDeps.useUsersList(); 12 | 13 | 14 | return ( 15 |
16 | setQuery(e.target.value)} 22 | /> 23 |
{isLoading && "Loading..."} 24 | {users.map((user) => ( 25 |
name:{user.name} email:{user.email}
26 | ))} 27 |
28 |
29 | ) 30 | }, 31 | { 32 | useUsersList: useUsersListProvider 33 | } 34 | ); 35 | -------------------------------------------------------------------------------- /examples/react-project/src/kernel/uikit.ts: -------------------------------------------------------------------------------- 1 | import { ChangeEventHandler } from "react"; 2 | import { createContainer } from "tiny-invert"; 3 | 4 | export type UiInputProps = { 5 | type: "text" | "password"; 6 | name: string; 7 | placeholder: string; 8 | value?: string; 9 | onChange?: ChangeEventHandler; 10 | }; 11 | 12 | export type UiButtonProps = { 13 | disabled?: boolean; 14 | children: React.ReactNode; 15 | onClick?: () => void; 16 | }; 17 | 18 | export type UiFormProps = { 19 | children: React.ReactNode; 20 | onSubmit: () => void; 21 | }; 22 | 23 | export type UiKit = { 24 | Input: React.FC; 25 | Button: React.FC; 26 | Form: React.FC; 27 | }; 28 | 29 | export const UiKitContainer = createContainer<{ uikit: UiKit }>( 30 | "UiKitContainer", 31 | ); 32 | -------------------------------------------------------------------------------- /examples/react-project/src/vite-env.d.ts: -------------------------------------------------------------------------------- 1 | /// 2 | -------------------------------------------------------------------------------- /examples/react-project/tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2020", 4 | "useDefineForClassFields": true, 5 | "lib": [ 6 | "ES2020", 7 | "DOM", 8 | "DOM.Iterable" 9 | ], 10 | "module": "ESNext", 11 | "skipLibCheck": true, 12 | /* Bundler mode */ 13 | "moduleResolution": "bundler", 14 | "allowImportingTsExtensions": true, 15 | "resolveJsonModule": true, 16 | "isolatedModules": true, 17 | "noEmit": true, 18 | "jsx": "react-jsx", 19 | /* Linting */ 20 | "strict": true, 21 | "noUnusedLocals": true, 22 | "noUnusedParameters": true, 23 | "noFallthroughCasesInSwitch": true, 24 | "baseUrl": ".", 25 | "paths": { 26 | "tiny-invert": [ 27 | "../../dist/index.d.ts" 28 | ], 29 | "@/*": [ 30 | "src/*" 31 | ] 32 | } 33 | }, 34 | "include": [ 35 | "src" 36 | ], 37 | "references": [ 38 | { 39 | "path": "./tsconfig.node.json" 40 | } 41 | ] 42 | } 43 | -------------------------------------------------------------------------------- /examples/react-project/tsconfig.node.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "composite": true, 4 | "skipLibCheck": true, 5 | "module": "ESNext", 6 | "moduleResolution": "bundler", 7 | "allowSyntheticDefaultImports": true, 8 | "strict": true 9 | }, 10 | "include": ["vite.config.ts"] 11 | } 12 | -------------------------------------------------------------------------------- /examples/react-project/vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vite' 2 | import react from '@vitejs/plugin-react-swc' 3 | import path from 'path' 4 | 5 | // https://vitejs.dev/config/ 6 | export default defineConfig({ 7 | resolve: { 8 | alias: { 9 | 'tiny-invert': path.resolve(__dirname, '../../dist'), 10 | '@': path.resolve(__dirname, 'src'), 11 | }, 12 | }, 13 | plugins: [react()], 14 | }) 15 | -------------------------------------------------------------------------------- /images/logo-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/clean-frontend/tiny-invert/5c2cead85654dc7598dbc9cbf5cae02c3fe98900/images/logo-1.png -------------------------------------------------------------------------------- /lib/create-container.ts: -------------------------------------------------------------------------------- 1 | import { nanoid } from "nanoid"; 2 | import { Container, ExtendContainer } from "./types/container"; 3 | import { Provider, ProviderValueFactory } from "./types/provider"; 4 | import { createModule } from "./create-module"; 5 | 6 | /* @__NO_SIDE_EFFECTS__ */ 7 | export function createContainer( 8 | containerName = "Unnamed", 9 | ): Container { 10 | /* @__NO_SIDE_EFFECTS__ */ 11 | const createProvider = ( 12 | factory: ProviderValueFactory, 13 | innerDeps = {} as any, 14 | ) => { 15 | const provider: Provider = { 16 | $inferValue: undefined as any, 17 | $inferDeps: undefined as any, 18 | $inferInnerDeps: undefined as any, 19 | id: `${factory.name}-${nanoid()}`, 20 | containerName, 21 | innderDeps: innerDeps, 22 | factory, 23 | init: (deps) => createModule(provider).init(deps), 24 | }; 25 | 26 | return provider; 27 | }; 28 | 29 | const extend: ExtendContainer = (name) => { 30 | return createContainer(name); 31 | }; 32 | 33 | return { 34 | $inferDeps: null as Deps, 35 | extend, 36 | containerName, 37 | provider: createProvider as any, 38 | }; 39 | } 40 | -------------------------------------------------------------------------------- /lib/create-module.ts: -------------------------------------------------------------------------------- 1 | import { Module } from "./types/module"; 2 | import { 3 | Provider, 4 | ProviderId, 5 | ProviderValue, 6 | ProvidersRecord, 7 | } from "./types/provider"; 8 | 9 | // Хелпер нужен так как невозможно определить корректный рекурсивный тип провайдера 10 | const getInnerProviders = (provider: Provider) => { 11 | return provider.innderDeps as ProvidersRecord; 12 | }; 13 | 14 | const checkCircularDependency = ( 15 | provider: Provider, 16 | seen: Set, 17 | ): void => { 18 | if (seen.has(provider.id)) { 19 | throw new Error( 20 | `Module: ${provider.containerName}\n Cyclic dependency: ${Array.from(seen.values()).concat([provider.id]).join(" -> ")}`, 21 | ); 22 | } 23 | 24 | for (const p of Object.values(getInnerProviders(provider))) { 25 | checkCircularDependency(p, new Set([...seen, provider.id])); 26 | } 27 | }; 28 | 29 | /* @__NO_SIDE_EFFECTS__ */ 30 | export const createModule = ( 31 | entryProvider: EntryProvider, 32 | ): Module => { 33 | type Deps = EntryProvider["$inferDeps"]; 34 | checkCircularDependency(entryProvider, new Set()); 35 | 36 | const resolveDependency = ( 37 | deps: Deps, 38 | provider: Provider, 39 | valuesMap: Map, 40 | ) => { 41 | if (valuesMap.has(provider.id)) { 42 | return valuesMap.get(provider.id); 43 | } 44 | 45 | const innerDeps = Object.entries(getInnerProviders(provider)).reduce( 46 | (acc, [key, innerDep]) => { 47 | return { 48 | ...acc, 49 | [key]: resolveDependency(deps, innerDep, valuesMap), 50 | }; 51 | }, 52 | {}, 53 | ); 54 | 55 | const result = provider.factory({ 56 | deps, 57 | innerDeps, 58 | }); 59 | 60 | valuesMap.set(provider.id, result); 61 | 62 | return result; 63 | }; 64 | 65 | return { 66 | /* @__NO_SIDE_EFFECTS__ */ 67 | init(deps) { 68 | return resolveDependency(deps, entryProvider, new Map()) as any; 69 | }, 70 | }; 71 | }; 72 | -------------------------------------------------------------------------------- /lib/index.ts: -------------------------------------------------------------------------------- 1 | export { createContainer } from "./create-container"; 2 | export { createModule } from "./create-module"; 3 | export { mergeContainers } from "./merge-containers"; 4 | 5 | export type { Provider } from "./types/provider"; 6 | 7 | export type { Module } from "./types/module"; 8 | export type { Container } from "./types/container"; 9 | -------------------------------------------------------------------------------- /lib/merge-containers.ts: -------------------------------------------------------------------------------- 1 | import { createContainer } from "./create-container"; 2 | import { Container } from "./types/container"; 3 | import { UnionToIntersection } from "./types/utils"; 4 | 5 | /* @__NO_SIDE_EFFECTS__ */ 6 | export const mergeContainers = []>( 7 | _: Containers, 8 | name?: string, 9 | ): Container> => { 10 | return createContainer(name); 11 | }; 12 | -------------------------------------------------------------------------------- /lib/types/container.ts: -------------------------------------------------------------------------------- 1 | import { 2 | ContainerDeps, 3 | InferProvidersRecordValue, 4 | Provider, 5 | ProviderValueFactory, 6 | ProvidersRecord, 7 | } from "./provider"; 8 | 9 | type DefaultProvidersRecord = Record; 10 | 11 | export type ProviderFactory = < 12 | R, 13 | I extends ProvidersRecord = DefaultProvidersRecord, 14 | >( 15 | factory: ProviderValueFactory, R>, 16 | innerDeps?: I, 17 | ) => Provider, R>; 18 | 19 | export type ExtendContainer = ( 20 | name?: string, 21 | ) => Container; 22 | 23 | export type Container = { 24 | provider: ProviderFactory; 25 | containerName: string; 26 | extend: ExtendContainer; 27 | $inferDeps: Deps; 28 | }; 29 | -------------------------------------------------------------------------------- /lib/types/module.ts: -------------------------------------------------------------------------------- 1 | import { Provider } from "./provider"; 2 | 3 | export type Module = { 4 | init: (deps: EntryProvider["$inferDeps"]) => EntryProvider["$inferValue"]; 5 | }; 6 | -------------------------------------------------------------------------------- /lib/types/provider.ts: -------------------------------------------------------------------------------- 1 | export type ProviderId = string; 2 | export type ProviderValue = any; 3 | export type ContainerDeps = any; 4 | export type InnerDepsRecord = Record; 5 | 6 | export type ProviderValueFactory< 7 | Deps = ContainerDeps, 8 | InnerDeps extends InnerDepsRecord = InnerDepsRecord, 9 | Result = ProviderValue, 10 | > = (options: { deps: Deps; innerDeps: InnerDeps }) => Result; 11 | 12 | export type Provider< 13 | Deps = ContainerDeps, 14 | InnerDeps extends InnerDepsRecord = any, 15 | Value = ProviderValue, 16 | > = { 17 | $inferValue: Value; 18 | $inferInnerDeps: InnerDeps; 19 | $inferDeps: Deps; 20 | containerName: string; 21 | id: ProviderId; 22 | innderDeps: ProvidersRecord; 23 | factory: ProviderValueFactory; 24 | init: (deps: Deps) => Value; 25 | }; 26 | 27 | export type ProvidersRecord = Record< 28 | string, 29 | Provider 30 | >; 31 | 32 | export type InferProvidersRecordValue = { 33 | [K in keyof T]: T[K]["$inferValue"]; 34 | }; 35 | -------------------------------------------------------------------------------- /lib/types/utils.ts: -------------------------------------------------------------------------------- 1 | export type UnionToIntersection = ( 2 | U extends any ? (arg: U) => any : never 3 | ) extends (arg: infer I) => void 4 | ? I 5 | : never; 6 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "tiny-invert", 3 | "version": "0.1.4", 4 | "description": "tiny functional dependency injection for TypeScript", 5 | "repository": "https://github.com/clean-frontend/tiny-invert", 6 | "module": "dist/index.mjs", 7 | "main": "dist/index.js", 8 | "types": "dist/index.d.ts", 9 | "scripts": { 10 | "build": "tsup", 11 | "format": "prettier --write .", 12 | "prepublish": "npm run build", 13 | "dev": "tsup --watch", 14 | "test": "vitest" 15 | }, 16 | "files": [ 17 | "dist/**/*", 18 | "lib/**/*" 19 | ], 20 | "keywords": [ 21 | "di", 22 | "ioc" 23 | ], 24 | "author": "Evgeny Paromov", 25 | "license": "ISC", 26 | "devDependencies": { 27 | "prettier": "^3.2.5", 28 | "tsup": "^8.0.2", 29 | "typescript": "^5.4.5", 30 | "vitest": "^1.6.0" 31 | }, 32 | "dependencies": { 33 | "nanoid": "^5.0.7" 34 | } 35 | } 36 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | nanoid: 12 | specifier: ^5.0.7 13 | version: 5.0.7 14 | devDependencies: 15 | prettier: 16 | specifier: ^3.2.5 17 | version: 3.2.5 18 | tsup: 19 | specifier: ^8.0.2 20 | version: 8.0.2(postcss@8.4.38)(typescript@5.4.5) 21 | typescript: 22 | specifier: ^5.4.5 23 | version: 5.4.5 24 | vite: 25 | specifier: ^5.2.11 26 | version: 5.2.11 27 | vitest: 28 | specifier: ^1.6.0 29 | version: 1.6.0 30 | 31 | packages: 32 | 33 | '@esbuild/aix-ppc64@0.19.12': 34 | resolution: {integrity: sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==} 35 | engines: {node: '>=12'} 36 | cpu: [ppc64] 37 | os: [aix] 38 | 39 | '@esbuild/aix-ppc64@0.20.2': 40 | resolution: {integrity: sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==} 41 | engines: {node: '>=12'} 42 | cpu: [ppc64] 43 | os: [aix] 44 | 45 | '@esbuild/android-arm64@0.19.12': 46 | resolution: {integrity: sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==} 47 | engines: {node: '>=12'} 48 | cpu: [arm64] 49 | os: [android] 50 | 51 | '@esbuild/android-arm64@0.20.2': 52 | resolution: {integrity: sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==} 53 | engines: {node: '>=12'} 54 | cpu: [arm64] 55 | os: [android] 56 | 57 | '@esbuild/android-arm@0.19.12': 58 | resolution: {integrity: sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==} 59 | engines: {node: '>=12'} 60 | cpu: [arm] 61 | os: [android] 62 | 63 | '@esbuild/android-arm@0.20.2': 64 | resolution: {integrity: sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==} 65 | engines: {node: '>=12'} 66 | cpu: [arm] 67 | os: [android] 68 | 69 | '@esbuild/android-x64@0.19.12': 70 | resolution: {integrity: sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==} 71 | engines: {node: '>=12'} 72 | cpu: [x64] 73 | os: [android] 74 | 75 | '@esbuild/android-x64@0.20.2': 76 | resolution: {integrity: sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==} 77 | engines: {node: '>=12'} 78 | cpu: [x64] 79 | os: [android] 80 | 81 | '@esbuild/darwin-arm64@0.19.12': 82 | resolution: {integrity: sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==} 83 | engines: {node: '>=12'} 84 | cpu: [arm64] 85 | os: [darwin] 86 | 87 | '@esbuild/darwin-arm64@0.20.2': 88 | resolution: {integrity: sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==} 89 | engines: {node: '>=12'} 90 | cpu: [arm64] 91 | os: [darwin] 92 | 93 | '@esbuild/darwin-x64@0.19.12': 94 | resolution: {integrity: sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==} 95 | engines: {node: '>=12'} 96 | cpu: [x64] 97 | os: [darwin] 98 | 99 | '@esbuild/darwin-x64@0.20.2': 100 | resolution: {integrity: sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==} 101 | engines: {node: '>=12'} 102 | cpu: [x64] 103 | os: [darwin] 104 | 105 | '@esbuild/freebsd-arm64@0.19.12': 106 | resolution: {integrity: sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==} 107 | engines: {node: '>=12'} 108 | cpu: [arm64] 109 | os: [freebsd] 110 | 111 | '@esbuild/freebsd-arm64@0.20.2': 112 | resolution: {integrity: sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==} 113 | engines: {node: '>=12'} 114 | cpu: [arm64] 115 | os: [freebsd] 116 | 117 | '@esbuild/freebsd-x64@0.19.12': 118 | resolution: {integrity: sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==} 119 | engines: {node: '>=12'} 120 | cpu: [x64] 121 | os: [freebsd] 122 | 123 | '@esbuild/freebsd-x64@0.20.2': 124 | resolution: {integrity: sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==} 125 | engines: {node: '>=12'} 126 | cpu: [x64] 127 | os: [freebsd] 128 | 129 | '@esbuild/linux-arm64@0.19.12': 130 | resolution: {integrity: sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==} 131 | engines: {node: '>=12'} 132 | cpu: [arm64] 133 | os: [linux] 134 | 135 | '@esbuild/linux-arm64@0.20.2': 136 | resolution: {integrity: sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==} 137 | engines: {node: '>=12'} 138 | cpu: [arm64] 139 | os: [linux] 140 | 141 | '@esbuild/linux-arm@0.19.12': 142 | resolution: {integrity: sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==} 143 | engines: {node: '>=12'} 144 | cpu: [arm] 145 | os: [linux] 146 | 147 | '@esbuild/linux-arm@0.20.2': 148 | resolution: {integrity: sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==} 149 | engines: {node: '>=12'} 150 | cpu: [arm] 151 | os: [linux] 152 | 153 | '@esbuild/linux-ia32@0.19.12': 154 | resolution: {integrity: sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==} 155 | engines: {node: '>=12'} 156 | cpu: [ia32] 157 | os: [linux] 158 | 159 | '@esbuild/linux-ia32@0.20.2': 160 | resolution: {integrity: sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==} 161 | engines: {node: '>=12'} 162 | cpu: [ia32] 163 | os: [linux] 164 | 165 | '@esbuild/linux-loong64@0.19.12': 166 | resolution: {integrity: sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==} 167 | engines: {node: '>=12'} 168 | cpu: [loong64] 169 | os: [linux] 170 | 171 | '@esbuild/linux-loong64@0.20.2': 172 | resolution: {integrity: sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==} 173 | engines: {node: '>=12'} 174 | cpu: [loong64] 175 | os: [linux] 176 | 177 | '@esbuild/linux-mips64el@0.19.12': 178 | resolution: {integrity: sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==} 179 | engines: {node: '>=12'} 180 | cpu: [mips64el] 181 | os: [linux] 182 | 183 | '@esbuild/linux-mips64el@0.20.2': 184 | resolution: {integrity: sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==} 185 | engines: {node: '>=12'} 186 | cpu: [mips64el] 187 | os: [linux] 188 | 189 | '@esbuild/linux-ppc64@0.19.12': 190 | resolution: {integrity: sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==} 191 | engines: {node: '>=12'} 192 | cpu: [ppc64] 193 | os: [linux] 194 | 195 | '@esbuild/linux-ppc64@0.20.2': 196 | resolution: {integrity: sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==} 197 | engines: {node: '>=12'} 198 | cpu: [ppc64] 199 | os: [linux] 200 | 201 | '@esbuild/linux-riscv64@0.19.12': 202 | resolution: {integrity: sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==} 203 | engines: {node: '>=12'} 204 | cpu: [riscv64] 205 | os: [linux] 206 | 207 | '@esbuild/linux-riscv64@0.20.2': 208 | resolution: {integrity: sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==} 209 | engines: {node: '>=12'} 210 | cpu: [riscv64] 211 | os: [linux] 212 | 213 | '@esbuild/linux-s390x@0.19.12': 214 | resolution: {integrity: sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==} 215 | engines: {node: '>=12'} 216 | cpu: [s390x] 217 | os: [linux] 218 | 219 | '@esbuild/linux-s390x@0.20.2': 220 | resolution: {integrity: sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==} 221 | engines: {node: '>=12'} 222 | cpu: [s390x] 223 | os: [linux] 224 | 225 | '@esbuild/linux-x64@0.19.12': 226 | resolution: {integrity: sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==} 227 | engines: {node: '>=12'} 228 | cpu: [x64] 229 | os: [linux] 230 | 231 | '@esbuild/linux-x64@0.20.2': 232 | resolution: {integrity: sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==} 233 | engines: {node: '>=12'} 234 | cpu: [x64] 235 | os: [linux] 236 | 237 | '@esbuild/netbsd-x64@0.19.12': 238 | resolution: {integrity: sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==} 239 | engines: {node: '>=12'} 240 | cpu: [x64] 241 | os: [netbsd] 242 | 243 | '@esbuild/netbsd-x64@0.20.2': 244 | resolution: {integrity: sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==} 245 | engines: {node: '>=12'} 246 | cpu: [x64] 247 | os: [netbsd] 248 | 249 | '@esbuild/openbsd-x64@0.19.12': 250 | resolution: {integrity: sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==} 251 | engines: {node: '>=12'} 252 | cpu: [x64] 253 | os: [openbsd] 254 | 255 | '@esbuild/openbsd-x64@0.20.2': 256 | resolution: {integrity: sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==} 257 | engines: {node: '>=12'} 258 | cpu: [x64] 259 | os: [openbsd] 260 | 261 | '@esbuild/sunos-x64@0.19.12': 262 | resolution: {integrity: sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==} 263 | engines: {node: '>=12'} 264 | cpu: [x64] 265 | os: [sunos] 266 | 267 | '@esbuild/sunos-x64@0.20.2': 268 | resolution: {integrity: sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==} 269 | engines: {node: '>=12'} 270 | cpu: [x64] 271 | os: [sunos] 272 | 273 | '@esbuild/win32-arm64@0.19.12': 274 | resolution: {integrity: sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==} 275 | engines: {node: '>=12'} 276 | cpu: [arm64] 277 | os: [win32] 278 | 279 | '@esbuild/win32-arm64@0.20.2': 280 | resolution: {integrity: sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==} 281 | engines: {node: '>=12'} 282 | cpu: [arm64] 283 | os: [win32] 284 | 285 | '@esbuild/win32-ia32@0.19.12': 286 | resolution: {integrity: sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==} 287 | engines: {node: '>=12'} 288 | cpu: [ia32] 289 | os: [win32] 290 | 291 | '@esbuild/win32-ia32@0.20.2': 292 | resolution: {integrity: sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==} 293 | engines: {node: '>=12'} 294 | cpu: [ia32] 295 | os: [win32] 296 | 297 | '@esbuild/win32-x64@0.19.12': 298 | resolution: {integrity: sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==} 299 | engines: {node: '>=12'} 300 | cpu: [x64] 301 | os: [win32] 302 | 303 | '@esbuild/win32-x64@0.20.2': 304 | resolution: {integrity: sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==} 305 | engines: {node: '>=12'} 306 | cpu: [x64] 307 | os: [win32] 308 | 309 | '@isaacs/cliui@8.0.2': 310 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 311 | engines: {node: '>=12'} 312 | 313 | '@jest/schemas@29.6.3': 314 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} 315 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 316 | 317 | '@jridgewell/gen-mapping@0.3.5': 318 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 319 | engines: {node: '>=6.0.0'} 320 | 321 | '@jridgewell/resolve-uri@3.1.2': 322 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 323 | engines: {node: '>=6.0.0'} 324 | 325 | '@jridgewell/set-array@1.2.1': 326 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 327 | engines: {node: '>=6.0.0'} 328 | 329 | '@jridgewell/sourcemap-codec@1.4.15': 330 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} 331 | 332 | '@jridgewell/trace-mapping@0.3.25': 333 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 334 | 335 | '@nodelib/fs.scandir@2.1.5': 336 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 337 | engines: {node: '>= 8'} 338 | 339 | '@nodelib/fs.stat@2.0.5': 340 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 341 | engines: {node: '>= 8'} 342 | 343 | '@nodelib/fs.walk@1.2.8': 344 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 345 | engines: {node: '>= 8'} 346 | 347 | '@pkgjs/parseargs@0.11.0': 348 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 349 | engines: {node: '>=14'} 350 | 351 | '@rollup/rollup-android-arm-eabi@4.17.2': 352 | resolution: {integrity: sha512-NM0jFxY8bB8QLkoKxIQeObCaDlJKewVlIEkuyYKm5An1tdVZ966w2+MPQ2l8LBZLjR+SgyV+nRkTIunzOYBMLQ==} 353 | cpu: [arm] 354 | os: [android] 355 | 356 | '@rollup/rollup-android-arm64@4.17.2': 357 | resolution: {integrity: sha512-yeX/Usk7daNIVwkq2uGoq2BYJKZY1JfyLTaHO/jaiSwi/lsf8fTFoQW/n6IdAsx5tx+iotu2zCJwz8MxI6D/Bw==} 358 | cpu: [arm64] 359 | os: [android] 360 | 361 | '@rollup/rollup-darwin-arm64@4.17.2': 362 | resolution: {integrity: sha512-kcMLpE6uCwls023+kknm71ug7MZOrtXo+y5p/tsg6jltpDtgQY1Eq5sGfHcQfb+lfuKwhBmEURDga9N0ol4YPw==} 363 | cpu: [arm64] 364 | os: [darwin] 365 | 366 | '@rollup/rollup-darwin-x64@4.17.2': 367 | resolution: {integrity: sha512-AtKwD0VEx0zWkL0ZjixEkp5tbNLzX+FCqGG1SvOu993HnSz4qDI6S4kGzubrEJAljpVkhRSlg5bzpV//E6ysTQ==} 368 | cpu: [x64] 369 | os: [darwin] 370 | 371 | '@rollup/rollup-linux-arm-gnueabihf@4.17.2': 372 | resolution: {integrity: sha512-3reX2fUHqN7sffBNqmEyMQVj/CKhIHZd4y631duy0hZqI8Qoqf6lTtmAKvJFYa6bhU95B1D0WgzHkmTg33In0A==} 373 | cpu: [arm] 374 | os: [linux] 375 | 376 | '@rollup/rollup-linux-arm-musleabihf@4.17.2': 377 | resolution: {integrity: sha512-uSqpsp91mheRgw96xtyAGP9FW5ChctTFEoXP0r5FAzj/3ZRv3Uxjtc7taRQSaQM/q85KEKjKsZuiZM3GyUivRg==} 378 | cpu: [arm] 379 | os: [linux] 380 | 381 | '@rollup/rollup-linux-arm64-gnu@4.17.2': 382 | resolution: {integrity: sha512-EMMPHkiCRtE8Wdk3Qhtciq6BndLtstqZIroHiiGzB3C5LDJmIZcSzVtLRbwuXuUft1Cnv+9fxuDtDxz3k3EW2A==} 383 | cpu: [arm64] 384 | os: [linux] 385 | 386 | '@rollup/rollup-linux-arm64-musl@4.17.2': 387 | resolution: {integrity: sha512-NMPylUUZ1i0z/xJUIx6VUhISZDRT+uTWpBcjdv0/zkp7b/bQDF+NfnfdzuTiB1G6HTodgoFa93hp0O1xl+/UbA==} 388 | cpu: [arm64] 389 | os: [linux] 390 | 391 | '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': 392 | resolution: {integrity: sha512-T19My13y8uYXPw/L/k0JYaX1fJKFT/PWdXiHr8mTbXWxjVF1t+8Xl31DgBBvEKclw+1b00Chg0hxE2O7bTG7GQ==} 393 | cpu: [ppc64] 394 | os: [linux] 395 | 396 | '@rollup/rollup-linux-riscv64-gnu@4.17.2': 397 | resolution: {integrity: sha512-BOaNfthf3X3fOWAB+IJ9kxTgPmMqPPH5f5k2DcCsRrBIbWnaJCgX2ll77dV1TdSy9SaXTR5iDXRL8n7AnoP5cg==} 398 | cpu: [riscv64] 399 | os: [linux] 400 | 401 | '@rollup/rollup-linux-s390x-gnu@4.17.2': 402 | resolution: {integrity: sha512-W0UP/x7bnn3xN2eYMql2T/+wpASLE5SjObXILTMPUBDB/Fg/FxC+gX4nvCfPBCbNhz51C+HcqQp2qQ4u25ok6g==} 403 | cpu: [s390x] 404 | os: [linux] 405 | 406 | '@rollup/rollup-linux-x64-gnu@4.17.2': 407 | resolution: {integrity: sha512-Hy7pLwByUOuyaFC6mAr7m+oMC+V7qyifzs/nW2OJfC8H4hbCzOX07Ov0VFk/zP3kBsELWNFi7rJtgbKYsav9QQ==} 408 | cpu: [x64] 409 | os: [linux] 410 | 411 | '@rollup/rollup-linux-x64-musl@4.17.2': 412 | resolution: {integrity: sha512-h1+yTWeYbRdAyJ/jMiVw0l6fOOm/0D1vNLui9iPuqgRGnXA0u21gAqOyB5iHjlM9MMfNOm9RHCQ7zLIzT0x11Q==} 413 | cpu: [x64] 414 | os: [linux] 415 | 416 | '@rollup/rollup-win32-arm64-msvc@4.17.2': 417 | resolution: {integrity: sha512-tmdtXMfKAjy5+IQsVtDiCfqbynAQE/TQRpWdVataHmhMb9DCoJxp9vLcCBjEQWMiUYxO1QprH/HbY9ragCEFLA==} 418 | cpu: [arm64] 419 | os: [win32] 420 | 421 | '@rollup/rollup-win32-ia32-msvc@4.17.2': 422 | resolution: {integrity: sha512-7II/QCSTAHuE5vdZaQEwJq2ZACkBpQDOmQsE6D6XUbnBHW8IAhm4eTufL6msLJorzrHDFv3CF8oCA/hSIRuZeQ==} 423 | cpu: [ia32] 424 | os: [win32] 425 | 426 | '@rollup/rollup-win32-x64-msvc@4.17.2': 427 | resolution: {integrity: sha512-TGGO7v7qOq4CYmSBVEYpI1Y5xDuCEnbVC5Vth8mOsW0gDSzxNrVERPc790IGHsrT2dQSimgMr9Ub3Y1Jci5/8w==} 428 | cpu: [x64] 429 | os: [win32] 430 | 431 | '@sinclair/typebox@0.27.8': 432 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} 433 | 434 | '@types/estree@1.0.5': 435 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 436 | 437 | '@vitest/expect@1.6.0': 438 | resolution: {integrity: sha512-ixEvFVQjycy/oNgHjqsL6AZCDduC+tflRluaHIzKIsdbzkLn2U/iBnVeJwB6HsIjQBdfMR8Z0tRxKUsvFJEeWQ==} 439 | 440 | '@vitest/runner@1.6.0': 441 | resolution: {integrity: sha512-P4xgwPjwesuBiHisAVz/LSSZtDjOTPYZVmNAnpHHSR6ONrf8eCJOFRvUwdHn30F5M1fxhqtl7QZQUk2dprIXAg==} 442 | 443 | '@vitest/snapshot@1.6.0': 444 | resolution: {integrity: sha512-+Hx43f8Chus+DCmygqqfetcAZrDJwvTj0ymqjQq4CvmpKFSTVteEOBzCusu1x2tt4OJcvBflyHUE0DZSLgEMtQ==} 445 | 446 | '@vitest/spy@1.6.0': 447 | resolution: {integrity: sha512-leUTap6B/cqi/bQkXUu6bQV5TZPx7pmMBKBQiI0rJA8c3pB56ZsaTbREnF7CJfmvAS4V2cXIBAh/3rVwrrCYgw==} 448 | 449 | '@vitest/utils@1.6.0': 450 | resolution: {integrity: sha512-21cPiuGMoMZwiOHa2i4LXkMkMkCGzA+MVFV70jRwHo95dL4x/ts5GZhML1QWuy7yfp3WzK3lRvZi3JnXTYqrBw==} 451 | 452 | acorn-walk@8.3.2: 453 | resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} 454 | engines: {node: '>=0.4.0'} 455 | 456 | acorn@8.11.3: 457 | resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} 458 | engines: {node: '>=0.4.0'} 459 | hasBin: true 460 | 461 | ansi-regex@5.0.1: 462 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 463 | engines: {node: '>=8'} 464 | 465 | ansi-regex@6.0.1: 466 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 467 | engines: {node: '>=12'} 468 | 469 | ansi-styles@4.3.0: 470 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 471 | engines: {node: '>=8'} 472 | 473 | ansi-styles@5.2.0: 474 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} 475 | engines: {node: '>=10'} 476 | 477 | ansi-styles@6.2.1: 478 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 479 | engines: {node: '>=12'} 480 | 481 | any-promise@1.3.0: 482 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 483 | 484 | anymatch@3.1.3: 485 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 486 | engines: {node: '>= 8'} 487 | 488 | array-union@2.1.0: 489 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 490 | engines: {node: '>=8'} 491 | 492 | assertion-error@1.1.0: 493 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} 494 | 495 | balanced-match@1.0.2: 496 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 497 | 498 | binary-extensions@2.3.0: 499 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 500 | engines: {node: '>=8'} 501 | 502 | brace-expansion@2.0.1: 503 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 504 | 505 | braces@3.0.2: 506 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} 507 | engines: {node: '>=8'} 508 | 509 | bundle-require@4.1.0: 510 | resolution: {integrity: sha512-FeArRFM+ziGkRViKRnSTbHZc35dgmR9yNog05Kn0+ItI59pOAISGvnnIwW1WgFZQW59IxD9QpJnUPkdIPfZuXg==} 511 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 512 | peerDependencies: 513 | esbuild: '>=0.17' 514 | 515 | cac@6.7.14: 516 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 517 | engines: {node: '>=8'} 518 | 519 | chai@4.4.1: 520 | resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} 521 | engines: {node: '>=4'} 522 | 523 | check-error@1.0.3: 524 | resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} 525 | 526 | chokidar@3.6.0: 527 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 528 | engines: {node: '>= 8.10.0'} 529 | 530 | color-convert@2.0.1: 531 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 532 | engines: {node: '>=7.0.0'} 533 | 534 | color-name@1.1.4: 535 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 536 | 537 | commander@4.1.1: 538 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 539 | engines: {node: '>= 6'} 540 | 541 | confbox@0.1.7: 542 | resolution: {integrity: sha512-uJcB/FKZtBMCJpK8MQji6bJHgu1tixKPxRLeGkNzBoOZzpnZUJm0jm2/sBDWcuBx1dYgxV4JU+g5hmNxCyAmdA==} 543 | 544 | cross-spawn@7.0.3: 545 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 546 | engines: {node: '>= 8'} 547 | 548 | debug@4.3.4: 549 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} 550 | engines: {node: '>=6.0'} 551 | peerDependencies: 552 | supports-color: '*' 553 | peerDependenciesMeta: 554 | supports-color: 555 | optional: true 556 | 557 | deep-eql@4.1.3: 558 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} 559 | engines: {node: '>=6'} 560 | 561 | diff-sequences@29.6.3: 562 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} 563 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 564 | 565 | dir-glob@3.0.1: 566 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 567 | engines: {node: '>=8'} 568 | 569 | eastasianwidth@0.2.0: 570 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 571 | 572 | emoji-regex@8.0.0: 573 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 574 | 575 | emoji-regex@9.2.2: 576 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 577 | 578 | esbuild@0.19.12: 579 | resolution: {integrity: sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==} 580 | engines: {node: '>=12'} 581 | hasBin: true 582 | 583 | esbuild@0.20.2: 584 | resolution: {integrity: sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==} 585 | engines: {node: '>=12'} 586 | hasBin: true 587 | 588 | estree-walker@3.0.3: 589 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 590 | 591 | execa@5.1.1: 592 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 593 | engines: {node: '>=10'} 594 | 595 | execa@8.0.1: 596 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 597 | engines: {node: '>=16.17'} 598 | 599 | fast-glob@3.3.2: 600 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 601 | engines: {node: '>=8.6.0'} 602 | 603 | fastq@1.17.1: 604 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 605 | 606 | fill-range@7.0.1: 607 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} 608 | engines: {node: '>=8'} 609 | 610 | foreground-child@3.1.1: 611 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} 612 | engines: {node: '>=14'} 613 | 614 | fsevents@2.3.3: 615 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 616 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 617 | os: [darwin] 618 | 619 | get-func-name@2.0.2: 620 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 621 | 622 | get-stream@6.0.1: 623 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 624 | engines: {node: '>=10'} 625 | 626 | get-stream@8.0.1: 627 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 628 | engines: {node: '>=16'} 629 | 630 | glob-parent@5.1.2: 631 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 632 | engines: {node: '>= 6'} 633 | 634 | glob@10.3.14: 635 | resolution: {integrity: sha512-4fkAqu93xe9Mk7le9v0y3VrPDqLKHarNi2s4Pv7f2yOvfhWfhc7hRPHC/JyqMqb8B/Dt/eGS4n7ykwf3fOsl8g==} 636 | engines: {node: '>=16 || 14 >=14.17'} 637 | hasBin: true 638 | 639 | globby@11.1.0: 640 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 641 | engines: {node: '>=10'} 642 | 643 | human-signals@2.1.0: 644 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 645 | engines: {node: '>=10.17.0'} 646 | 647 | human-signals@5.0.0: 648 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 649 | engines: {node: '>=16.17.0'} 650 | 651 | ignore@5.3.1: 652 | resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} 653 | engines: {node: '>= 4'} 654 | 655 | is-binary-path@2.1.0: 656 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 657 | engines: {node: '>=8'} 658 | 659 | is-extglob@2.1.1: 660 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 661 | engines: {node: '>=0.10.0'} 662 | 663 | is-fullwidth-code-point@3.0.0: 664 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 665 | engines: {node: '>=8'} 666 | 667 | is-glob@4.0.3: 668 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 669 | engines: {node: '>=0.10.0'} 670 | 671 | is-number@7.0.0: 672 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 673 | engines: {node: '>=0.12.0'} 674 | 675 | is-stream@2.0.1: 676 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 677 | engines: {node: '>=8'} 678 | 679 | is-stream@3.0.0: 680 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 681 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 682 | 683 | isexe@2.0.0: 684 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 685 | 686 | jackspeak@2.3.6: 687 | resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} 688 | engines: {node: '>=14'} 689 | 690 | joycon@3.1.1: 691 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 692 | engines: {node: '>=10'} 693 | 694 | js-tokens@9.0.0: 695 | resolution: {integrity: sha512-WriZw1luRMlmV3LGJaR6QOJjWwgLUTf89OwT2lUOyjX2dJGBwgmIkbcz+7WFZjrZM635JOIR517++e/67CP9dQ==} 696 | 697 | lilconfig@3.1.1: 698 | resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} 699 | engines: {node: '>=14'} 700 | 701 | lines-and-columns@1.2.4: 702 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 703 | 704 | load-tsconfig@0.2.5: 705 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 706 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 707 | 708 | local-pkg@0.5.0: 709 | resolution: {integrity: sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==} 710 | engines: {node: '>=14'} 711 | 712 | lodash.sortby@4.7.0: 713 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 714 | 715 | loupe@2.3.7: 716 | resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} 717 | 718 | lru-cache@10.2.2: 719 | resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} 720 | engines: {node: 14 || >=16.14} 721 | 722 | magic-string@0.30.10: 723 | resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} 724 | 725 | merge-stream@2.0.0: 726 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 727 | 728 | merge2@1.4.1: 729 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 730 | engines: {node: '>= 8'} 731 | 732 | micromatch@4.0.5: 733 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} 734 | engines: {node: '>=8.6'} 735 | 736 | mimic-fn@2.1.0: 737 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 738 | engines: {node: '>=6'} 739 | 740 | mimic-fn@4.0.0: 741 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 742 | engines: {node: '>=12'} 743 | 744 | minimatch@9.0.4: 745 | resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} 746 | engines: {node: '>=16 || 14 >=14.17'} 747 | 748 | minipass@7.1.1: 749 | resolution: {integrity: sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==} 750 | engines: {node: '>=16 || 14 >=14.17'} 751 | 752 | mlly@1.7.0: 753 | resolution: {integrity: sha512-U9SDaXGEREBYQgfejV97coK0UL1r+qnF2SyO9A3qcI8MzKnsIFKHNVEkrDyNncQTKQQumsasmeq84eNMdBfsNQ==} 754 | 755 | ms@2.1.2: 756 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 757 | 758 | mz@2.7.0: 759 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 760 | 761 | nanoid@3.3.7: 762 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 763 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 764 | hasBin: true 765 | 766 | nanoid@5.0.7: 767 | resolution: {integrity: sha512-oLxFY2gd2IqnjcYyOXD8XGCftpGtZP2AbHbOkthDkvRywH5ayNtPVy9YlOPcHckXzbLTCHpkb7FB+yuxKV13pQ==} 768 | engines: {node: ^18 || >=20} 769 | hasBin: true 770 | 771 | normalize-path@3.0.0: 772 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 773 | engines: {node: '>=0.10.0'} 774 | 775 | npm-run-path@4.0.1: 776 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 777 | engines: {node: '>=8'} 778 | 779 | npm-run-path@5.3.0: 780 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 781 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 782 | 783 | object-assign@4.1.1: 784 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 785 | engines: {node: '>=0.10.0'} 786 | 787 | onetime@5.1.2: 788 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 789 | engines: {node: '>=6'} 790 | 791 | onetime@6.0.0: 792 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 793 | engines: {node: '>=12'} 794 | 795 | p-limit@5.0.0: 796 | resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} 797 | engines: {node: '>=18'} 798 | 799 | path-key@3.1.1: 800 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 801 | engines: {node: '>=8'} 802 | 803 | path-key@4.0.0: 804 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 805 | engines: {node: '>=12'} 806 | 807 | path-scurry@1.11.0: 808 | resolution: {integrity: sha512-LNHTaVkzaYaLGlO+0u3rQTz7QrHTFOuKyba9JMTQutkmtNew8dw8wOD7mTU/5fCPZzCWpfW0XnQKzY61P0aTaw==} 809 | engines: {node: '>=16 || 14 >=14.17'} 810 | 811 | path-type@4.0.0: 812 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 813 | engines: {node: '>=8'} 814 | 815 | pathe@1.1.2: 816 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 817 | 818 | pathval@1.1.1: 819 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} 820 | 821 | picocolors@1.0.0: 822 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} 823 | 824 | picomatch@2.3.1: 825 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 826 | engines: {node: '>=8.6'} 827 | 828 | pirates@4.0.6: 829 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 830 | engines: {node: '>= 6'} 831 | 832 | pkg-types@1.1.1: 833 | resolution: {integrity: sha512-ko14TjmDuQJ14zsotODv7dBlwxKhUKQEhuhmbqo1uCi9BB0Z2alo/wAXg6q1dTR5TyuqYyWhjtfe/Tsh+X28jQ==} 834 | 835 | postcss-load-config@4.0.2: 836 | resolution: {integrity: sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==} 837 | engines: {node: '>= 14'} 838 | peerDependencies: 839 | postcss: '>=8.0.9' 840 | ts-node: '>=9.0.0' 841 | peerDependenciesMeta: 842 | postcss: 843 | optional: true 844 | ts-node: 845 | optional: true 846 | 847 | postcss@8.4.38: 848 | resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} 849 | engines: {node: ^10 || ^12 || >=14} 850 | 851 | prettier@3.2.5: 852 | resolution: {integrity: sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==} 853 | engines: {node: '>=14'} 854 | hasBin: true 855 | 856 | pretty-format@29.7.0: 857 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} 858 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} 859 | 860 | punycode@2.3.1: 861 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 862 | engines: {node: '>=6'} 863 | 864 | queue-microtask@1.2.3: 865 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 866 | 867 | react-is@18.3.1: 868 | resolution: {integrity: sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==} 869 | 870 | readdirp@3.6.0: 871 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 872 | engines: {node: '>=8.10.0'} 873 | 874 | resolve-from@5.0.0: 875 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 876 | engines: {node: '>=8'} 877 | 878 | reusify@1.0.4: 879 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 880 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 881 | 882 | rollup@4.17.2: 883 | resolution: {integrity: sha512-/9ClTJPByC0U4zNLowV1tMBe8yMEAxewtR3cUNX5BoEpGH3dQEWpJLr6CLp0fPdYRF/fzVOgvDb1zXuakwF5kQ==} 884 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 885 | hasBin: true 886 | 887 | run-parallel@1.2.0: 888 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 889 | 890 | shebang-command@2.0.0: 891 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 892 | engines: {node: '>=8'} 893 | 894 | shebang-regex@3.0.0: 895 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 896 | engines: {node: '>=8'} 897 | 898 | siginfo@2.0.0: 899 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 900 | 901 | signal-exit@3.0.7: 902 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 903 | 904 | signal-exit@4.1.0: 905 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 906 | engines: {node: '>=14'} 907 | 908 | slash@3.0.0: 909 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 910 | engines: {node: '>=8'} 911 | 912 | source-map-js@1.2.0: 913 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 914 | engines: {node: '>=0.10.0'} 915 | 916 | source-map@0.8.0-beta.0: 917 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 918 | engines: {node: '>= 8'} 919 | 920 | stackback@0.0.2: 921 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 922 | 923 | std-env@3.7.0: 924 | resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} 925 | 926 | string-width@4.2.3: 927 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 928 | engines: {node: '>=8'} 929 | 930 | string-width@5.1.2: 931 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 932 | engines: {node: '>=12'} 933 | 934 | strip-ansi@6.0.1: 935 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 936 | engines: {node: '>=8'} 937 | 938 | strip-ansi@7.1.0: 939 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 940 | engines: {node: '>=12'} 941 | 942 | strip-final-newline@2.0.0: 943 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 944 | engines: {node: '>=6'} 945 | 946 | strip-final-newline@3.0.0: 947 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 948 | engines: {node: '>=12'} 949 | 950 | strip-literal@2.1.0: 951 | resolution: {integrity: sha512-Op+UycaUt/8FbN/Z2TWPBLge3jWrP3xj10f3fnYxf052bKuS3EKs1ZQcVGjnEMdsNVAM+plXRdmjrZ/KgG3Skw==} 952 | 953 | sucrase@3.35.0: 954 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 955 | engines: {node: '>=16 || 14 >=14.17'} 956 | hasBin: true 957 | 958 | thenify-all@1.6.0: 959 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 960 | engines: {node: '>=0.8'} 961 | 962 | thenify@3.3.1: 963 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 964 | 965 | tinybench@2.8.0: 966 | resolution: {integrity: sha512-1/eK7zUnIklz4JUUlL+658n58XO2hHLQfSk1Zf2LKieUjxidN16eKFEoDEfjHc3ohofSSqK3X5yO6VGb6iW8Lw==} 967 | 968 | tinypool@0.8.4: 969 | resolution: {integrity: sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==} 970 | engines: {node: '>=14.0.0'} 971 | 972 | tinyspy@2.2.1: 973 | resolution: {integrity: sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==} 974 | engines: {node: '>=14.0.0'} 975 | 976 | to-regex-range@5.0.1: 977 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 978 | engines: {node: '>=8.0'} 979 | 980 | tr46@1.0.1: 981 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 982 | 983 | tree-kill@1.2.2: 984 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 985 | hasBin: true 986 | 987 | ts-interface-checker@0.1.13: 988 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 989 | 990 | tsup@8.0.2: 991 | resolution: {integrity: sha512-NY8xtQXdH7hDUAZwcQdY/Vzlw9johQsaqf7iwZ6g1DOUlFYQ5/AtVAjTvihhEyeRlGo4dLRVHtrRaL35M1daqQ==} 992 | engines: {node: '>=18'} 993 | hasBin: true 994 | peerDependencies: 995 | '@microsoft/api-extractor': ^7.36.0 996 | '@swc/core': ^1 997 | postcss: ^8.4.12 998 | typescript: '>=4.5.0' 999 | peerDependenciesMeta: 1000 | '@microsoft/api-extractor': 1001 | optional: true 1002 | '@swc/core': 1003 | optional: true 1004 | postcss: 1005 | optional: true 1006 | typescript: 1007 | optional: true 1008 | 1009 | type-detect@4.0.8: 1010 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} 1011 | engines: {node: '>=4'} 1012 | 1013 | typescript@5.4.5: 1014 | resolution: {integrity: sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==} 1015 | engines: {node: '>=14.17'} 1016 | hasBin: true 1017 | 1018 | ufo@1.5.3: 1019 | resolution: {integrity: sha512-Y7HYmWaFwPUmkoQCUIAYpKqkOf+SbVj/2fJJZ4RJMCfZp0rTGwRbzQD+HghfnhKOjL9E01okqz+ncJskGYfBNw==} 1020 | 1021 | vite-node@1.6.0: 1022 | resolution: {integrity: sha512-de6HJgzC+TFzOu0NTC4RAIsyf/DY/ibWDYQUcuEA84EMHhcefTUGkjFHKKEJhQN4A+6I0u++kr3l36ZF2d7XRw==} 1023 | engines: {node: ^18.0.0 || >=20.0.0} 1024 | hasBin: true 1025 | 1026 | vite@5.2.11: 1027 | resolution: {integrity: sha512-HndV31LWW05i1BLPMUCE1B9E9GFbOu1MbenhS58FuK6owSO5qHm7GiCotrNY1YE5rMeQSFBGmT5ZaLEjFizgiQ==} 1028 | engines: {node: ^18.0.0 || >=20.0.0} 1029 | hasBin: true 1030 | peerDependencies: 1031 | '@types/node': ^18.0.0 || >=20.0.0 1032 | less: '*' 1033 | lightningcss: ^1.21.0 1034 | sass: '*' 1035 | stylus: '*' 1036 | sugarss: '*' 1037 | terser: ^5.4.0 1038 | peerDependenciesMeta: 1039 | '@types/node': 1040 | optional: true 1041 | less: 1042 | optional: true 1043 | lightningcss: 1044 | optional: true 1045 | sass: 1046 | optional: true 1047 | stylus: 1048 | optional: true 1049 | sugarss: 1050 | optional: true 1051 | terser: 1052 | optional: true 1053 | 1054 | vitest@1.6.0: 1055 | resolution: {integrity: sha512-H5r/dN06swuFnzNFhq/dnz37bPXnq8xB2xB5JOVk8K09rUtoeNN+LHWkoQ0A/i3hvbUKKcCei9KpbxqHMLhLLA==} 1056 | engines: {node: ^18.0.0 || >=20.0.0} 1057 | hasBin: true 1058 | peerDependencies: 1059 | '@edge-runtime/vm': '*' 1060 | '@types/node': ^18.0.0 || >=20.0.0 1061 | '@vitest/browser': 1.6.0 1062 | '@vitest/ui': 1.6.0 1063 | happy-dom: '*' 1064 | jsdom: '*' 1065 | peerDependenciesMeta: 1066 | '@edge-runtime/vm': 1067 | optional: true 1068 | '@types/node': 1069 | optional: true 1070 | '@vitest/browser': 1071 | optional: true 1072 | '@vitest/ui': 1073 | optional: true 1074 | happy-dom: 1075 | optional: true 1076 | jsdom: 1077 | optional: true 1078 | 1079 | webidl-conversions@4.0.2: 1080 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 1081 | 1082 | whatwg-url@7.1.0: 1083 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 1084 | 1085 | which@2.0.2: 1086 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 1087 | engines: {node: '>= 8'} 1088 | hasBin: true 1089 | 1090 | why-is-node-running@2.2.2: 1091 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} 1092 | engines: {node: '>=8'} 1093 | hasBin: true 1094 | 1095 | wrap-ansi@7.0.0: 1096 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 1097 | engines: {node: '>=10'} 1098 | 1099 | wrap-ansi@8.1.0: 1100 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 1101 | engines: {node: '>=12'} 1102 | 1103 | yaml@2.4.2: 1104 | resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} 1105 | engines: {node: '>= 14'} 1106 | hasBin: true 1107 | 1108 | yocto-queue@1.0.0: 1109 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} 1110 | engines: {node: '>=12.20'} 1111 | 1112 | snapshots: 1113 | 1114 | '@esbuild/aix-ppc64@0.19.12': 1115 | optional: true 1116 | 1117 | '@esbuild/aix-ppc64@0.20.2': 1118 | optional: true 1119 | 1120 | '@esbuild/android-arm64@0.19.12': 1121 | optional: true 1122 | 1123 | '@esbuild/android-arm64@0.20.2': 1124 | optional: true 1125 | 1126 | '@esbuild/android-arm@0.19.12': 1127 | optional: true 1128 | 1129 | '@esbuild/android-arm@0.20.2': 1130 | optional: true 1131 | 1132 | '@esbuild/android-x64@0.19.12': 1133 | optional: true 1134 | 1135 | '@esbuild/android-x64@0.20.2': 1136 | optional: true 1137 | 1138 | '@esbuild/darwin-arm64@0.19.12': 1139 | optional: true 1140 | 1141 | '@esbuild/darwin-arm64@0.20.2': 1142 | optional: true 1143 | 1144 | '@esbuild/darwin-x64@0.19.12': 1145 | optional: true 1146 | 1147 | '@esbuild/darwin-x64@0.20.2': 1148 | optional: true 1149 | 1150 | '@esbuild/freebsd-arm64@0.19.12': 1151 | optional: true 1152 | 1153 | '@esbuild/freebsd-arm64@0.20.2': 1154 | optional: true 1155 | 1156 | '@esbuild/freebsd-x64@0.19.12': 1157 | optional: true 1158 | 1159 | '@esbuild/freebsd-x64@0.20.2': 1160 | optional: true 1161 | 1162 | '@esbuild/linux-arm64@0.19.12': 1163 | optional: true 1164 | 1165 | '@esbuild/linux-arm64@0.20.2': 1166 | optional: true 1167 | 1168 | '@esbuild/linux-arm@0.19.12': 1169 | optional: true 1170 | 1171 | '@esbuild/linux-arm@0.20.2': 1172 | optional: true 1173 | 1174 | '@esbuild/linux-ia32@0.19.12': 1175 | optional: true 1176 | 1177 | '@esbuild/linux-ia32@0.20.2': 1178 | optional: true 1179 | 1180 | '@esbuild/linux-loong64@0.19.12': 1181 | optional: true 1182 | 1183 | '@esbuild/linux-loong64@0.20.2': 1184 | optional: true 1185 | 1186 | '@esbuild/linux-mips64el@0.19.12': 1187 | optional: true 1188 | 1189 | '@esbuild/linux-mips64el@0.20.2': 1190 | optional: true 1191 | 1192 | '@esbuild/linux-ppc64@0.19.12': 1193 | optional: true 1194 | 1195 | '@esbuild/linux-ppc64@0.20.2': 1196 | optional: true 1197 | 1198 | '@esbuild/linux-riscv64@0.19.12': 1199 | optional: true 1200 | 1201 | '@esbuild/linux-riscv64@0.20.2': 1202 | optional: true 1203 | 1204 | '@esbuild/linux-s390x@0.19.12': 1205 | optional: true 1206 | 1207 | '@esbuild/linux-s390x@0.20.2': 1208 | optional: true 1209 | 1210 | '@esbuild/linux-x64@0.19.12': 1211 | optional: true 1212 | 1213 | '@esbuild/linux-x64@0.20.2': 1214 | optional: true 1215 | 1216 | '@esbuild/netbsd-x64@0.19.12': 1217 | optional: true 1218 | 1219 | '@esbuild/netbsd-x64@0.20.2': 1220 | optional: true 1221 | 1222 | '@esbuild/openbsd-x64@0.19.12': 1223 | optional: true 1224 | 1225 | '@esbuild/openbsd-x64@0.20.2': 1226 | optional: true 1227 | 1228 | '@esbuild/sunos-x64@0.19.12': 1229 | optional: true 1230 | 1231 | '@esbuild/sunos-x64@0.20.2': 1232 | optional: true 1233 | 1234 | '@esbuild/win32-arm64@0.19.12': 1235 | optional: true 1236 | 1237 | '@esbuild/win32-arm64@0.20.2': 1238 | optional: true 1239 | 1240 | '@esbuild/win32-ia32@0.19.12': 1241 | optional: true 1242 | 1243 | '@esbuild/win32-ia32@0.20.2': 1244 | optional: true 1245 | 1246 | '@esbuild/win32-x64@0.19.12': 1247 | optional: true 1248 | 1249 | '@esbuild/win32-x64@0.20.2': 1250 | optional: true 1251 | 1252 | '@isaacs/cliui@8.0.2': 1253 | dependencies: 1254 | string-width: 5.1.2 1255 | string-width-cjs: string-width@4.2.3 1256 | strip-ansi: 7.1.0 1257 | strip-ansi-cjs: strip-ansi@6.0.1 1258 | wrap-ansi: 8.1.0 1259 | wrap-ansi-cjs: wrap-ansi@7.0.0 1260 | 1261 | '@jest/schemas@29.6.3': 1262 | dependencies: 1263 | '@sinclair/typebox': 0.27.8 1264 | 1265 | '@jridgewell/gen-mapping@0.3.5': 1266 | dependencies: 1267 | '@jridgewell/set-array': 1.2.1 1268 | '@jridgewell/sourcemap-codec': 1.4.15 1269 | '@jridgewell/trace-mapping': 0.3.25 1270 | 1271 | '@jridgewell/resolve-uri@3.1.2': {} 1272 | 1273 | '@jridgewell/set-array@1.2.1': {} 1274 | 1275 | '@jridgewell/sourcemap-codec@1.4.15': {} 1276 | 1277 | '@jridgewell/trace-mapping@0.3.25': 1278 | dependencies: 1279 | '@jridgewell/resolve-uri': 3.1.2 1280 | '@jridgewell/sourcemap-codec': 1.4.15 1281 | 1282 | '@nodelib/fs.scandir@2.1.5': 1283 | dependencies: 1284 | '@nodelib/fs.stat': 2.0.5 1285 | run-parallel: 1.2.0 1286 | 1287 | '@nodelib/fs.stat@2.0.5': {} 1288 | 1289 | '@nodelib/fs.walk@1.2.8': 1290 | dependencies: 1291 | '@nodelib/fs.scandir': 2.1.5 1292 | fastq: 1.17.1 1293 | 1294 | '@pkgjs/parseargs@0.11.0': 1295 | optional: true 1296 | 1297 | '@rollup/rollup-android-arm-eabi@4.17.2': 1298 | optional: true 1299 | 1300 | '@rollup/rollup-android-arm64@4.17.2': 1301 | optional: true 1302 | 1303 | '@rollup/rollup-darwin-arm64@4.17.2': 1304 | optional: true 1305 | 1306 | '@rollup/rollup-darwin-x64@4.17.2': 1307 | optional: true 1308 | 1309 | '@rollup/rollup-linux-arm-gnueabihf@4.17.2': 1310 | optional: true 1311 | 1312 | '@rollup/rollup-linux-arm-musleabihf@4.17.2': 1313 | optional: true 1314 | 1315 | '@rollup/rollup-linux-arm64-gnu@4.17.2': 1316 | optional: true 1317 | 1318 | '@rollup/rollup-linux-arm64-musl@4.17.2': 1319 | optional: true 1320 | 1321 | '@rollup/rollup-linux-powerpc64le-gnu@4.17.2': 1322 | optional: true 1323 | 1324 | '@rollup/rollup-linux-riscv64-gnu@4.17.2': 1325 | optional: true 1326 | 1327 | '@rollup/rollup-linux-s390x-gnu@4.17.2': 1328 | optional: true 1329 | 1330 | '@rollup/rollup-linux-x64-gnu@4.17.2': 1331 | optional: true 1332 | 1333 | '@rollup/rollup-linux-x64-musl@4.17.2': 1334 | optional: true 1335 | 1336 | '@rollup/rollup-win32-arm64-msvc@4.17.2': 1337 | optional: true 1338 | 1339 | '@rollup/rollup-win32-ia32-msvc@4.17.2': 1340 | optional: true 1341 | 1342 | '@rollup/rollup-win32-x64-msvc@4.17.2': 1343 | optional: true 1344 | 1345 | '@sinclair/typebox@0.27.8': {} 1346 | 1347 | '@types/estree@1.0.5': {} 1348 | 1349 | '@vitest/expect@1.6.0': 1350 | dependencies: 1351 | '@vitest/spy': 1.6.0 1352 | '@vitest/utils': 1.6.0 1353 | chai: 4.4.1 1354 | 1355 | '@vitest/runner@1.6.0': 1356 | dependencies: 1357 | '@vitest/utils': 1.6.0 1358 | p-limit: 5.0.0 1359 | pathe: 1.1.2 1360 | 1361 | '@vitest/snapshot@1.6.0': 1362 | dependencies: 1363 | magic-string: 0.30.10 1364 | pathe: 1.1.2 1365 | pretty-format: 29.7.0 1366 | 1367 | '@vitest/spy@1.6.0': 1368 | dependencies: 1369 | tinyspy: 2.2.1 1370 | 1371 | '@vitest/utils@1.6.0': 1372 | dependencies: 1373 | diff-sequences: 29.6.3 1374 | estree-walker: 3.0.3 1375 | loupe: 2.3.7 1376 | pretty-format: 29.7.0 1377 | 1378 | acorn-walk@8.3.2: {} 1379 | 1380 | acorn@8.11.3: {} 1381 | 1382 | ansi-regex@5.0.1: {} 1383 | 1384 | ansi-regex@6.0.1: {} 1385 | 1386 | ansi-styles@4.3.0: 1387 | dependencies: 1388 | color-convert: 2.0.1 1389 | 1390 | ansi-styles@5.2.0: {} 1391 | 1392 | ansi-styles@6.2.1: {} 1393 | 1394 | any-promise@1.3.0: {} 1395 | 1396 | anymatch@3.1.3: 1397 | dependencies: 1398 | normalize-path: 3.0.0 1399 | picomatch: 2.3.1 1400 | 1401 | array-union@2.1.0: {} 1402 | 1403 | assertion-error@1.1.0: {} 1404 | 1405 | balanced-match@1.0.2: {} 1406 | 1407 | binary-extensions@2.3.0: {} 1408 | 1409 | brace-expansion@2.0.1: 1410 | dependencies: 1411 | balanced-match: 1.0.2 1412 | 1413 | braces@3.0.2: 1414 | dependencies: 1415 | fill-range: 7.0.1 1416 | 1417 | bundle-require@4.1.0(esbuild@0.19.12): 1418 | dependencies: 1419 | esbuild: 0.19.12 1420 | load-tsconfig: 0.2.5 1421 | 1422 | cac@6.7.14: {} 1423 | 1424 | chai@4.4.1: 1425 | dependencies: 1426 | assertion-error: 1.1.0 1427 | check-error: 1.0.3 1428 | deep-eql: 4.1.3 1429 | get-func-name: 2.0.2 1430 | loupe: 2.3.7 1431 | pathval: 1.1.1 1432 | type-detect: 4.0.8 1433 | 1434 | check-error@1.0.3: 1435 | dependencies: 1436 | get-func-name: 2.0.2 1437 | 1438 | chokidar@3.6.0: 1439 | dependencies: 1440 | anymatch: 3.1.3 1441 | braces: 3.0.2 1442 | glob-parent: 5.1.2 1443 | is-binary-path: 2.1.0 1444 | is-glob: 4.0.3 1445 | normalize-path: 3.0.0 1446 | readdirp: 3.6.0 1447 | optionalDependencies: 1448 | fsevents: 2.3.3 1449 | 1450 | color-convert@2.0.1: 1451 | dependencies: 1452 | color-name: 1.1.4 1453 | 1454 | color-name@1.1.4: {} 1455 | 1456 | commander@4.1.1: {} 1457 | 1458 | confbox@0.1.7: {} 1459 | 1460 | cross-spawn@7.0.3: 1461 | dependencies: 1462 | path-key: 3.1.1 1463 | shebang-command: 2.0.0 1464 | which: 2.0.2 1465 | 1466 | debug@4.3.4: 1467 | dependencies: 1468 | ms: 2.1.2 1469 | 1470 | deep-eql@4.1.3: 1471 | dependencies: 1472 | type-detect: 4.0.8 1473 | 1474 | diff-sequences@29.6.3: {} 1475 | 1476 | dir-glob@3.0.1: 1477 | dependencies: 1478 | path-type: 4.0.0 1479 | 1480 | eastasianwidth@0.2.0: {} 1481 | 1482 | emoji-regex@8.0.0: {} 1483 | 1484 | emoji-regex@9.2.2: {} 1485 | 1486 | esbuild@0.19.12: 1487 | optionalDependencies: 1488 | '@esbuild/aix-ppc64': 0.19.12 1489 | '@esbuild/android-arm': 0.19.12 1490 | '@esbuild/android-arm64': 0.19.12 1491 | '@esbuild/android-x64': 0.19.12 1492 | '@esbuild/darwin-arm64': 0.19.12 1493 | '@esbuild/darwin-x64': 0.19.12 1494 | '@esbuild/freebsd-arm64': 0.19.12 1495 | '@esbuild/freebsd-x64': 0.19.12 1496 | '@esbuild/linux-arm': 0.19.12 1497 | '@esbuild/linux-arm64': 0.19.12 1498 | '@esbuild/linux-ia32': 0.19.12 1499 | '@esbuild/linux-loong64': 0.19.12 1500 | '@esbuild/linux-mips64el': 0.19.12 1501 | '@esbuild/linux-ppc64': 0.19.12 1502 | '@esbuild/linux-riscv64': 0.19.12 1503 | '@esbuild/linux-s390x': 0.19.12 1504 | '@esbuild/linux-x64': 0.19.12 1505 | '@esbuild/netbsd-x64': 0.19.12 1506 | '@esbuild/openbsd-x64': 0.19.12 1507 | '@esbuild/sunos-x64': 0.19.12 1508 | '@esbuild/win32-arm64': 0.19.12 1509 | '@esbuild/win32-ia32': 0.19.12 1510 | '@esbuild/win32-x64': 0.19.12 1511 | 1512 | esbuild@0.20.2: 1513 | optionalDependencies: 1514 | '@esbuild/aix-ppc64': 0.20.2 1515 | '@esbuild/android-arm': 0.20.2 1516 | '@esbuild/android-arm64': 0.20.2 1517 | '@esbuild/android-x64': 0.20.2 1518 | '@esbuild/darwin-arm64': 0.20.2 1519 | '@esbuild/darwin-x64': 0.20.2 1520 | '@esbuild/freebsd-arm64': 0.20.2 1521 | '@esbuild/freebsd-x64': 0.20.2 1522 | '@esbuild/linux-arm': 0.20.2 1523 | '@esbuild/linux-arm64': 0.20.2 1524 | '@esbuild/linux-ia32': 0.20.2 1525 | '@esbuild/linux-loong64': 0.20.2 1526 | '@esbuild/linux-mips64el': 0.20.2 1527 | '@esbuild/linux-ppc64': 0.20.2 1528 | '@esbuild/linux-riscv64': 0.20.2 1529 | '@esbuild/linux-s390x': 0.20.2 1530 | '@esbuild/linux-x64': 0.20.2 1531 | '@esbuild/netbsd-x64': 0.20.2 1532 | '@esbuild/openbsd-x64': 0.20.2 1533 | '@esbuild/sunos-x64': 0.20.2 1534 | '@esbuild/win32-arm64': 0.20.2 1535 | '@esbuild/win32-ia32': 0.20.2 1536 | '@esbuild/win32-x64': 0.20.2 1537 | 1538 | estree-walker@3.0.3: 1539 | dependencies: 1540 | '@types/estree': 1.0.5 1541 | 1542 | execa@5.1.1: 1543 | dependencies: 1544 | cross-spawn: 7.0.3 1545 | get-stream: 6.0.1 1546 | human-signals: 2.1.0 1547 | is-stream: 2.0.1 1548 | merge-stream: 2.0.0 1549 | npm-run-path: 4.0.1 1550 | onetime: 5.1.2 1551 | signal-exit: 3.0.7 1552 | strip-final-newline: 2.0.0 1553 | 1554 | execa@8.0.1: 1555 | dependencies: 1556 | cross-spawn: 7.0.3 1557 | get-stream: 8.0.1 1558 | human-signals: 5.0.0 1559 | is-stream: 3.0.0 1560 | merge-stream: 2.0.0 1561 | npm-run-path: 5.3.0 1562 | onetime: 6.0.0 1563 | signal-exit: 4.1.0 1564 | strip-final-newline: 3.0.0 1565 | 1566 | fast-glob@3.3.2: 1567 | dependencies: 1568 | '@nodelib/fs.stat': 2.0.5 1569 | '@nodelib/fs.walk': 1.2.8 1570 | glob-parent: 5.1.2 1571 | merge2: 1.4.1 1572 | micromatch: 4.0.5 1573 | 1574 | fastq@1.17.1: 1575 | dependencies: 1576 | reusify: 1.0.4 1577 | 1578 | fill-range@7.0.1: 1579 | dependencies: 1580 | to-regex-range: 5.0.1 1581 | 1582 | foreground-child@3.1.1: 1583 | dependencies: 1584 | cross-spawn: 7.0.3 1585 | signal-exit: 4.1.0 1586 | 1587 | fsevents@2.3.3: 1588 | optional: true 1589 | 1590 | get-func-name@2.0.2: {} 1591 | 1592 | get-stream@6.0.1: {} 1593 | 1594 | get-stream@8.0.1: {} 1595 | 1596 | glob-parent@5.1.2: 1597 | dependencies: 1598 | is-glob: 4.0.3 1599 | 1600 | glob@10.3.14: 1601 | dependencies: 1602 | foreground-child: 3.1.1 1603 | jackspeak: 2.3.6 1604 | minimatch: 9.0.4 1605 | minipass: 7.1.1 1606 | path-scurry: 1.11.0 1607 | 1608 | globby@11.1.0: 1609 | dependencies: 1610 | array-union: 2.1.0 1611 | dir-glob: 3.0.1 1612 | fast-glob: 3.3.2 1613 | ignore: 5.3.1 1614 | merge2: 1.4.1 1615 | slash: 3.0.0 1616 | 1617 | human-signals@2.1.0: {} 1618 | 1619 | human-signals@5.0.0: {} 1620 | 1621 | ignore@5.3.1: {} 1622 | 1623 | is-binary-path@2.1.0: 1624 | dependencies: 1625 | binary-extensions: 2.3.0 1626 | 1627 | is-extglob@2.1.1: {} 1628 | 1629 | is-fullwidth-code-point@3.0.0: {} 1630 | 1631 | is-glob@4.0.3: 1632 | dependencies: 1633 | is-extglob: 2.1.1 1634 | 1635 | is-number@7.0.0: {} 1636 | 1637 | is-stream@2.0.1: {} 1638 | 1639 | is-stream@3.0.0: {} 1640 | 1641 | isexe@2.0.0: {} 1642 | 1643 | jackspeak@2.3.6: 1644 | dependencies: 1645 | '@isaacs/cliui': 8.0.2 1646 | optionalDependencies: 1647 | '@pkgjs/parseargs': 0.11.0 1648 | 1649 | joycon@3.1.1: {} 1650 | 1651 | js-tokens@9.0.0: {} 1652 | 1653 | lilconfig@3.1.1: {} 1654 | 1655 | lines-and-columns@1.2.4: {} 1656 | 1657 | load-tsconfig@0.2.5: {} 1658 | 1659 | local-pkg@0.5.0: 1660 | dependencies: 1661 | mlly: 1.7.0 1662 | pkg-types: 1.1.1 1663 | 1664 | lodash.sortby@4.7.0: {} 1665 | 1666 | loupe@2.3.7: 1667 | dependencies: 1668 | get-func-name: 2.0.2 1669 | 1670 | lru-cache@10.2.2: {} 1671 | 1672 | magic-string@0.30.10: 1673 | dependencies: 1674 | '@jridgewell/sourcemap-codec': 1.4.15 1675 | 1676 | merge-stream@2.0.0: {} 1677 | 1678 | merge2@1.4.1: {} 1679 | 1680 | micromatch@4.0.5: 1681 | dependencies: 1682 | braces: 3.0.2 1683 | picomatch: 2.3.1 1684 | 1685 | mimic-fn@2.1.0: {} 1686 | 1687 | mimic-fn@4.0.0: {} 1688 | 1689 | minimatch@9.0.4: 1690 | dependencies: 1691 | brace-expansion: 2.0.1 1692 | 1693 | minipass@7.1.1: {} 1694 | 1695 | mlly@1.7.0: 1696 | dependencies: 1697 | acorn: 8.11.3 1698 | pathe: 1.1.2 1699 | pkg-types: 1.1.1 1700 | ufo: 1.5.3 1701 | 1702 | ms@2.1.2: {} 1703 | 1704 | mz@2.7.0: 1705 | dependencies: 1706 | any-promise: 1.3.0 1707 | object-assign: 4.1.1 1708 | thenify-all: 1.6.0 1709 | 1710 | nanoid@3.3.7: {} 1711 | 1712 | nanoid@5.0.7: {} 1713 | 1714 | normalize-path@3.0.0: {} 1715 | 1716 | npm-run-path@4.0.1: 1717 | dependencies: 1718 | path-key: 3.1.1 1719 | 1720 | npm-run-path@5.3.0: 1721 | dependencies: 1722 | path-key: 4.0.0 1723 | 1724 | object-assign@4.1.1: {} 1725 | 1726 | onetime@5.1.2: 1727 | dependencies: 1728 | mimic-fn: 2.1.0 1729 | 1730 | onetime@6.0.0: 1731 | dependencies: 1732 | mimic-fn: 4.0.0 1733 | 1734 | p-limit@5.0.0: 1735 | dependencies: 1736 | yocto-queue: 1.0.0 1737 | 1738 | path-key@3.1.1: {} 1739 | 1740 | path-key@4.0.0: {} 1741 | 1742 | path-scurry@1.11.0: 1743 | dependencies: 1744 | lru-cache: 10.2.2 1745 | minipass: 7.1.1 1746 | 1747 | path-type@4.0.0: {} 1748 | 1749 | pathe@1.1.2: {} 1750 | 1751 | pathval@1.1.1: {} 1752 | 1753 | picocolors@1.0.0: {} 1754 | 1755 | picomatch@2.3.1: {} 1756 | 1757 | pirates@4.0.6: {} 1758 | 1759 | pkg-types@1.1.1: 1760 | dependencies: 1761 | confbox: 0.1.7 1762 | mlly: 1.7.0 1763 | pathe: 1.1.2 1764 | 1765 | postcss-load-config@4.0.2(postcss@8.4.38): 1766 | dependencies: 1767 | lilconfig: 3.1.1 1768 | yaml: 2.4.2 1769 | optionalDependencies: 1770 | postcss: 8.4.38 1771 | 1772 | postcss@8.4.38: 1773 | dependencies: 1774 | nanoid: 3.3.7 1775 | picocolors: 1.0.0 1776 | source-map-js: 1.2.0 1777 | 1778 | prettier@3.2.5: {} 1779 | 1780 | pretty-format@29.7.0: 1781 | dependencies: 1782 | '@jest/schemas': 29.6.3 1783 | ansi-styles: 5.2.0 1784 | react-is: 18.3.1 1785 | 1786 | punycode@2.3.1: {} 1787 | 1788 | queue-microtask@1.2.3: {} 1789 | 1790 | react-is@18.3.1: {} 1791 | 1792 | readdirp@3.6.0: 1793 | dependencies: 1794 | picomatch: 2.3.1 1795 | 1796 | resolve-from@5.0.0: {} 1797 | 1798 | reusify@1.0.4: {} 1799 | 1800 | rollup@4.17.2: 1801 | dependencies: 1802 | '@types/estree': 1.0.5 1803 | optionalDependencies: 1804 | '@rollup/rollup-android-arm-eabi': 4.17.2 1805 | '@rollup/rollup-android-arm64': 4.17.2 1806 | '@rollup/rollup-darwin-arm64': 4.17.2 1807 | '@rollup/rollup-darwin-x64': 4.17.2 1808 | '@rollup/rollup-linux-arm-gnueabihf': 4.17.2 1809 | '@rollup/rollup-linux-arm-musleabihf': 4.17.2 1810 | '@rollup/rollup-linux-arm64-gnu': 4.17.2 1811 | '@rollup/rollup-linux-arm64-musl': 4.17.2 1812 | '@rollup/rollup-linux-powerpc64le-gnu': 4.17.2 1813 | '@rollup/rollup-linux-riscv64-gnu': 4.17.2 1814 | '@rollup/rollup-linux-s390x-gnu': 4.17.2 1815 | '@rollup/rollup-linux-x64-gnu': 4.17.2 1816 | '@rollup/rollup-linux-x64-musl': 4.17.2 1817 | '@rollup/rollup-win32-arm64-msvc': 4.17.2 1818 | '@rollup/rollup-win32-ia32-msvc': 4.17.2 1819 | '@rollup/rollup-win32-x64-msvc': 4.17.2 1820 | fsevents: 2.3.3 1821 | 1822 | run-parallel@1.2.0: 1823 | dependencies: 1824 | queue-microtask: 1.2.3 1825 | 1826 | shebang-command@2.0.0: 1827 | dependencies: 1828 | shebang-regex: 3.0.0 1829 | 1830 | shebang-regex@3.0.0: {} 1831 | 1832 | siginfo@2.0.0: {} 1833 | 1834 | signal-exit@3.0.7: {} 1835 | 1836 | signal-exit@4.1.0: {} 1837 | 1838 | slash@3.0.0: {} 1839 | 1840 | source-map-js@1.2.0: {} 1841 | 1842 | source-map@0.8.0-beta.0: 1843 | dependencies: 1844 | whatwg-url: 7.1.0 1845 | 1846 | stackback@0.0.2: {} 1847 | 1848 | std-env@3.7.0: {} 1849 | 1850 | string-width@4.2.3: 1851 | dependencies: 1852 | emoji-regex: 8.0.0 1853 | is-fullwidth-code-point: 3.0.0 1854 | strip-ansi: 6.0.1 1855 | 1856 | string-width@5.1.2: 1857 | dependencies: 1858 | eastasianwidth: 0.2.0 1859 | emoji-regex: 9.2.2 1860 | strip-ansi: 7.1.0 1861 | 1862 | strip-ansi@6.0.1: 1863 | dependencies: 1864 | ansi-regex: 5.0.1 1865 | 1866 | strip-ansi@7.1.0: 1867 | dependencies: 1868 | ansi-regex: 6.0.1 1869 | 1870 | strip-final-newline@2.0.0: {} 1871 | 1872 | strip-final-newline@3.0.0: {} 1873 | 1874 | strip-literal@2.1.0: 1875 | dependencies: 1876 | js-tokens: 9.0.0 1877 | 1878 | sucrase@3.35.0: 1879 | dependencies: 1880 | '@jridgewell/gen-mapping': 0.3.5 1881 | commander: 4.1.1 1882 | glob: 10.3.14 1883 | lines-and-columns: 1.2.4 1884 | mz: 2.7.0 1885 | pirates: 4.0.6 1886 | ts-interface-checker: 0.1.13 1887 | 1888 | thenify-all@1.6.0: 1889 | dependencies: 1890 | thenify: 3.3.1 1891 | 1892 | thenify@3.3.1: 1893 | dependencies: 1894 | any-promise: 1.3.0 1895 | 1896 | tinybench@2.8.0: {} 1897 | 1898 | tinypool@0.8.4: {} 1899 | 1900 | tinyspy@2.2.1: {} 1901 | 1902 | to-regex-range@5.0.1: 1903 | dependencies: 1904 | is-number: 7.0.0 1905 | 1906 | tr46@1.0.1: 1907 | dependencies: 1908 | punycode: 2.3.1 1909 | 1910 | tree-kill@1.2.2: {} 1911 | 1912 | ts-interface-checker@0.1.13: {} 1913 | 1914 | tsup@8.0.2(postcss@8.4.38)(typescript@5.4.5): 1915 | dependencies: 1916 | bundle-require: 4.1.0(esbuild@0.19.12) 1917 | cac: 6.7.14 1918 | chokidar: 3.6.0 1919 | debug: 4.3.4 1920 | esbuild: 0.19.12 1921 | execa: 5.1.1 1922 | globby: 11.1.0 1923 | joycon: 3.1.1 1924 | postcss-load-config: 4.0.2(postcss@8.4.38) 1925 | resolve-from: 5.0.0 1926 | rollup: 4.17.2 1927 | source-map: 0.8.0-beta.0 1928 | sucrase: 3.35.0 1929 | tree-kill: 1.2.2 1930 | optionalDependencies: 1931 | postcss: 8.4.38 1932 | typescript: 5.4.5 1933 | transitivePeerDependencies: 1934 | - supports-color 1935 | - ts-node 1936 | 1937 | type-detect@4.0.8: {} 1938 | 1939 | typescript@5.4.5: {} 1940 | 1941 | ufo@1.5.3: {} 1942 | 1943 | vite-node@1.6.0: 1944 | dependencies: 1945 | cac: 6.7.14 1946 | debug: 4.3.4 1947 | pathe: 1.1.2 1948 | picocolors: 1.0.0 1949 | vite: 5.2.11 1950 | transitivePeerDependencies: 1951 | - '@types/node' 1952 | - less 1953 | - lightningcss 1954 | - sass 1955 | - stylus 1956 | - sugarss 1957 | - supports-color 1958 | - terser 1959 | 1960 | vite@5.2.11: 1961 | dependencies: 1962 | esbuild: 0.20.2 1963 | postcss: 8.4.38 1964 | rollup: 4.17.2 1965 | optionalDependencies: 1966 | fsevents: 2.3.3 1967 | 1968 | vitest@1.6.0: 1969 | dependencies: 1970 | '@vitest/expect': 1.6.0 1971 | '@vitest/runner': 1.6.0 1972 | '@vitest/snapshot': 1.6.0 1973 | '@vitest/spy': 1.6.0 1974 | '@vitest/utils': 1.6.0 1975 | acorn-walk: 8.3.2 1976 | chai: 4.4.1 1977 | debug: 4.3.4 1978 | execa: 8.0.1 1979 | local-pkg: 0.5.0 1980 | magic-string: 0.30.10 1981 | pathe: 1.1.2 1982 | picocolors: 1.0.0 1983 | std-env: 3.7.0 1984 | strip-literal: 2.1.0 1985 | tinybench: 2.8.0 1986 | tinypool: 0.8.4 1987 | vite: 5.2.11 1988 | vite-node: 1.6.0 1989 | why-is-node-running: 2.2.2 1990 | transitivePeerDependencies: 1991 | - less 1992 | - lightningcss 1993 | - sass 1994 | - stylus 1995 | - sugarss 1996 | - supports-color 1997 | - terser 1998 | 1999 | webidl-conversions@4.0.2: {} 2000 | 2001 | whatwg-url@7.1.0: 2002 | dependencies: 2003 | lodash.sortby: 4.7.0 2004 | tr46: 1.0.1 2005 | webidl-conversions: 4.0.2 2006 | 2007 | which@2.0.2: 2008 | dependencies: 2009 | isexe: 2.0.0 2010 | 2011 | why-is-node-running@2.2.2: 2012 | dependencies: 2013 | siginfo: 2.0.0 2014 | stackback: 0.0.2 2015 | 2016 | wrap-ansi@7.0.0: 2017 | dependencies: 2018 | ansi-styles: 4.3.0 2019 | string-width: 4.2.3 2020 | strip-ansi: 6.0.1 2021 | 2022 | wrap-ansi@8.1.0: 2023 | dependencies: 2024 | ansi-styles: 6.2.1 2025 | string-width: 5.1.2 2026 | strip-ansi: 7.1.0 2027 | 2028 | yaml@2.4.2: {} 2029 | 2030 | yocto-queue@1.0.0: {} 2031 | -------------------------------------------------------------------------------- /test/create-container.test.ts: -------------------------------------------------------------------------------- 1 | import { createContainer } from "../lib/create-container"; 2 | import { createModule } from "../lib/create-module"; 3 | import { describe, it, expect } from "vitest"; 4 | 5 | describe("createContainer", () => { 6 | type TestDeps = { 7 | vkApi: () => string; 8 | }; 9 | 10 | const testDeps: TestDeps = { 11 | vkApi: () => "{vkApi}", 12 | }; 13 | 14 | const testContent = "testContent"; 15 | 16 | it("should resolve dependency from container", () => { 17 | const Container = createContainer("Container"); 18 | 19 | const LayoutProvider = Container.provider(({ deps }) => { 20 | // init code 21 | return function Layout() { 22 | // runtime code 23 | return `${deps.vkApi()}`; 24 | }; 25 | }); 26 | 27 | const EntryProvider = Container.provider( 28 | ({ innerDeps: { Layout } }) => { 29 | // init code 30 | return function Entry({ prop }: { prop: number }) { 31 | // runtime code 32 | return `${Layout()}`; 33 | }; 34 | }, 35 | { 36 | Layout: LayoutProvider, 37 | }, 38 | ); 39 | 40 | const Entry = createModule(EntryProvider).init(testDeps); 41 | const entryResult = Entry({ prop: 1 }); 42 | 43 | expect(entryResult).toBe( 44 | `{vkApi}`, 45 | ); 46 | }); 47 | 48 | it("should resolve sub container", () => { 49 | /* Container1 */ 50 | const Container1 = createContainer("Container1"); 51 | 52 | const provider = Container1.provider(({ deps }) => { 53 | return deps.vkApi() + testContent; 54 | }); 55 | 56 | const module1 = createModule(provider); 57 | 58 | /* Container2 */ 59 | type TestDeps2 = TestDeps & { 60 | testDep2: string; 61 | }; 62 | const testDep2 = "testDep2"; 63 | 64 | const Container2 = createContainer("Container2"); 65 | 66 | const module1Provider = Container2.provider(({ deps }) => 67 | module1.init(deps), 68 | ); 69 | 70 | const provider2 = Container2.provider( 71 | ({ deps, innerDeps }) => innerDeps.module1Provider + deps.testDep2, 72 | { 73 | module1Provider, 74 | }, 75 | ); 76 | 77 | const moduleInstance = createModule(provider2).init({ 78 | ...testDeps, 79 | testDep2, 80 | }); 81 | 82 | expect(moduleInstance).toBe(testDeps.vkApi() + testContent + testDep2); 83 | }); 84 | }); 85 | -------------------------------------------------------------------------------- /test/merge-containers.test.ts: -------------------------------------------------------------------------------- 1 | import { createContainer } from "../lib/create-container"; 2 | import { createModule } from "../lib/create-module"; 3 | import { mergeContainers } from "../lib/merge-containers"; 4 | import { describe, it, expect } from "vitest"; 5 | 6 | describe("mergeContainers", () => { 7 | it("should return container with dependencies intersection", () => { 8 | const container1 = createContainer<{ dep1: string }>("container1"); 9 | const container2 = createContainer<{ dep2: string }>("container2"); 10 | 11 | const mergedContainer = mergeContainers([container1, container2]); 12 | 13 | const containerResult = createModule( 14 | mergedContainer.provider((deps) => deps), 15 | ).init({ 16 | dep1: "dep1", 17 | dep2: "dep2", 18 | }); 19 | 20 | expect(containerResult).toEqual({ 21 | deps: { 22 | dep1: "dep1", 23 | dep2: "dep2", 24 | }, 25 | innerDeps: {}, 26 | }); 27 | }); 28 | }); 29 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | /* Visit https://aka.ms/tsconfig to read more about this file */ 4 | 5 | /* Projects */ 6 | // "incremental": true, /* Save .tsbuildinfo files to allow for incremental compilation of projects. */ 7 | // "composite": true, /* Enable constraints that allow a TypeScript project to be used with project references. */ 8 | // "tsBuildInfoFile": "./.tsbuildinfo", /* Specify the path to .tsbuildinfo incremental compilation file. */ 9 | // "disableSourceOfProjectReferenceRedirect": true, /* Disable preferring source files instead of declaration files when referencing composite projects. */ 10 | // "disableSolutionSearching": true, /* Opt a project out of multi-project reference checking when editing. */ 11 | // "disableReferencedProjectLoad": true, /* Reduce the number of projects loaded automatically by TypeScript. */ 12 | 13 | /* Language and Environment */ 14 | "target": "es2020", /* Set the JavaScript language version for emitted JavaScript and include compatible library declarations. */ 15 | // "lib": [], /* Specify a set of bundled library declaration files that describe the target runtime environment. */ 16 | // "jsx": "preserve", /* Specify what JSX code is generated. */ 17 | // "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ 18 | // "emitDecoratorMetadata": true, /* Emit design-type metadata for decorated declarations in source files. */ 19 | // "jsxFactory": "", /* Specify the JSX factory function used when targeting React JSX emit, e.g. 'React.createElement' or 'h'. */ 20 | // "jsxFragmentFactory": "", /* Specify the JSX Fragment reference used for fragments when targeting React JSX emit e.g. 'React.Fragment' or 'Fragment'. */ 21 | // "jsxImportSource": "", /* Specify module specifier used to import the JSX factory functions when using 'jsx: react-jsx*'. */ 22 | // "reactNamespace": "", /* Specify the object invoked for 'createElement'. This only applies when targeting 'react' JSX emit. */ 23 | // "noLib": true, /* Disable including any library files, including the default lib.d.ts. */ 24 | // "useDefineForClassFields": true, /* Emit ECMAScript-standard-compliant class fields. */ 25 | // "moduleDetection": "auto", /* Control what method is used to detect module-format JS files. */ 26 | 27 | /* Modules */ 28 | "module": "commonjs", /* Specify what module code is generated. */ 29 | // "rootDir": "./", /* Specify the root folder within your source files. */ 30 | // "moduleResolution": "node10", /* Specify how TypeScript looks up a file from a given module specifier. */ 31 | // "baseUrl": "./", /* Specify the base directory to resolve non-relative module names. */ 32 | // "paths": {}, /* Specify a set of entries that re-map imports to additional lookup locations. */ 33 | // "rootDirs": [], /* Allow multiple folders to be treated as one when resolving modules. */ 34 | // "typeRoots": [], /* Specify multiple folders that act like './node_modules/@types'. */ 35 | // "types": [], /* Specify type package names to be included without being referenced in a source file. */ 36 | // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ 37 | // "moduleSuffixes": [], /* List of file name suffixes to search when resolving a module. */ 38 | // "allowImportingTsExtensions": true, /* Allow imports to include TypeScript file extensions. Requires '--moduleResolution bundler' and either '--noEmit' or '--emitDeclarationOnly' to be set. */ 39 | // "resolvePackageJsonExports": true, /* Use the package.json 'exports' field when resolving package imports. */ 40 | // "resolvePackageJsonImports": true, /* Use the package.json 'imports' field when resolving imports. */ 41 | // "customConditions": [], /* Conditions to set in addition to the resolver-specific defaults when resolving imports. */ 42 | // "resolveJsonModule": true, /* Enable importing .json files. */ 43 | // "allowArbitraryExtensions": true, /* Enable importing files with any extension, provided a declaration file is present. */ 44 | // "noResolve": true, /* Disallow 'import's, 'require's or ''s from expanding the number of files TypeScript should add to a project. */ 45 | 46 | /* JavaScript Support */ 47 | // "allowJs": true, /* Allow JavaScript files to be a part of your program. Use the 'checkJS' option to get errors from these files. */ 48 | // "checkJs": true, /* Enable error reporting in type-checked JavaScript files. */ 49 | // "maxNodeModuleJsDepth": 1, /* Specify the maximum folder depth used for checking JavaScript files from 'node_modules'. Only applicable with 'allowJs'. */ 50 | 51 | /* Emit */ 52 | // "declaration": true, /* Generate .d.ts files from TypeScript and JavaScript files in your project. */ 53 | // "declarationMap": true, /* Create sourcemaps for d.ts files. */ 54 | // "emitDeclarationOnly": true, /* Only output d.ts files and not JavaScript files. */ 55 | // "sourceMap": true, /* Create source map files for emitted JavaScript files. */ 56 | // "inlineSourceMap": true, /* Include sourcemap files inside the emitted JavaScript. */ 57 | // "outFile": "./", /* Specify a file that bundles all outputs into one JavaScript file. If 'declaration' is true, also designates a file that bundles all .d.ts output. */ 58 | // "outDir": "./", /* Specify an output folder for all emitted files. */ 59 | // "removeComments": true, /* Disable emitting comments. */ 60 | // "noEmit": true, /* Disable emitting files from a compilation. */ 61 | // "importHelpers": true, /* Allow importing helper functions from tslib once per project, instead of including them per-file. */ 62 | // "importsNotUsedAsValues": "remove", /* Specify emit/checking behavior for imports that are only used for types. */ 63 | // "downlevelIteration": true, /* Emit more compliant, but verbose and less performant JavaScript for iteration. */ 64 | // "sourceRoot": "", /* Specify the root path for debuggers to find the reference source code. */ 65 | // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ 66 | // "inlineSources": true, /* Include source code in the sourcemaps inside the emitted JavaScript. */ 67 | // "emitBOM": true, /* Emit a UTF-8 Byte Order Mark (BOM) in the beginning of output files. */ 68 | // "newLine": "crlf", /* Set the newline character for emitting files. */ 69 | // "stripInternal": true, /* Disable emitting declarations that have '@internal' in their JSDoc comments. */ 70 | // "noEmitHelpers": true, /* Disable generating custom helper functions like '__extends' in compiled output. */ 71 | // "noEmitOnError": true, /* Disable emitting files if any type checking errors are reported. */ 72 | // "preserveConstEnums": true, /* Disable erasing 'const enum' declarations in generated code. */ 73 | // "declarationDir": "./", /* Specify the output directory for generated declaration files. */ 74 | // "preserveValueImports": true, /* Preserve unused imported values in the JavaScript output that would otherwise be removed. */ 75 | 76 | /* Interop Constraints */ 77 | // "isolatedModules": true, /* Ensure that each file can be safely transpiled without relying on other imports. */ 78 | // "verbatimModuleSyntax": true, /* Do not transform or elide any imports or exports not marked as type-only, ensuring they are written in the output file's format based on the 'module' setting. */ 79 | // "allowSyntheticDefaultImports": true, /* Allow 'import x from y' when a module doesn't have a default export. */ 80 | "esModuleInterop": true, /* Emit additional JavaScript to ease support for importing CommonJS modules. This enables 'allowSyntheticDefaultImports' for type compatibility. */ 81 | // "preserveSymlinks": true, /* Disable resolving symlinks to their realpath. This correlates to the same flag in node. */ 82 | "forceConsistentCasingInFileNames": true, /* Ensure that casing is correct in imports. */ 83 | 84 | /* Type Checking */ 85 | "strict": true, /* Enable all strict type-checking options. */ 86 | // "noImplicitAny": true, /* Enable error reporting for expressions and declarations with an implied 'any' type. */ 87 | // "strictNullChecks": true, /* When type checking, take into account 'null' and 'undefined'. */ 88 | // "strictFunctionTypes": true, /* When assigning functions, check to ensure parameters and the return values are subtype-compatible. */ 89 | // "strictBindCallApply": true, /* Check that the arguments for 'bind', 'call', and 'apply' methods match the original function. */ 90 | // "strictPropertyInitialization": true, /* Check for class properties that are declared but not set in the constructor. */ 91 | // "noImplicitThis": true, /* Enable error reporting when 'this' is given the type 'any'. */ 92 | // "useUnknownInCatchVariables": true, /* Default catch clause variables as 'unknown' instead of 'any'. */ 93 | // "alwaysStrict": true, /* Ensure 'use strict' is always emitted. */ 94 | // "noUnusedLocals": true, /* Enable error reporting when local variables aren't read. */ 95 | // "noUnusedParameters": true, /* Raise an error when a function parameter isn't read. */ 96 | // "exactOptionalPropertyTypes": true, /* Interpret optional property types as written, rather than adding 'undefined'. */ 97 | // "noImplicitReturns": true, /* Enable error reporting for codepaths that do not explicitly return in a function. */ 98 | // "noFallthroughCasesInSwitch": true, /* Enable error reporting for fallthrough cases in switch statements. */ 99 | // "noUncheckedIndexedAccess": true, /* Add 'undefined' to a type when accessed using an index. */ 100 | // "noImplicitOverride": true, /* Ensure overriding members in derived classes are marked with an override modifier. */ 101 | // "noPropertyAccessFromIndexSignature": true, /* Enforces using indexed accessors for keys declared using an indexed type. */ 102 | // "allowUnusedLabels": true, /* Disable error reporting for unused labels. */ 103 | // "allowUnreachableCode": true, /* Disable error reporting for unreachable code. */ 104 | 105 | /* Completeness */ 106 | // "skipDefaultLibCheck": true, /* Skip type checking .d.ts files that are included with TypeScript. */ 107 | "skipLibCheck": true /* Skip type checking all .d.ts files. */ 108 | } 109 | } 110 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "tsup"; 2 | 3 | export default defineConfig({ 4 | target: "es2020", 5 | format: ["cjs", "esm"], 6 | splitting: false, 7 | sourcemap: true, 8 | clean: true, 9 | dts: true, 10 | entryPoints: ["lib/index.ts"], 11 | }); 12 | --------------------------------------------------------------------------------