├── .github ├── FUNDING.yml └── workflows │ ├── ci.yml │ └── npm-publish.yml ├── .gitignore ├── .prettierignore ├── .prettierrc ├── LICENSE ├── README.md ├── index.ts ├── package-lock.json ├── package.json ├── tests ├── component.spec.ts ├── composition.spec.ts ├── escaping.spec.ts ├── helpers.ts ├── is-initialized.spec.ts ├── loading.spec.ts └── simple.spec.ts ├── tsconfig.json └── vite.config.ts /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | # These are supported funding model platforms 2 | 3 | github: [kkuegler] 4 | patreon: # Replace with a single Patreon username 5 | open_collective: # Replace with a single Open Collective username 6 | ko_fi: # Replace with a single Ko-fi username 7 | tidelift: # Replace with a single Tidelift platform-name/package-name e.g., npm/babel 8 | community_bridge: # Replace with a single Community Bridge project-name e.g., cloud-foundry 9 | liberapay: # Replace with a single Liberapay username 10 | issuehunt: # Replace with a single IssueHunt username 11 | otechie: # Replace with a single Otechie username 12 | custom: # https://locize.com 13 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: [push] 4 | 5 | jobs: 6 | build: 7 | runs-on: ubuntu-latest 8 | 9 | steps: 10 | - name: Check out repository 11 | uses: actions/checkout@v4 12 | 13 | - name: Set up Node.js 14 | uses: actions/setup-node@v4 15 | with: 16 | node-version: "20" 17 | 18 | - name: Install dependencies 19 | run: npm install 20 | 21 | - name: Execute build 22 | run: npm run build 23 | 24 | - name: Execute tests 25 | run: npm run test-ci 26 | 27 | - name: Check formatting 28 | run: npx prettier . --check 29 | -------------------------------------------------------------------------------- /.github/workflows/npm-publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish to npm 2 | 3 | on: 4 | push: 5 | branches: 6 | - master 7 | 8 | jobs: 9 | publish: 10 | name: Build and publish package 11 | runs-on: ubuntu-latest 12 | steps: 13 | - name: Check out repository 14 | uses: actions/checkout@v4 15 | 16 | - name: Set up Node.js 17 | uses: actions/setup-node@v4 18 | with: 19 | node-version: "20" 20 | 21 | - name: Install dependencies 22 | run: npm install 23 | 24 | - name: Publish package to npm 25 | uses: JS-DevTools/npm-publish@v3 26 | with: 27 | token: ${{ secrets.NPM_TOKEN }} 28 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | dist/ 2 | docs/ 3 | node_modules/ 4 | types/ 5 | coverage/ -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | /dist/ 2 | /docs/ -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "useTabs": true, 3 | "printWidth": 100, 4 | "endOfLine": "auto" 5 | } 6 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 David Luis Wiegandt 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # i18next-vue 2 | 3 | ## Introduction 4 | 5 | This library is a simple wrapper for [i18next](https://www.i18next.com), simplifying its use in Vue 3. 6 | 7 | There is also a [Vue 2 version of this package](https://github.com/i18next/i18next-vue/tree/vue-2). 8 | 9 | ## Upgrade 10 | 11 | In the [documentation](https://i18next.github.io/i18next-vue/), you can find information on how to [upgrade from `@panter/vue-i18next`](https://i18next.github.io/i18next-vue/migration.html), [from `i18next-vue` 3.x](https://i18next.github.io/i18next-vue/migration-v4.html) or [earlier versions](https://i18next.github.io/i18next-vue/migration-v3.html). 12 | 13 | ## Installation 14 | 15 | ```bash 16 | npm install i18next-vue 17 | ``` 18 | 19 | ## Initialisation 20 | 21 | ```typescript 22 | import Vue from "vue"; 23 | import i18next from "i18next"; 24 | import I18NextVue from "i18next-vue"; 25 | import App from "./App.vue"; 26 | 27 | /*const i18nInitialized = */i18next.init({ ... }); 28 | createApp(App).use(I18NextVue, { i18next }).mount('#app'); 29 | 30 | // to wait for loading the translations first, do this instead: 31 | // i18nInitialized.then(() => createApp(App).use(I18NextVue, { i18next }).mount('#app')); 32 | ``` 33 | 34 | ## Usage 35 | 36 | Use the `$t` translation function, which works like (and uses) the versatile `t` function from [i18next](https://www.i18next.com/overview/api#t). 37 | 38 | There is [a full tutorial](https://dev.to/adrai/how-to-properly-internationalize-a-vue-application-using-i18next-1doj) for setting up i18next-vue. You can check out the [live demo version](https://codesandbox.io/p/sandbox/i18next-vue-v3-y3p49l?file=%2Fsrc%2Fcomponents%2FTranslationShowCase.vue%3A2%2C22) version of it, too. 39 | 40 | To learn about more options, check out the [full documentation](https://i18next.github.io/i18next-vue/). 41 | 42 | ### Simple example 43 | 44 | Given the i18next translations 45 | 46 | ```js 47 | i18next.init({ 48 | // ... 49 | resources: { 50 | en: { 51 | // language 52 | translation: { 53 | // the default namespace 54 | insurance: "Insurance", 55 | }, 56 | }, 57 | de: { 58 | // language 59 | translation: { 60 | // the default namespace 61 | insurance: "Versicherung", 62 | }, 63 | }, 64 | }, 65 | }); 66 | ``` 67 | 68 | You can use 69 | 70 | ```vue 71 | 75 | ``` 76 | 77 | `$t()` works both in Options API and Composition API components. 78 | 79 | Using the [`useTranslation()` composition function](https://i18next.github.io/i18next-vue/guide/composition-api.html) you can access the i18next instance and `t()` in the `setup` part, and e.g. get a `t()` functions for a specific namespace. 80 | 81 | ```vue 82 | 88 | 89 | 95 | ``` 96 | 97 | ### Translation component 98 | 99 | i18next-vue provides a [`` translation component](https://i18next.github.io/i18next-vue/guide/component-interpolation.html), so you can use markup (including Vue components) in translations. 100 | 101 | In this example `{faq-link}` will be replaced by the `faq-link` slot, i.e. by the router link. You can move `{faq-link}` around in the translation, so it makes sense for the target language. 102 | 103 | ```js 104 | i18next.init({ 105 | // ... 106 | resources: { 107 | en: { 108 | translation: { 109 | "message": "Open the {faq-link} page." 110 | "faq": "Frequently Asked Questions" 111 | } 112 | }, 113 | fr: { 114 | // ... 115 | } 116 | } 117 | }) 118 | ``` 119 | 120 | ```vue 121 | 130 | ``` 131 | 132 | #### Custom slot values 133 | 134 | Custom slot values may be useful when the default braces (`{` and `}`) are wrongly treated by the 135 | [Locize](https://github.com/locize/i18next-locize-backend) service or don't satisfy other needs. 136 | 137 | Use custom values for recognizing start and end of the insertion points of the ``/`TranslationComponent` 138 | inside the localization term: 139 | 140 | ```js 141 | // main.js 142 | i18next.init({ 143 | // ... 144 | resources: { 145 | en: { 146 | translation: { 147 | "message": "Open the faq-link page." 148 | "faq": "FAQ" 149 | } 150 | }, 151 | de: { 152 | // ... 153 | } 154 | } 155 | }) 156 | 157 | app.use(I18NextVue, { 158 | i18next, 159 | slotStart: '', 160 | slotEnd: '', 161 | }); 162 | ``` 163 | 164 | ```vue 165 | 166 | 175 | ``` 176 | 177 | ## Contributing 178 | 179 | ### Requirements 180 | 181 | - Node.js >= v20 182 | -------------------------------------------------------------------------------- /index.ts: -------------------------------------------------------------------------------- 1 | import { shallowRef, defineComponent, nextTick, inject, type App, type VNode } from "vue"; 2 | import { i18n, type TFunction, type Namespace, type KeyPrefix } from "i18next"; 3 | 4 | declare module "vue" { 5 | interface ComponentCustomProperties { 6 | $t: TFunction; 7 | $i18next: i18n; 8 | } 9 | } 10 | 11 | interface VueI18NextOptions { 12 | i18next: i18n; 13 | rerenderOn?: ("languageChanged" | "loaded" | "added" | "removed")[]; 14 | // Optional custom pattern for matching slot start of the `TranslationComponent`. 15 | slotStart?: string; 16 | // Optional custom pattern for matching slot end of the `TranslationComponent`. 17 | slotEnd?: string; 18 | } 19 | 20 | const INJECTION_KEY = Symbol(); 21 | export default function install( 22 | app: App, 23 | { 24 | i18next, 25 | rerenderOn = ["languageChanged", "loaded", "added", "removed"], 26 | slotStart = "{", 27 | slotEnd = "}", 28 | }: VueI18NextOptions, 29 | ): void { 30 | // the ref (internally) tracks which Vue instances use translations 31 | // Vue will automatically trigger re-renders when the value of 'lastI18nChange' changes 32 | const lastI18nChange = shallowRef(new Date()); 33 | const invalidate = () => 34 | nextTick(() => { 35 | // defer, so namespace loading is actually complete before re-rendering 36 | lastI18nChange.value = new Date(); 37 | }); 38 | const usingI18n: () => void = () => lastI18nChange.value; 39 | rerenderOn.forEach((event) => { 40 | switch (event) { 41 | case "added": 42 | case "removed": 43 | i18next.store?.on(event, invalidate); 44 | break; 45 | default: 46 | i18next.on(event, invalidate); 47 | break; 48 | } 49 | }); 50 | 51 | app.component("i18next", TranslationComponent); 52 | 53 | const i18nextReady = () => i18next.isInitialized; 54 | app.config.globalProperties.$t = withAccessRecording( 55 | i18next.t.bind(i18next), 56 | usingI18n, 57 | i18nextReady, 58 | ); 59 | 60 | // this proxy makes things like $i18next.language (basically) reactive 61 | const proxiedI18next = new Proxy(i18next, { 62 | get(target, prop) { 63 | usingI18n(); 64 | return Reflect.get(target, prop); 65 | }, 66 | }); 67 | app.config.globalProperties.$i18next = proxiedI18next; 68 | 69 | app.provide(INJECTION_KEY, { 70 | i18next: proxiedI18next, 71 | slotPattern: slotNamePattern(slotStart, slotEnd), 72 | withAccessRecording(t, translationsReady) { 73 | return withAccessRecording(t, usingI18n, translationsReady); 74 | }, 75 | }); 76 | } 77 | 78 | interface I18nPluginContext { 79 | withAccessRecording: (t: T, translationsReady: () => boolean) => T; 80 | slotPattern: RegExp; 81 | i18next: i18n; 82 | } 83 | interface UseTranslationOptions { 84 | keyPrefix?: TKPrefix; 85 | lng?: string | readonly string[]; 86 | } 87 | 88 | export function useTranslation = undefined>( 89 | ns?: N, 90 | options?: UseTranslationOptions, 91 | ) { 92 | const { i18next, withAccessRecording } = getContext(); 93 | let t: TFunction; 94 | 95 | if (options?.lng) { 96 | t = i18next.getFixedT(options.lng, ns, options?.keyPrefix); 97 | } else { 98 | t = i18next.getFixedT(null, ns ?? null, options?.keyPrefix); 99 | } 100 | return { 101 | i18next, 102 | t: withAccessRecording(t, ensureTranslationsLoaded(i18next, ns)), 103 | }; 104 | } 105 | 106 | // produces a function, which will return true if the given translations are available already, else starts loading them and returns false 107 | function ensureTranslationsLoaded( 108 | i18next: i18n, 109 | ns: string | readonly string[] = [], 110 | ): () => boolean { 111 | let loaded: boolean | undefined; 112 | return () => { 113 | if (loaded === undefined) { 114 | if (!i18next.isInitialized) { 115 | return false; 116 | } else { 117 | const toCheck = typeof ns === "string" ? [ns] : ns; 118 | const missing = toCheck.filter((n) => !i18next.hasLoadedNamespace(n)); 119 | if (!missing.length) { 120 | loaded = true; 121 | } else { 122 | loaded = false; 123 | i18next.loadNamespaces(missing).then(() => (loaded = true)); 124 | } 125 | } 126 | } 127 | return loaded; 128 | }; 129 | } 130 | 131 | function withAccessRecording( 132 | t: T, 133 | usingI18n: () => void, 134 | translationsReady: () => boolean, 135 | ): T { 136 | return new Proxy(t, { 137 | apply: function (target, thisArgument, argumentsList) { 138 | usingI18n(); // called during render, so we will get re-rendered when translations change 139 | if (!translationsReady()) { 140 | return ""; 141 | } 142 | return Reflect.apply(target, thisArgument, argumentsList); 143 | }, 144 | }) as T; 145 | } 146 | 147 | function getContext() { 148 | const i18nextContext = inject(INJECTION_KEY); 149 | if (!i18nextContext) { 150 | throw new Error( 151 | "i18next-vue: Make sure to register the i18next-vue plugin using app.use(...).", 152 | ); 153 | } 154 | return i18nextContext; 155 | } 156 | 157 | // pattern matches '{ someSlot }' 158 | function slotNamePattern(start: string, end: string) { 159 | const pattern = `${start}\\s*([a-z0-9\\-]+)\\s*${end}`; 160 | return new RegExp(pattern, "gi"); 161 | } 162 | 163 | export const TranslationComponent = defineComponent({ 164 | props: { 165 | translation: { 166 | type: String, 167 | required: true, 168 | }, 169 | }, 170 | setup(props, { slots }) { 171 | const { slotPattern } = getContext(); 172 | return () => { 173 | const translation = props.translation; 174 | const result: (string | VNode)[] = []; 175 | 176 | let match; 177 | let lastIndex = 0; 178 | while ((match = slotPattern.exec(translation)) !== null) { 179 | result.push(translation.substring(lastIndex, match.index)); 180 | const slot = slots[match[1]]; 181 | if (slot) { 182 | result.push(...slot()); 183 | } else { 184 | result.push(match[0]); 185 | } 186 | lastIndex = slotPattern.lastIndex; 187 | } 188 | result.push(translation.substring(lastIndex)); 189 | return result; 190 | }; 191 | }, 192 | }); 193 | -------------------------------------------------------------------------------- /package-lock.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "i18next-vue", 3 | "version": "5.3.0", 4 | "lockfileVersion": 3, 5 | "requires": true, 6 | "packages": { 7 | "": { 8 | "name": "i18next-vue", 9 | "version": "5.3.0", 10 | "license": "MIT", 11 | "devDependencies": { 12 | "@vitest/coverage-v8": "^2.0.5", 13 | "@vue/test-utils": "^2.4.6", 14 | "jsdom": "^24.1.1", 15 | "prettier": "3.3.3", 16 | "tsup": "^8.2.4", 17 | "typescript": "^5.5.4", 18 | "vitest": "^2.0.5" 19 | }, 20 | "peerDependencies": { 21 | "i18next": ">=23", 22 | "vue": "^3.4.38" 23 | } 24 | }, 25 | "node_modules/@ampproject/remapping": { 26 | "version": "2.3.0", 27 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", 28 | "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", 29 | "dev": true, 30 | "dependencies": { 31 | "@jridgewell/gen-mapping": "^0.3.5", 32 | "@jridgewell/trace-mapping": "^0.3.24" 33 | }, 34 | "engines": { 35 | "node": ">=6.0.0" 36 | } 37 | }, 38 | "node_modules/@babel/helper-string-parser": { 39 | "version": "7.24.8", 40 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.24.8.tgz", 41 | "integrity": "sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==", 42 | "engines": { 43 | "node": ">=6.9.0" 44 | } 45 | }, 46 | "node_modules/@babel/helper-validator-identifier": { 47 | "version": "7.24.7", 48 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", 49 | "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", 50 | "engines": { 51 | "node": ">=6.9.0" 52 | } 53 | }, 54 | "node_modules/@babel/parser": { 55 | "version": "7.25.3", 56 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.25.3.tgz", 57 | "integrity": "sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==", 58 | "dependencies": { 59 | "@babel/types": "^7.25.2" 60 | }, 61 | "bin": { 62 | "parser": "bin/babel-parser.js" 63 | }, 64 | "engines": { 65 | "node": ">=6.0.0" 66 | } 67 | }, 68 | "node_modules/@babel/runtime": { 69 | "version": "7.22.10", 70 | "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.22.10.tgz", 71 | "integrity": "sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==", 72 | "peer": true, 73 | "dependencies": { 74 | "regenerator-runtime": "^0.14.0" 75 | }, 76 | "engines": { 77 | "node": ">=6.9.0" 78 | } 79 | }, 80 | "node_modules/@babel/types": { 81 | "version": "7.25.2", 82 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.25.2.tgz", 83 | "integrity": "sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==", 84 | "dependencies": { 85 | "@babel/helper-string-parser": "^7.24.8", 86 | "@babel/helper-validator-identifier": "^7.24.7", 87 | "to-fast-properties": "^2.0.0" 88 | }, 89 | "engines": { 90 | "node": ">=6.9.0" 91 | } 92 | }, 93 | "node_modules/@bcoe/v8-coverage": { 94 | "version": "0.2.3", 95 | "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz", 96 | "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==", 97 | "dev": true 98 | }, 99 | "node_modules/@esbuild/aix-ppc64": { 100 | "version": "0.23.1", 101 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.23.1.tgz", 102 | "integrity": "sha512-6VhYk1diRqrhBAqpJEdjASR/+WVRtfjpqKuNw11cLiaWpAT/Uu+nokB+UJnevzy/P9C/ty6AOe0dwueMrGh/iQ==", 103 | "cpu": [ 104 | "ppc64" 105 | ], 106 | "dev": true, 107 | "optional": true, 108 | "os": [ 109 | "aix" 110 | ], 111 | "engines": { 112 | "node": ">=18" 113 | } 114 | }, 115 | "node_modules/@esbuild/android-arm": { 116 | "version": "0.23.1", 117 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.23.1.tgz", 118 | "integrity": "sha512-uz6/tEy2IFm9RYOyvKl88zdzZfwEfKZmnX9Cj1BHjeSGNuGLuMD1kR8y5bteYmwqKm1tj8m4cb/aKEorr6fHWQ==", 119 | "cpu": [ 120 | "arm" 121 | ], 122 | "dev": true, 123 | "optional": true, 124 | "os": [ 125 | "android" 126 | ], 127 | "engines": { 128 | "node": ">=18" 129 | } 130 | }, 131 | "node_modules/@esbuild/android-arm64": { 132 | "version": "0.23.1", 133 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.23.1.tgz", 134 | "integrity": "sha512-xw50ipykXcLstLeWH7WRdQuysJqejuAGPd30vd1i5zSyKK3WE+ijzHmLKxdiCMtH1pHz78rOg0BKSYOSB/2Khw==", 135 | "cpu": [ 136 | "arm64" 137 | ], 138 | "dev": true, 139 | "optional": true, 140 | "os": [ 141 | "android" 142 | ], 143 | "engines": { 144 | "node": ">=18" 145 | } 146 | }, 147 | "node_modules/@esbuild/android-x64": { 148 | "version": "0.23.1", 149 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.23.1.tgz", 150 | "integrity": "sha512-nlN9B69St9BwUoB+jkyU090bru8L0NA3yFvAd7k8dNsVH8bi9a8cUAUSEcEEgTp2z3dbEDGJGfP6VUnkQnlReg==", 151 | "cpu": [ 152 | "x64" 153 | ], 154 | "dev": true, 155 | "optional": true, 156 | "os": [ 157 | "android" 158 | ], 159 | "engines": { 160 | "node": ">=18" 161 | } 162 | }, 163 | "node_modules/@esbuild/darwin-arm64": { 164 | "version": "0.23.1", 165 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.23.1.tgz", 166 | "integrity": "sha512-YsS2e3Wtgnw7Wq53XXBLcV6JhRsEq8hkfg91ESVadIrzr9wO6jJDMZnCQbHm1Guc5t/CdDiFSSfWP58FNuvT3Q==", 167 | "cpu": [ 168 | "arm64" 169 | ], 170 | "dev": true, 171 | "optional": true, 172 | "os": [ 173 | "darwin" 174 | ], 175 | "engines": { 176 | "node": ">=18" 177 | } 178 | }, 179 | "node_modules/@esbuild/darwin-x64": { 180 | "version": "0.23.1", 181 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.23.1.tgz", 182 | "integrity": "sha512-aClqdgTDVPSEGgoCS8QDG37Gu8yc9lTHNAQlsztQ6ENetKEO//b8y31MMu2ZaPbn4kVsIABzVLXYLhCGekGDqw==", 183 | "cpu": [ 184 | "x64" 185 | ], 186 | "dev": true, 187 | "optional": true, 188 | "os": [ 189 | "darwin" 190 | ], 191 | "engines": { 192 | "node": ">=18" 193 | } 194 | }, 195 | "node_modules/@esbuild/freebsd-arm64": { 196 | "version": "0.23.1", 197 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.23.1.tgz", 198 | "integrity": "sha512-h1k6yS8/pN/NHlMl5+v4XPfikhJulk4G+tKGFIOwURBSFzE8bixw1ebjluLOjfwtLqY0kewfjLSrO6tN2MgIhA==", 199 | "cpu": [ 200 | "arm64" 201 | ], 202 | "dev": true, 203 | "optional": true, 204 | "os": [ 205 | "freebsd" 206 | ], 207 | "engines": { 208 | "node": ">=18" 209 | } 210 | }, 211 | "node_modules/@esbuild/freebsd-x64": { 212 | "version": "0.23.1", 213 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.23.1.tgz", 214 | "integrity": "sha512-lK1eJeyk1ZX8UklqFd/3A60UuZ/6UVfGT2LuGo3Wp4/z7eRTRYY+0xOu2kpClP+vMTi9wKOfXi2vjUpO1Ro76g==", 215 | "cpu": [ 216 | "x64" 217 | ], 218 | "dev": true, 219 | "optional": true, 220 | "os": [ 221 | "freebsd" 222 | ], 223 | "engines": { 224 | "node": ">=18" 225 | } 226 | }, 227 | "node_modules/@esbuild/linux-arm": { 228 | "version": "0.23.1", 229 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.23.1.tgz", 230 | "integrity": "sha512-CXXkzgn+dXAPs3WBwE+Kvnrf4WECwBdfjfeYHpMeVxWE0EceB6vhWGShs6wi0IYEqMSIzdOF1XjQ/Mkm5d7ZdQ==", 231 | "cpu": [ 232 | "arm" 233 | ], 234 | "dev": true, 235 | "optional": true, 236 | "os": [ 237 | "linux" 238 | ], 239 | "engines": { 240 | "node": ">=18" 241 | } 242 | }, 243 | "node_modules/@esbuild/linux-arm64": { 244 | "version": "0.23.1", 245 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.23.1.tgz", 246 | "integrity": "sha512-/93bf2yxencYDnItMYV/v116zff6UyTjo4EtEQjUBeGiVpMmffDNUyD9UN2zV+V3LRV3/on4xdZ26NKzn6754g==", 247 | "cpu": [ 248 | "arm64" 249 | ], 250 | "dev": true, 251 | "optional": true, 252 | "os": [ 253 | "linux" 254 | ], 255 | "engines": { 256 | "node": ">=18" 257 | } 258 | }, 259 | "node_modules/@esbuild/linux-ia32": { 260 | "version": "0.23.1", 261 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.23.1.tgz", 262 | "integrity": "sha512-VTN4EuOHwXEkXzX5nTvVY4s7E/Krz7COC8xkftbbKRYAl96vPiUssGkeMELQMOnLOJ8k3BY1+ZY52tttZnHcXQ==", 263 | "cpu": [ 264 | "ia32" 265 | ], 266 | "dev": true, 267 | "optional": true, 268 | "os": [ 269 | "linux" 270 | ], 271 | "engines": { 272 | "node": ">=18" 273 | } 274 | }, 275 | "node_modules/@esbuild/linux-loong64": { 276 | "version": "0.23.1", 277 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.23.1.tgz", 278 | "integrity": "sha512-Vx09LzEoBa5zDnieH8LSMRToj7ir/Jeq0Gu6qJ/1GcBq9GkfoEAoXvLiW1U9J1qE/Y/Oyaq33w5p2ZWrNNHNEw==", 279 | "cpu": [ 280 | "loong64" 281 | ], 282 | "dev": true, 283 | "optional": true, 284 | "os": [ 285 | "linux" 286 | ], 287 | "engines": { 288 | "node": ">=18" 289 | } 290 | }, 291 | "node_modules/@esbuild/linux-mips64el": { 292 | "version": "0.23.1", 293 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.23.1.tgz", 294 | "integrity": "sha512-nrFzzMQ7W4WRLNUOU5dlWAqa6yVeI0P78WKGUo7lg2HShq/yx+UYkeNSE0SSfSure0SqgnsxPvmAUu/vu0E+3Q==", 295 | "cpu": [ 296 | "mips64el" 297 | ], 298 | "dev": true, 299 | "optional": true, 300 | "os": [ 301 | "linux" 302 | ], 303 | "engines": { 304 | "node": ">=18" 305 | } 306 | }, 307 | "node_modules/@esbuild/linux-ppc64": { 308 | "version": "0.23.1", 309 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.23.1.tgz", 310 | "integrity": "sha512-dKN8fgVqd0vUIjxuJI6P/9SSSe/mB9rvA98CSH2sJnlZ/OCZWO1DJvxj8jvKTfYUdGfcq2dDxoKaC6bHuTlgcw==", 311 | "cpu": [ 312 | "ppc64" 313 | ], 314 | "dev": true, 315 | "optional": true, 316 | "os": [ 317 | "linux" 318 | ], 319 | "engines": { 320 | "node": ">=18" 321 | } 322 | }, 323 | "node_modules/@esbuild/linux-riscv64": { 324 | "version": "0.23.1", 325 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.23.1.tgz", 326 | "integrity": "sha512-5AV4Pzp80fhHL83JM6LoA6pTQVWgB1HovMBsLQ9OZWLDqVY8MVobBXNSmAJi//Csh6tcY7e7Lny2Hg1tElMjIA==", 327 | "cpu": [ 328 | "riscv64" 329 | ], 330 | "dev": true, 331 | "optional": true, 332 | "os": [ 333 | "linux" 334 | ], 335 | "engines": { 336 | "node": ">=18" 337 | } 338 | }, 339 | "node_modules/@esbuild/linux-s390x": { 340 | "version": "0.23.1", 341 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.23.1.tgz", 342 | "integrity": "sha512-9ygs73tuFCe6f6m/Tb+9LtYxWR4c9yg7zjt2cYkjDbDpV/xVn+68cQxMXCjUpYwEkze2RcU/rMnfIXNRFmSoDw==", 343 | "cpu": [ 344 | "s390x" 345 | ], 346 | "dev": true, 347 | "optional": true, 348 | "os": [ 349 | "linux" 350 | ], 351 | "engines": { 352 | "node": ">=18" 353 | } 354 | }, 355 | "node_modules/@esbuild/linux-x64": { 356 | "version": "0.23.1", 357 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.23.1.tgz", 358 | "integrity": "sha512-EV6+ovTsEXCPAp58g2dD68LxoP/wK5pRvgy0J/HxPGB009omFPv3Yet0HiaqvrIrgPTBuC6wCH1LTOY91EO5hQ==", 359 | "cpu": [ 360 | "x64" 361 | ], 362 | "dev": true, 363 | "optional": true, 364 | "os": [ 365 | "linux" 366 | ], 367 | "engines": { 368 | "node": ">=18" 369 | } 370 | }, 371 | "node_modules/@esbuild/netbsd-x64": { 372 | "version": "0.23.1", 373 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.23.1.tgz", 374 | "integrity": "sha512-aevEkCNu7KlPRpYLjwmdcuNz6bDFiE7Z8XC4CPqExjTvrHugh28QzUXVOZtiYghciKUacNktqxdpymplil1beA==", 375 | "cpu": [ 376 | "x64" 377 | ], 378 | "dev": true, 379 | "optional": true, 380 | "os": [ 381 | "netbsd" 382 | ], 383 | "engines": { 384 | "node": ">=18" 385 | } 386 | }, 387 | "node_modules/@esbuild/openbsd-arm64": { 388 | "version": "0.23.1", 389 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.23.1.tgz", 390 | "integrity": "sha512-3x37szhLexNA4bXhLrCC/LImN/YtWis6WXr1VESlfVtVeoFJBRINPJ3f0a/6LV8zpikqoUg4hyXw0sFBt5Cr+Q==", 391 | "cpu": [ 392 | "arm64" 393 | ], 394 | "dev": true, 395 | "optional": true, 396 | "os": [ 397 | "openbsd" 398 | ], 399 | "engines": { 400 | "node": ">=18" 401 | } 402 | }, 403 | "node_modules/@esbuild/openbsd-x64": { 404 | "version": "0.23.1", 405 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.23.1.tgz", 406 | "integrity": "sha512-aY2gMmKmPhxfU+0EdnN+XNtGbjfQgwZj43k8G3fyrDM/UdZww6xrWxmDkuz2eCZchqVeABjV5BpildOrUbBTqA==", 407 | "cpu": [ 408 | "x64" 409 | ], 410 | "dev": true, 411 | "optional": true, 412 | "os": [ 413 | "openbsd" 414 | ], 415 | "engines": { 416 | "node": ">=18" 417 | } 418 | }, 419 | "node_modules/@esbuild/sunos-x64": { 420 | "version": "0.23.1", 421 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.23.1.tgz", 422 | "integrity": "sha512-RBRT2gqEl0IKQABT4XTj78tpk9v7ehp+mazn2HbUeZl1YMdaGAQqhapjGTCe7uw7y0frDi4gS0uHzhvpFuI1sA==", 423 | "cpu": [ 424 | "x64" 425 | ], 426 | "dev": true, 427 | "optional": true, 428 | "os": [ 429 | "sunos" 430 | ], 431 | "engines": { 432 | "node": ">=18" 433 | } 434 | }, 435 | "node_modules/@esbuild/win32-arm64": { 436 | "version": "0.23.1", 437 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.23.1.tgz", 438 | "integrity": "sha512-4O+gPR5rEBe2FpKOVyiJ7wNDPA8nGzDuJ6gN4okSA1gEOYZ67N8JPk58tkWtdtPeLz7lBnY6I5L3jdsr3S+A6A==", 439 | "cpu": [ 440 | "arm64" 441 | ], 442 | "dev": true, 443 | "optional": true, 444 | "os": [ 445 | "win32" 446 | ], 447 | "engines": { 448 | "node": ">=18" 449 | } 450 | }, 451 | "node_modules/@esbuild/win32-ia32": { 452 | "version": "0.23.1", 453 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.23.1.tgz", 454 | "integrity": "sha512-BcaL0Vn6QwCwre3Y717nVHZbAa4UBEigzFm6VdsVdT/MbZ38xoj1X9HPkZhbmaBGUD1W8vxAfffbDe8bA6AKnQ==", 455 | "cpu": [ 456 | "ia32" 457 | ], 458 | "dev": true, 459 | "optional": true, 460 | "os": [ 461 | "win32" 462 | ], 463 | "engines": { 464 | "node": ">=18" 465 | } 466 | }, 467 | "node_modules/@esbuild/win32-x64": { 468 | "version": "0.23.1", 469 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.23.1.tgz", 470 | "integrity": "sha512-BHpFFeslkWrXWyUPnbKm+xYYVYruCinGcftSBaa8zoF9hZO4BcSCFUvHVTtzpIY6YzUnYtuEhZ+C9iEXjxnasg==", 471 | "cpu": [ 472 | "x64" 473 | ], 474 | "dev": true, 475 | "optional": true, 476 | "os": [ 477 | "win32" 478 | ], 479 | "engines": { 480 | "node": ">=18" 481 | } 482 | }, 483 | "node_modules/@isaacs/cliui": { 484 | "version": "8.0.2", 485 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", 486 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", 487 | "dev": true, 488 | "dependencies": { 489 | "string-width": "^5.1.2", 490 | "string-width-cjs": "npm:string-width@^4.2.0", 491 | "strip-ansi": "^7.0.1", 492 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", 493 | "wrap-ansi": "^8.1.0", 494 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" 495 | }, 496 | "engines": { 497 | "node": ">=12" 498 | } 499 | }, 500 | "node_modules/@istanbuljs/schema": { 501 | "version": "0.1.3", 502 | "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz", 503 | "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==", 504 | "dev": true, 505 | "engines": { 506 | "node": ">=8" 507 | } 508 | }, 509 | "node_modules/@jridgewell/gen-mapping": { 510 | "version": "0.3.5", 511 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", 512 | "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", 513 | "dev": true, 514 | "dependencies": { 515 | "@jridgewell/set-array": "^1.2.1", 516 | "@jridgewell/sourcemap-codec": "^1.4.10", 517 | "@jridgewell/trace-mapping": "^0.3.24" 518 | }, 519 | "engines": { 520 | "node": ">=6.0.0" 521 | } 522 | }, 523 | "node_modules/@jridgewell/resolve-uri": { 524 | "version": "3.1.1", 525 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", 526 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", 527 | "dev": true, 528 | "engines": { 529 | "node": ">=6.0.0" 530 | } 531 | }, 532 | "node_modules/@jridgewell/set-array": { 533 | "version": "1.2.1", 534 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", 535 | "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", 536 | "dev": true, 537 | "engines": { 538 | "node": ">=6.0.0" 539 | } 540 | }, 541 | "node_modules/@jridgewell/sourcemap-codec": { 542 | "version": "1.5.0", 543 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", 544 | "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==" 545 | }, 546 | "node_modules/@jridgewell/trace-mapping": { 547 | "version": "0.3.25", 548 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", 549 | "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", 550 | "dev": true, 551 | "dependencies": { 552 | "@jridgewell/resolve-uri": "^3.1.0", 553 | "@jridgewell/sourcemap-codec": "^1.4.14" 554 | } 555 | }, 556 | "node_modules/@nodelib/fs.scandir": { 557 | "version": "2.1.5", 558 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", 559 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", 560 | "dev": true, 561 | "dependencies": { 562 | "@nodelib/fs.stat": "2.0.5", 563 | "run-parallel": "^1.1.9" 564 | }, 565 | "engines": { 566 | "node": ">= 8" 567 | } 568 | }, 569 | "node_modules/@nodelib/fs.stat": { 570 | "version": "2.0.5", 571 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", 572 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", 573 | "dev": true, 574 | "engines": { 575 | "node": ">= 8" 576 | } 577 | }, 578 | "node_modules/@nodelib/fs.walk": { 579 | "version": "1.2.8", 580 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", 581 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", 582 | "dev": true, 583 | "dependencies": { 584 | "@nodelib/fs.scandir": "2.1.5", 585 | "fastq": "^1.6.0" 586 | }, 587 | "engines": { 588 | "node": ">= 8" 589 | } 590 | }, 591 | "node_modules/@one-ini/wasm": { 592 | "version": "0.1.1", 593 | "resolved": "https://registry.npmjs.org/@one-ini/wasm/-/wasm-0.1.1.tgz", 594 | "integrity": "sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==", 595 | "dev": true 596 | }, 597 | "node_modules/@pkgjs/parseargs": { 598 | "version": "0.11.0", 599 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", 600 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", 601 | "dev": true, 602 | "optional": true, 603 | "engines": { 604 | "node": ">=14" 605 | } 606 | }, 607 | "node_modules/@rollup/rollup-android-arm-eabi": { 608 | "version": "4.21.0", 609 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.21.0.tgz", 610 | "integrity": "sha512-WTWD8PfoSAJ+qL87lE7votj3syLavxunWhzCnx3XFxFiI/BA/r3X7MUM8dVrH8rb2r4AiO8jJsr3ZjdaftmnfA==", 611 | "cpu": [ 612 | "arm" 613 | ], 614 | "dev": true, 615 | "optional": true, 616 | "os": [ 617 | "android" 618 | ] 619 | }, 620 | "node_modules/@rollup/rollup-android-arm64": { 621 | "version": "4.21.0", 622 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.21.0.tgz", 623 | "integrity": "sha512-a1sR2zSK1B4eYkiZu17ZUZhmUQcKjk2/j9Me2IDjk1GHW7LB5Z35LEzj9iJch6gtUfsnvZs1ZNyDW2oZSThrkA==", 624 | "cpu": [ 625 | "arm64" 626 | ], 627 | "dev": true, 628 | "optional": true, 629 | "os": [ 630 | "android" 631 | ] 632 | }, 633 | "node_modules/@rollup/rollup-darwin-arm64": { 634 | "version": "4.21.0", 635 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.21.0.tgz", 636 | "integrity": "sha512-zOnKWLgDld/svhKO5PD9ozmL6roy5OQ5T4ThvdYZLpiOhEGY+dp2NwUmxK0Ld91LrbjrvtNAE0ERBwjqhZTRAA==", 637 | "cpu": [ 638 | "arm64" 639 | ], 640 | "dev": true, 641 | "optional": true, 642 | "os": [ 643 | "darwin" 644 | ] 645 | }, 646 | "node_modules/@rollup/rollup-darwin-x64": { 647 | "version": "4.21.0", 648 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.21.0.tgz", 649 | "integrity": "sha512-7doS8br0xAkg48SKE2QNtMSFPFUlRdw9+votl27MvT46vo44ATBmdZdGysOevNELmZlfd+NEa0UYOA8f01WSrg==", 650 | "cpu": [ 651 | "x64" 652 | ], 653 | "dev": true, 654 | "optional": true, 655 | "os": [ 656 | "darwin" 657 | ] 658 | }, 659 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": { 660 | "version": "4.21.0", 661 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.21.0.tgz", 662 | "integrity": "sha512-pWJsfQjNWNGsoCq53KjMtwdJDmh/6NubwQcz52aEwLEuvx08bzcy6tOUuawAOncPnxz/3siRtd8hiQ32G1y8VA==", 663 | "cpu": [ 664 | "arm" 665 | ], 666 | "dev": true, 667 | "optional": true, 668 | "os": [ 669 | "linux" 670 | ] 671 | }, 672 | "node_modules/@rollup/rollup-linux-arm-musleabihf": { 673 | "version": "4.21.0", 674 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.21.0.tgz", 675 | "integrity": "sha512-efRIANsz3UHZrnZXuEvxS9LoCOWMGD1rweciD6uJQIx2myN3a8Im1FafZBzh7zk1RJ6oKcR16dU3UPldaKd83w==", 676 | "cpu": [ 677 | "arm" 678 | ], 679 | "dev": true, 680 | "optional": true, 681 | "os": [ 682 | "linux" 683 | ] 684 | }, 685 | "node_modules/@rollup/rollup-linux-arm64-gnu": { 686 | "version": "4.21.0", 687 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.21.0.tgz", 688 | "integrity": "sha512-ZrPhydkTVhyeGTW94WJ8pnl1uroqVHM3j3hjdquwAcWnmivjAwOYjTEAuEDeJvGX7xv3Z9GAvrBkEzCgHq9U1w==", 689 | "cpu": [ 690 | "arm64" 691 | ], 692 | "dev": true, 693 | "optional": true, 694 | "os": [ 695 | "linux" 696 | ] 697 | }, 698 | "node_modules/@rollup/rollup-linux-arm64-musl": { 699 | "version": "4.21.0", 700 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.21.0.tgz", 701 | "integrity": "sha512-cfaupqd+UEFeURmqNP2eEvXqgbSox/LHOyN9/d2pSdV8xTrjdg3NgOFJCtc1vQ/jEke1qD0IejbBfxleBPHnPw==", 702 | "cpu": [ 703 | "arm64" 704 | ], 705 | "dev": true, 706 | "optional": true, 707 | "os": [ 708 | "linux" 709 | ] 710 | }, 711 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { 712 | "version": "4.21.0", 713 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.21.0.tgz", 714 | "integrity": "sha512-ZKPan1/RvAhrUylwBXC9t7B2hXdpb/ufeu22pG2psV7RN8roOfGurEghw1ySmX/CmDDHNTDDjY3lo9hRlgtaHg==", 715 | "cpu": [ 716 | "ppc64" 717 | ], 718 | "dev": true, 719 | "optional": true, 720 | "os": [ 721 | "linux" 722 | ] 723 | }, 724 | "node_modules/@rollup/rollup-linux-riscv64-gnu": { 725 | "version": "4.21.0", 726 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.21.0.tgz", 727 | "integrity": "sha512-H1eRaCwd5E8eS8leiS+o/NqMdljkcb1d6r2h4fKSsCXQilLKArq6WS7XBLDu80Yz+nMqHVFDquwcVrQmGr28rg==", 728 | "cpu": [ 729 | "riscv64" 730 | ], 731 | "dev": true, 732 | "optional": true, 733 | "os": [ 734 | "linux" 735 | ] 736 | }, 737 | "node_modules/@rollup/rollup-linux-s390x-gnu": { 738 | "version": "4.21.0", 739 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.21.0.tgz", 740 | "integrity": "sha512-zJ4hA+3b5tu8u7L58CCSI0A9N1vkfwPhWd/puGXwtZlsB5bTkwDNW/+JCU84+3QYmKpLi+XvHdmrlwUwDA6kqw==", 741 | "cpu": [ 742 | "s390x" 743 | ], 744 | "dev": true, 745 | "optional": true, 746 | "os": [ 747 | "linux" 748 | ] 749 | }, 750 | "node_modules/@rollup/rollup-linux-x64-gnu": { 751 | "version": "4.21.0", 752 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.21.0.tgz", 753 | "integrity": "sha512-e2hrvElFIh6kW/UNBQK/kzqMNY5mO+67YtEh9OA65RM5IJXYTWiXjX6fjIiPaqOkBthYF1EqgiZ6OXKcQsM0hg==", 754 | "cpu": [ 755 | "x64" 756 | ], 757 | "dev": true, 758 | "optional": true, 759 | "os": [ 760 | "linux" 761 | ] 762 | }, 763 | "node_modules/@rollup/rollup-linux-x64-musl": { 764 | "version": "4.21.0", 765 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.21.0.tgz", 766 | "integrity": "sha512-1vvmgDdUSebVGXWX2lIcgRebqfQSff0hMEkLJyakQ9JQUbLDkEaMsPTLOmyccyC6IJ/l3FZuJbmrBw/u0A0uCQ==", 767 | "cpu": [ 768 | "x64" 769 | ], 770 | "dev": true, 771 | "optional": true, 772 | "os": [ 773 | "linux" 774 | ] 775 | }, 776 | "node_modules/@rollup/rollup-win32-arm64-msvc": { 777 | "version": "4.21.0", 778 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.21.0.tgz", 779 | "integrity": "sha512-s5oFkZ/hFcrlAyBTONFY1TWndfyre1wOMwU+6KCpm/iatybvrRgmZVM+vCFwxmC5ZhdlgfE0N4XorsDpi7/4XQ==", 780 | "cpu": [ 781 | "arm64" 782 | ], 783 | "dev": true, 784 | "optional": true, 785 | "os": [ 786 | "win32" 787 | ] 788 | }, 789 | "node_modules/@rollup/rollup-win32-ia32-msvc": { 790 | "version": "4.21.0", 791 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.21.0.tgz", 792 | "integrity": "sha512-G9+TEqRnAA6nbpqyUqgTiopmnfgnMkR3kMukFBDsiyy23LZvUCpiUwjTRx6ezYCjJODXrh52rBR9oXvm+Fp5wg==", 793 | "cpu": [ 794 | "ia32" 795 | ], 796 | "dev": true, 797 | "optional": true, 798 | "os": [ 799 | "win32" 800 | ] 801 | }, 802 | "node_modules/@rollup/rollup-win32-x64-msvc": { 803 | "version": "4.21.0", 804 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.21.0.tgz", 805 | "integrity": "sha512-2jsCDZwtQvRhejHLfZ1JY6w6kEuEtfF9nzYsZxzSlNVKDX+DpsDJ+Rbjkm74nvg2rdx0gwBS+IMdvwJuq3S9pQ==", 806 | "cpu": [ 807 | "x64" 808 | ], 809 | "dev": true, 810 | "optional": true, 811 | "os": [ 812 | "win32" 813 | ] 814 | }, 815 | "node_modules/@types/estree": { 816 | "version": "1.0.5", 817 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", 818 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", 819 | "dev": true 820 | }, 821 | "node_modules/@vitest/coverage-v8": { 822 | "version": "2.0.5", 823 | "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-2.0.5.tgz", 824 | "integrity": "sha512-qeFcySCg5FLO2bHHSa0tAZAOnAUbp4L6/A5JDuj9+bt53JREl8hpLjLHEWF0e/gWc8INVpJaqA7+Ene2rclpZg==", 825 | "dev": true, 826 | "dependencies": { 827 | "@ampproject/remapping": "^2.3.0", 828 | "@bcoe/v8-coverage": "^0.2.3", 829 | "debug": "^4.3.5", 830 | "istanbul-lib-coverage": "^3.2.2", 831 | "istanbul-lib-report": "^3.0.1", 832 | "istanbul-lib-source-maps": "^5.0.6", 833 | "istanbul-reports": "^3.1.7", 834 | "magic-string": "^0.30.10", 835 | "magicast": "^0.3.4", 836 | "std-env": "^3.7.0", 837 | "test-exclude": "^7.0.1", 838 | "tinyrainbow": "^1.2.0" 839 | }, 840 | "funding": { 841 | "url": "https://opencollective.com/vitest" 842 | }, 843 | "peerDependencies": { 844 | "vitest": "2.0.5" 845 | } 846 | }, 847 | "node_modules/@vitest/expect": { 848 | "version": "2.0.5", 849 | "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.0.5.tgz", 850 | "integrity": "sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==", 851 | "dev": true, 852 | "dependencies": { 853 | "@vitest/spy": "2.0.5", 854 | "@vitest/utils": "2.0.5", 855 | "chai": "^5.1.1", 856 | "tinyrainbow": "^1.2.0" 857 | }, 858 | "funding": { 859 | "url": "https://opencollective.com/vitest" 860 | } 861 | }, 862 | "node_modules/@vitest/pretty-format": { 863 | "version": "2.0.5", 864 | "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.0.5.tgz", 865 | "integrity": "sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==", 866 | "dev": true, 867 | "dependencies": { 868 | "tinyrainbow": "^1.2.0" 869 | }, 870 | "funding": { 871 | "url": "https://opencollective.com/vitest" 872 | } 873 | }, 874 | "node_modules/@vitest/runner": { 875 | "version": "2.0.5", 876 | "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.0.5.tgz", 877 | "integrity": "sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==", 878 | "dev": true, 879 | "dependencies": { 880 | "@vitest/utils": "2.0.5", 881 | "pathe": "^1.1.2" 882 | }, 883 | "funding": { 884 | "url": "https://opencollective.com/vitest" 885 | } 886 | }, 887 | "node_modules/@vitest/snapshot": { 888 | "version": "2.0.5", 889 | "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.0.5.tgz", 890 | "integrity": "sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==", 891 | "dev": true, 892 | "dependencies": { 893 | "@vitest/pretty-format": "2.0.5", 894 | "magic-string": "^0.30.10", 895 | "pathe": "^1.1.2" 896 | }, 897 | "funding": { 898 | "url": "https://opencollective.com/vitest" 899 | } 900 | }, 901 | "node_modules/@vitest/spy": { 902 | "version": "2.0.5", 903 | "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.0.5.tgz", 904 | "integrity": "sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==", 905 | "dev": true, 906 | "dependencies": { 907 | "tinyspy": "^3.0.0" 908 | }, 909 | "funding": { 910 | "url": "https://opencollective.com/vitest" 911 | } 912 | }, 913 | "node_modules/@vitest/utils": { 914 | "version": "2.0.5", 915 | "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.0.5.tgz", 916 | "integrity": "sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==", 917 | "dev": true, 918 | "dependencies": { 919 | "@vitest/pretty-format": "2.0.5", 920 | "estree-walker": "^3.0.3", 921 | "loupe": "^3.1.1", 922 | "tinyrainbow": "^1.2.0" 923 | }, 924 | "funding": { 925 | "url": "https://opencollective.com/vitest" 926 | } 927 | }, 928 | "node_modules/@vue/compiler-core": { 929 | "version": "3.4.38", 930 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.38.tgz", 931 | "integrity": "sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==", 932 | "peer": true, 933 | "dependencies": { 934 | "@babel/parser": "^7.24.7", 935 | "@vue/shared": "3.4.38", 936 | "entities": "^4.5.0", 937 | "estree-walker": "^2.0.2", 938 | "source-map-js": "^1.2.0" 939 | } 940 | }, 941 | "node_modules/@vue/compiler-core/node_modules/estree-walker": { 942 | "version": "2.0.2", 943 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 944 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 945 | "peer": true 946 | }, 947 | "node_modules/@vue/compiler-dom": { 948 | "version": "3.4.38", 949 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.38.tgz", 950 | "integrity": "sha512-Osc/c7ABsHXTsETLgykcOwIxFktHfGSUDkb05V61rocEfsFDcjDLH/IHJSNJP+/Sv9KeN2Lx1V6McZzlSb9EhQ==", 951 | "peer": true, 952 | "dependencies": { 953 | "@vue/compiler-core": "3.4.38", 954 | "@vue/shared": "3.4.38" 955 | } 956 | }, 957 | "node_modules/@vue/compiler-sfc": { 958 | "version": "3.4.38", 959 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.38.tgz", 960 | "integrity": "sha512-s5QfZ+9PzPh3T5H4hsQDJtI8x7zdJaew/dCGgqZ2630XdzaZ3AD8xGZfBqpT8oaD/p2eedd+pL8tD5vvt5ZYJQ==", 961 | "peer": true, 962 | "dependencies": { 963 | "@babel/parser": "^7.24.7", 964 | "@vue/compiler-core": "3.4.38", 965 | "@vue/compiler-dom": "3.4.38", 966 | "@vue/compiler-ssr": "3.4.38", 967 | "@vue/shared": "3.4.38", 968 | "estree-walker": "^2.0.2", 969 | "magic-string": "^0.30.10", 970 | "postcss": "^8.4.40", 971 | "source-map-js": "^1.2.0" 972 | } 973 | }, 974 | "node_modules/@vue/compiler-sfc/node_modules/estree-walker": { 975 | "version": "2.0.2", 976 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", 977 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", 978 | "peer": true 979 | }, 980 | "node_modules/@vue/compiler-ssr": { 981 | "version": "3.4.38", 982 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.38.tgz", 983 | "integrity": "sha512-YXznKFQ8dxYpAz9zLuVvfcXhc31FSPFDcqr0kyujbOwNhlmaNvL2QfIy+RZeJgSn5Fk54CWoEUeW+NVBAogGaw==", 984 | "peer": true, 985 | "dependencies": { 986 | "@vue/compiler-dom": "3.4.38", 987 | "@vue/shared": "3.4.38" 988 | } 989 | }, 990 | "node_modules/@vue/reactivity": { 991 | "version": "3.4.38", 992 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.38.tgz", 993 | "integrity": "sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==", 994 | "peer": true, 995 | "dependencies": { 996 | "@vue/shared": "3.4.38" 997 | } 998 | }, 999 | "node_modules/@vue/runtime-core": { 1000 | "version": "3.4.38", 1001 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.38.tgz", 1002 | "integrity": "sha512-21z3wA99EABtuf+O3IhdxP0iHgkBs1vuoCAsCKLVJPEjpVqvblwBnTj42vzHRlWDCyxu9ptDm7sI2ZMcWrQqlA==", 1003 | "peer": true, 1004 | "dependencies": { 1005 | "@vue/reactivity": "3.4.38", 1006 | "@vue/shared": "3.4.38" 1007 | } 1008 | }, 1009 | "node_modules/@vue/runtime-dom": { 1010 | "version": "3.4.38", 1011 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.38.tgz", 1012 | "integrity": "sha512-afZzmUreU7vKwKsV17H1NDThEEmdYI+GCAK/KY1U957Ig2NATPVjCROv61R19fjZNzMmiU03n79OMnXyJVN0UA==", 1013 | "peer": true, 1014 | "dependencies": { 1015 | "@vue/reactivity": "3.4.38", 1016 | "@vue/runtime-core": "3.4.38", 1017 | "@vue/shared": "3.4.38", 1018 | "csstype": "^3.1.3" 1019 | } 1020 | }, 1021 | "node_modules/@vue/server-renderer": { 1022 | "version": "3.4.38", 1023 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.38.tgz", 1024 | "integrity": "sha512-NggOTr82FbPEkkUvBm4fTGcwUY8UuTsnWC/L2YZBmvaQ4C4Jl/Ao4HHTB+l7WnFCt5M/dN3l0XLuyjzswGYVCA==", 1025 | "peer": true, 1026 | "dependencies": { 1027 | "@vue/compiler-ssr": "3.4.38", 1028 | "@vue/shared": "3.4.38" 1029 | }, 1030 | "peerDependencies": { 1031 | "vue": "3.4.38" 1032 | } 1033 | }, 1034 | "node_modules/@vue/shared": { 1035 | "version": "3.4.38", 1036 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.38.tgz", 1037 | "integrity": "sha512-q0xCiLkuWWQLzVrecPb0RMsNWyxICOjPrcrwxTUEHb1fsnvni4dcuyG7RT/Ie7VPTvnjzIaWzRMUBsrqNj/hhw==", 1038 | "peer": true 1039 | }, 1040 | "node_modules/@vue/test-utils": { 1041 | "version": "2.4.6", 1042 | "resolved": "https://registry.npmjs.org/@vue/test-utils/-/test-utils-2.4.6.tgz", 1043 | "integrity": "sha512-FMxEjOpYNYiFe0GkaHsnJPXFHxQ6m4t8vI/ElPGpMWxZKpmRvQ33OIrvRXemy6yha03RxhOlQuy+gZMC3CQSow==", 1044 | "dev": true, 1045 | "dependencies": { 1046 | "js-beautify": "^1.14.9", 1047 | "vue-component-type-helpers": "^2.0.0" 1048 | } 1049 | }, 1050 | "node_modules/abbrev": { 1051 | "version": "1.1.1", 1052 | "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", 1053 | "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", 1054 | "dev": true 1055 | }, 1056 | "node_modules/agent-base": { 1057 | "version": "7.1.1", 1058 | "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", 1059 | "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", 1060 | "dev": true, 1061 | "dependencies": { 1062 | "debug": "^4.3.4" 1063 | }, 1064 | "engines": { 1065 | "node": ">= 14" 1066 | } 1067 | }, 1068 | "node_modules/ansi-regex": { 1069 | "version": "6.0.1", 1070 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", 1071 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", 1072 | "dev": true, 1073 | "engines": { 1074 | "node": ">=12" 1075 | }, 1076 | "funding": { 1077 | "url": "https://github.com/chalk/ansi-regex?sponsor=1" 1078 | } 1079 | }, 1080 | "node_modules/ansi-styles": { 1081 | "version": "6.2.1", 1082 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", 1083 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", 1084 | "dev": true, 1085 | "engines": { 1086 | "node": ">=12" 1087 | }, 1088 | "funding": { 1089 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 1090 | } 1091 | }, 1092 | "node_modules/any-promise": { 1093 | "version": "1.3.0", 1094 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", 1095 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", 1096 | "dev": true 1097 | }, 1098 | "node_modules/anymatch": { 1099 | "version": "3.1.3", 1100 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", 1101 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", 1102 | "dev": true, 1103 | "dependencies": { 1104 | "normalize-path": "^3.0.0", 1105 | "picomatch": "^2.0.4" 1106 | }, 1107 | "engines": { 1108 | "node": ">= 8" 1109 | } 1110 | }, 1111 | "node_modules/array-union": { 1112 | "version": "2.1.0", 1113 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", 1114 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", 1115 | "dev": true, 1116 | "engines": { 1117 | "node": ">=8" 1118 | } 1119 | }, 1120 | "node_modules/assertion-error": { 1121 | "version": "2.0.1", 1122 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", 1123 | "integrity": "sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==", 1124 | "dev": true, 1125 | "engines": { 1126 | "node": ">=12" 1127 | } 1128 | }, 1129 | "node_modules/asynckit": { 1130 | "version": "0.4.0", 1131 | "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", 1132 | "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", 1133 | "dev": true 1134 | }, 1135 | "node_modules/balanced-match": { 1136 | "version": "1.0.2", 1137 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", 1138 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", 1139 | "dev": true 1140 | }, 1141 | "node_modules/binary-extensions": { 1142 | "version": "2.3.0", 1143 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", 1144 | "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", 1145 | "dev": true, 1146 | "engines": { 1147 | "node": ">=8" 1148 | }, 1149 | "funding": { 1150 | "url": "https://github.com/sponsors/sindresorhus" 1151 | } 1152 | }, 1153 | "node_modules/brace-expansion": { 1154 | "version": "2.0.1", 1155 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", 1156 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", 1157 | "dev": true, 1158 | "dependencies": { 1159 | "balanced-match": "^1.0.0" 1160 | } 1161 | }, 1162 | "node_modules/braces": { 1163 | "version": "3.0.3", 1164 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", 1165 | "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", 1166 | "dev": true, 1167 | "dependencies": { 1168 | "fill-range": "^7.1.1" 1169 | }, 1170 | "engines": { 1171 | "node": ">=8" 1172 | } 1173 | }, 1174 | "node_modules/bundle-require": { 1175 | "version": "5.0.0", 1176 | "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-5.0.0.tgz", 1177 | "integrity": "sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==", 1178 | "dev": true, 1179 | "dependencies": { 1180 | "load-tsconfig": "^0.2.3" 1181 | }, 1182 | "engines": { 1183 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 1184 | }, 1185 | "peerDependencies": { 1186 | "esbuild": ">=0.18" 1187 | } 1188 | }, 1189 | "node_modules/cac": { 1190 | "version": "6.7.14", 1191 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz", 1192 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==", 1193 | "dev": true, 1194 | "engines": { 1195 | "node": ">=8" 1196 | } 1197 | }, 1198 | "node_modules/chai": { 1199 | "version": "5.1.1", 1200 | "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.1.tgz", 1201 | "integrity": "sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==", 1202 | "dev": true, 1203 | "dependencies": { 1204 | "assertion-error": "^2.0.1", 1205 | "check-error": "^2.1.1", 1206 | "deep-eql": "^5.0.1", 1207 | "loupe": "^3.1.0", 1208 | "pathval": "^2.0.0" 1209 | }, 1210 | "engines": { 1211 | "node": ">=12" 1212 | } 1213 | }, 1214 | "node_modules/check-error": { 1215 | "version": "2.1.1", 1216 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-2.1.1.tgz", 1217 | "integrity": "sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==", 1218 | "dev": true, 1219 | "engines": { 1220 | "node": ">= 16" 1221 | } 1222 | }, 1223 | "node_modules/chokidar": { 1224 | "version": "3.6.0", 1225 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", 1226 | "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", 1227 | "dev": true, 1228 | "dependencies": { 1229 | "anymatch": "~3.1.2", 1230 | "braces": "~3.0.2", 1231 | "glob-parent": "~5.1.2", 1232 | "is-binary-path": "~2.1.0", 1233 | "is-glob": "~4.0.1", 1234 | "normalize-path": "~3.0.0", 1235 | "readdirp": "~3.6.0" 1236 | }, 1237 | "engines": { 1238 | "node": ">= 8.10.0" 1239 | }, 1240 | "funding": { 1241 | "url": "https://paulmillr.com/funding/" 1242 | }, 1243 | "optionalDependencies": { 1244 | "fsevents": "~2.3.2" 1245 | } 1246 | }, 1247 | "node_modules/color-convert": { 1248 | "version": "2.0.1", 1249 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", 1250 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", 1251 | "dev": true, 1252 | "dependencies": { 1253 | "color-name": "~1.1.4" 1254 | }, 1255 | "engines": { 1256 | "node": ">=7.0.0" 1257 | } 1258 | }, 1259 | "node_modules/color-name": { 1260 | "version": "1.1.4", 1261 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", 1262 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", 1263 | "dev": true 1264 | }, 1265 | "node_modules/combined-stream": { 1266 | "version": "1.0.8", 1267 | "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", 1268 | "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", 1269 | "dev": true, 1270 | "dependencies": { 1271 | "delayed-stream": "~1.0.0" 1272 | }, 1273 | "engines": { 1274 | "node": ">= 0.8" 1275 | } 1276 | }, 1277 | "node_modules/commander": { 1278 | "version": "10.0.1", 1279 | "resolved": "https://registry.npmjs.org/commander/-/commander-10.0.1.tgz", 1280 | "integrity": "sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==", 1281 | "dev": true, 1282 | "engines": { 1283 | "node": ">=14" 1284 | } 1285 | }, 1286 | "node_modules/config-chain": { 1287 | "version": "1.1.13", 1288 | "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", 1289 | "integrity": "sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==", 1290 | "dev": true, 1291 | "dependencies": { 1292 | "ini": "^1.3.4", 1293 | "proto-list": "~1.2.1" 1294 | } 1295 | }, 1296 | "node_modules/consola": { 1297 | "version": "3.2.3", 1298 | "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", 1299 | "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", 1300 | "dev": true, 1301 | "engines": { 1302 | "node": "^14.18.0 || >=16.10.0" 1303 | } 1304 | }, 1305 | "node_modules/cross-spawn": { 1306 | "version": "7.0.3", 1307 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", 1308 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", 1309 | "dev": true, 1310 | "dependencies": { 1311 | "path-key": "^3.1.0", 1312 | "shebang-command": "^2.0.0", 1313 | "which": "^2.0.1" 1314 | }, 1315 | "engines": { 1316 | "node": ">= 8" 1317 | } 1318 | }, 1319 | "node_modules/cssstyle": { 1320 | "version": "4.0.1", 1321 | "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", 1322 | "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", 1323 | "dev": true, 1324 | "dependencies": { 1325 | "rrweb-cssom": "^0.6.0" 1326 | }, 1327 | "engines": { 1328 | "node": ">=18" 1329 | } 1330 | }, 1331 | "node_modules/csstype": { 1332 | "version": "3.1.3", 1333 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz", 1334 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==", 1335 | "peer": true 1336 | }, 1337 | "node_modules/data-urls": { 1338 | "version": "5.0.0", 1339 | "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-5.0.0.tgz", 1340 | "integrity": "sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==", 1341 | "dev": true, 1342 | "dependencies": { 1343 | "whatwg-mimetype": "^4.0.0", 1344 | "whatwg-url": "^14.0.0" 1345 | }, 1346 | "engines": { 1347 | "node": ">=18" 1348 | } 1349 | }, 1350 | "node_modules/debug": { 1351 | "version": "4.3.6", 1352 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.6.tgz", 1353 | "integrity": "sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==", 1354 | "dev": true, 1355 | "dependencies": { 1356 | "ms": "2.1.2" 1357 | }, 1358 | "engines": { 1359 | "node": ">=6.0" 1360 | }, 1361 | "peerDependenciesMeta": { 1362 | "supports-color": { 1363 | "optional": true 1364 | } 1365 | } 1366 | }, 1367 | "node_modules/decimal.js": { 1368 | "version": "10.4.3", 1369 | "resolved": "https://registry.npmjs.org/decimal.js/-/decimal.js-10.4.3.tgz", 1370 | "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", 1371 | "dev": true 1372 | }, 1373 | "node_modules/deep-eql": { 1374 | "version": "5.0.2", 1375 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", 1376 | "integrity": "sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==", 1377 | "dev": true, 1378 | "engines": { 1379 | "node": ">=6" 1380 | } 1381 | }, 1382 | "node_modules/delayed-stream": { 1383 | "version": "1.0.0", 1384 | "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", 1385 | "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", 1386 | "dev": true, 1387 | "engines": { 1388 | "node": ">=0.4.0" 1389 | } 1390 | }, 1391 | "node_modules/dir-glob": { 1392 | "version": "3.0.1", 1393 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", 1394 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", 1395 | "dev": true, 1396 | "dependencies": { 1397 | "path-type": "^4.0.0" 1398 | }, 1399 | "engines": { 1400 | "node": ">=8" 1401 | } 1402 | }, 1403 | "node_modules/eastasianwidth": { 1404 | "version": "0.2.0", 1405 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", 1406 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", 1407 | "dev": true 1408 | }, 1409 | "node_modules/editorconfig": { 1410 | "version": "1.0.4", 1411 | "resolved": "https://registry.npmjs.org/editorconfig/-/editorconfig-1.0.4.tgz", 1412 | "integrity": "sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==", 1413 | "dev": true, 1414 | "dependencies": { 1415 | "@one-ini/wasm": "0.1.1", 1416 | "commander": "^10.0.0", 1417 | "minimatch": "9.0.1", 1418 | "semver": "^7.5.3" 1419 | }, 1420 | "bin": { 1421 | "editorconfig": "bin/editorconfig" 1422 | }, 1423 | "engines": { 1424 | "node": ">=14" 1425 | } 1426 | }, 1427 | "node_modules/emoji-regex": { 1428 | "version": "9.2.2", 1429 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", 1430 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", 1431 | "dev": true 1432 | }, 1433 | "node_modules/entities": { 1434 | "version": "4.5.0", 1435 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", 1436 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", 1437 | "engines": { 1438 | "node": ">=0.12" 1439 | }, 1440 | "funding": { 1441 | "url": "https://github.com/fb55/entities?sponsor=1" 1442 | } 1443 | }, 1444 | "node_modules/esbuild": { 1445 | "version": "0.23.1", 1446 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.23.1.tgz", 1447 | "integrity": "sha512-VVNz/9Sa0bs5SELtn3f7qhJCDPCF5oMEl5cO9/SSinpE9hbPVvxbd572HH5AKiP7WD8INO53GgfDDhRjkylHEg==", 1448 | "dev": true, 1449 | "hasInstallScript": true, 1450 | "bin": { 1451 | "esbuild": "bin/esbuild" 1452 | }, 1453 | "engines": { 1454 | "node": ">=18" 1455 | }, 1456 | "optionalDependencies": { 1457 | "@esbuild/aix-ppc64": "0.23.1", 1458 | "@esbuild/android-arm": "0.23.1", 1459 | "@esbuild/android-arm64": "0.23.1", 1460 | "@esbuild/android-x64": "0.23.1", 1461 | "@esbuild/darwin-arm64": "0.23.1", 1462 | "@esbuild/darwin-x64": "0.23.1", 1463 | "@esbuild/freebsd-arm64": "0.23.1", 1464 | "@esbuild/freebsd-x64": "0.23.1", 1465 | "@esbuild/linux-arm": "0.23.1", 1466 | "@esbuild/linux-arm64": "0.23.1", 1467 | "@esbuild/linux-ia32": "0.23.1", 1468 | "@esbuild/linux-loong64": "0.23.1", 1469 | "@esbuild/linux-mips64el": "0.23.1", 1470 | "@esbuild/linux-ppc64": "0.23.1", 1471 | "@esbuild/linux-riscv64": "0.23.1", 1472 | "@esbuild/linux-s390x": "0.23.1", 1473 | "@esbuild/linux-x64": "0.23.1", 1474 | "@esbuild/netbsd-x64": "0.23.1", 1475 | "@esbuild/openbsd-arm64": "0.23.1", 1476 | "@esbuild/openbsd-x64": "0.23.1", 1477 | "@esbuild/sunos-x64": "0.23.1", 1478 | "@esbuild/win32-arm64": "0.23.1", 1479 | "@esbuild/win32-ia32": "0.23.1", 1480 | "@esbuild/win32-x64": "0.23.1" 1481 | } 1482 | }, 1483 | "node_modules/estree-walker": { 1484 | "version": "3.0.3", 1485 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", 1486 | "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", 1487 | "dev": true, 1488 | "dependencies": { 1489 | "@types/estree": "^1.0.0" 1490 | } 1491 | }, 1492 | "node_modules/execa": { 1493 | "version": "5.1.1", 1494 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", 1495 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", 1496 | "dev": true, 1497 | "dependencies": { 1498 | "cross-spawn": "^7.0.3", 1499 | "get-stream": "^6.0.0", 1500 | "human-signals": "^2.1.0", 1501 | "is-stream": "^2.0.0", 1502 | "merge-stream": "^2.0.0", 1503 | "npm-run-path": "^4.0.1", 1504 | "onetime": "^5.1.2", 1505 | "signal-exit": "^3.0.3", 1506 | "strip-final-newline": "^2.0.0" 1507 | }, 1508 | "engines": { 1509 | "node": ">=10" 1510 | }, 1511 | "funding": { 1512 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 1513 | } 1514 | }, 1515 | "node_modules/fast-glob": { 1516 | "version": "3.3.1", 1517 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.1.tgz", 1518 | "integrity": "sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==", 1519 | "dev": true, 1520 | "dependencies": { 1521 | "@nodelib/fs.stat": "^2.0.2", 1522 | "@nodelib/fs.walk": "^1.2.3", 1523 | "glob-parent": "^5.1.2", 1524 | "merge2": "^1.3.0", 1525 | "micromatch": "^4.0.4" 1526 | }, 1527 | "engines": { 1528 | "node": ">=8.6.0" 1529 | } 1530 | }, 1531 | "node_modules/fastq": { 1532 | "version": "1.15.0", 1533 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz", 1534 | "integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==", 1535 | "dev": true, 1536 | "dependencies": { 1537 | "reusify": "^1.0.4" 1538 | } 1539 | }, 1540 | "node_modules/fill-range": { 1541 | "version": "7.1.1", 1542 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", 1543 | "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", 1544 | "dev": true, 1545 | "dependencies": { 1546 | "to-regex-range": "^5.0.1" 1547 | }, 1548 | "engines": { 1549 | "node": ">=8" 1550 | } 1551 | }, 1552 | "node_modules/foreground-child": { 1553 | "version": "3.3.0", 1554 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.0.tgz", 1555 | "integrity": "sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==", 1556 | "dev": true, 1557 | "dependencies": { 1558 | "cross-spawn": "^7.0.0", 1559 | "signal-exit": "^4.0.1" 1560 | }, 1561 | "engines": { 1562 | "node": ">=14" 1563 | }, 1564 | "funding": { 1565 | "url": "https://github.com/sponsors/isaacs" 1566 | } 1567 | }, 1568 | "node_modules/foreground-child/node_modules/signal-exit": { 1569 | "version": "4.1.0", 1570 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 1571 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 1572 | "dev": true, 1573 | "engines": { 1574 | "node": ">=14" 1575 | }, 1576 | "funding": { 1577 | "url": "https://github.com/sponsors/isaacs" 1578 | } 1579 | }, 1580 | "node_modules/form-data": { 1581 | "version": "4.0.0", 1582 | "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", 1583 | "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", 1584 | "dev": true, 1585 | "dependencies": { 1586 | "asynckit": "^0.4.0", 1587 | "combined-stream": "^1.0.8", 1588 | "mime-types": "^2.1.12" 1589 | }, 1590 | "engines": { 1591 | "node": ">= 6" 1592 | } 1593 | }, 1594 | "node_modules/fs.realpath": { 1595 | "version": "1.0.0", 1596 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", 1597 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", 1598 | "dev": true 1599 | }, 1600 | "node_modules/fsevents": { 1601 | "version": "2.3.3", 1602 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", 1603 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", 1604 | "dev": true, 1605 | "hasInstallScript": true, 1606 | "optional": true, 1607 | "os": [ 1608 | "darwin" 1609 | ], 1610 | "engines": { 1611 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0" 1612 | } 1613 | }, 1614 | "node_modules/get-func-name": { 1615 | "version": "2.0.2", 1616 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", 1617 | "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==", 1618 | "dev": true, 1619 | "engines": { 1620 | "node": "*" 1621 | } 1622 | }, 1623 | "node_modules/get-stream": { 1624 | "version": "6.0.1", 1625 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", 1626 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", 1627 | "dev": true, 1628 | "engines": { 1629 | "node": ">=10" 1630 | }, 1631 | "funding": { 1632 | "url": "https://github.com/sponsors/sindresorhus" 1633 | } 1634 | }, 1635 | "node_modules/glob": { 1636 | "version": "8.1.0", 1637 | "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", 1638 | "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", 1639 | "dev": true, 1640 | "dependencies": { 1641 | "fs.realpath": "^1.0.0", 1642 | "inflight": "^1.0.4", 1643 | "inherits": "2", 1644 | "minimatch": "^5.0.1", 1645 | "once": "^1.3.0" 1646 | }, 1647 | "engines": { 1648 | "node": ">=12" 1649 | }, 1650 | "funding": { 1651 | "url": "https://github.com/sponsors/isaacs" 1652 | } 1653 | }, 1654 | "node_modules/glob-parent": { 1655 | "version": "5.1.2", 1656 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", 1657 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", 1658 | "dev": true, 1659 | "dependencies": { 1660 | "is-glob": "^4.0.1" 1661 | }, 1662 | "engines": { 1663 | "node": ">= 6" 1664 | } 1665 | }, 1666 | "node_modules/glob/node_modules/minimatch": { 1667 | "version": "5.1.6", 1668 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", 1669 | "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", 1670 | "dev": true, 1671 | "dependencies": { 1672 | "brace-expansion": "^2.0.1" 1673 | }, 1674 | "engines": { 1675 | "node": ">=10" 1676 | } 1677 | }, 1678 | "node_modules/globby": { 1679 | "version": "11.1.0", 1680 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", 1681 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", 1682 | "dev": true, 1683 | "dependencies": { 1684 | "array-union": "^2.1.0", 1685 | "dir-glob": "^3.0.1", 1686 | "fast-glob": "^3.2.9", 1687 | "ignore": "^5.2.0", 1688 | "merge2": "^1.4.1", 1689 | "slash": "^3.0.0" 1690 | }, 1691 | "engines": { 1692 | "node": ">=10" 1693 | }, 1694 | "funding": { 1695 | "url": "https://github.com/sponsors/sindresorhus" 1696 | } 1697 | }, 1698 | "node_modules/has-flag": { 1699 | "version": "4.0.0", 1700 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", 1701 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", 1702 | "dev": true, 1703 | "engines": { 1704 | "node": ">=8" 1705 | } 1706 | }, 1707 | "node_modules/html-encoding-sniffer": { 1708 | "version": "4.0.0", 1709 | "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-4.0.0.tgz", 1710 | "integrity": "sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==", 1711 | "dev": true, 1712 | "dependencies": { 1713 | "whatwg-encoding": "^3.1.1" 1714 | }, 1715 | "engines": { 1716 | "node": ">=18" 1717 | } 1718 | }, 1719 | "node_modules/html-escaper": { 1720 | "version": "2.0.2", 1721 | "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz", 1722 | "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==", 1723 | "dev": true 1724 | }, 1725 | "node_modules/http-proxy-agent": { 1726 | "version": "7.0.2", 1727 | "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz", 1728 | "integrity": "sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==", 1729 | "dev": true, 1730 | "dependencies": { 1731 | "agent-base": "^7.1.0", 1732 | "debug": "^4.3.4" 1733 | }, 1734 | "engines": { 1735 | "node": ">= 14" 1736 | } 1737 | }, 1738 | "node_modules/https-proxy-agent": { 1739 | "version": "7.0.5", 1740 | "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", 1741 | "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", 1742 | "dev": true, 1743 | "dependencies": { 1744 | "agent-base": "^7.0.2", 1745 | "debug": "4" 1746 | }, 1747 | "engines": { 1748 | "node": ">= 14" 1749 | } 1750 | }, 1751 | "node_modules/human-signals": { 1752 | "version": "2.1.0", 1753 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", 1754 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", 1755 | "dev": true, 1756 | "engines": { 1757 | "node": ">=10.17.0" 1758 | } 1759 | }, 1760 | "node_modules/i18next": { 1761 | "version": "23.4.4", 1762 | "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.4.4.tgz", 1763 | "integrity": "sha512-+c9B0txp/x1m5zn+QlwHaCS9vyFtmIAEXbVSFzwCX7vupm5V7va8F9cJGNJZ46X9ZtoGzhIiRC7eTIIh93TxPA==", 1764 | "funding": [ 1765 | { 1766 | "type": "individual", 1767 | "url": "https://locize.com" 1768 | }, 1769 | { 1770 | "type": "individual", 1771 | "url": "https://locize.com/i18next.html" 1772 | }, 1773 | { 1774 | "type": "individual", 1775 | "url": "https://www.i18next.com/how-to/faq#i18next-is-awesome.-how-can-i-support-the-project" 1776 | } 1777 | ], 1778 | "peer": true, 1779 | "dependencies": { 1780 | "@babel/runtime": "^7.22.5" 1781 | } 1782 | }, 1783 | "node_modules/iconv-lite": { 1784 | "version": "0.6.3", 1785 | "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", 1786 | "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", 1787 | "dev": true, 1788 | "dependencies": { 1789 | "safer-buffer": ">= 2.1.2 < 3.0.0" 1790 | }, 1791 | "engines": { 1792 | "node": ">=0.10.0" 1793 | } 1794 | }, 1795 | "node_modules/ignore": { 1796 | "version": "5.2.4", 1797 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.2.4.tgz", 1798 | "integrity": "sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==", 1799 | "dev": true, 1800 | "engines": { 1801 | "node": ">= 4" 1802 | } 1803 | }, 1804 | "node_modules/inflight": { 1805 | "version": "1.0.6", 1806 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", 1807 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", 1808 | "dev": true, 1809 | "dependencies": { 1810 | "once": "^1.3.0", 1811 | "wrappy": "1" 1812 | } 1813 | }, 1814 | "node_modules/inherits": { 1815 | "version": "2.0.4", 1816 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", 1817 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", 1818 | "dev": true 1819 | }, 1820 | "node_modules/ini": { 1821 | "version": "1.3.8", 1822 | "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", 1823 | "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", 1824 | "dev": true 1825 | }, 1826 | "node_modules/is-binary-path": { 1827 | "version": "2.1.0", 1828 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", 1829 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", 1830 | "dev": true, 1831 | "dependencies": { 1832 | "binary-extensions": "^2.0.0" 1833 | }, 1834 | "engines": { 1835 | "node": ">=8" 1836 | } 1837 | }, 1838 | "node_modules/is-extglob": { 1839 | "version": "2.1.1", 1840 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", 1841 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", 1842 | "dev": true, 1843 | "engines": { 1844 | "node": ">=0.10.0" 1845 | } 1846 | }, 1847 | "node_modules/is-fullwidth-code-point": { 1848 | "version": "3.0.0", 1849 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", 1850 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", 1851 | "dev": true, 1852 | "engines": { 1853 | "node": ">=8" 1854 | } 1855 | }, 1856 | "node_modules/is-glob": { 1857 | "version": "4.0.3", 1858 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", 1859 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", 1860 | "dev": true, 1861 | "dependencies": { 1862 | "is-extglob": "^2.1.1" 1863 | }, 1864 | "engines": { 1865 | "node": ">=0.10.0" 1866 | } 1867 | }, 1868 | "node_modules/is-number": { 1869 | "version": "7.0.0", 1870 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", 1871 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", 1872 | "dev": true, 1873 | "engines": { 1874 | "node": ">=0.12.0" 1875 | } 1876 | }, 1877 | "node_modules/is-potential-custom-element-name": { 1878 | "version": "1.0.1", 1879 | "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", 1880 | "integrity": "sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==", 1881 | "dev": true 1882 | }, 1883 | "node_modules/is-stream": { 1884 | "version": "2.0.1", 1885 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz", 1886 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==", 1887 | "dev": true, 1888 | "engines": { 1889 | "node": ">=8" 1890 | }, 1891 | "funding": { 1892 | "url": "https://github.com/sponsors/sindresorhus" 1893 | } 1894 | }, 1895 | "node_modules/isexe": { 1896 | "version": "2.0.0", 1897 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", 1898 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", 1899 | "dev": true 1900 | }, 1901 | "node_modules/istanbul-lib-coverage": { 1902 | "version": "3.2.2", 1903 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz", 1904 | "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==", 1905 | "dev": true, 1906 | "engines": { 1907 | "node": ">=8" 1908 | } 1909 | }, 1910 | "node_modules/istanbul-lib-report": { 1911 | "version": "3.0.1", 1912 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz", 1913 | "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==", 1914 | "dev": true, 1915 | "dependencies": { 1916 | "istanbul-lib-coverage": "^3.0.0", 1917 | "make-dir": "^4.0.0", 1918 | "supports-color": "^7.1.0" 1919 | }, 1920 | "engines": { 1921 | "node": ">=10" 1922 | } 1923 | }, 1924 | "node_modules/istanbul-lib-source-maps": { 1925 | "version": "5.0.6", 1926 | "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-5.0.6.tgz", 1927 | "integrity": "sha512-yg2d+Em4KizZC5niWhQaIomgf5WlL4vOOjZ5xGCmF8SnPE/mDWWXgvRExdcpCgh9lLRRa1/fSYp2ymmbJ1pI+A==", 1928 | "dev": true, 1929 | "dependencies": { 1930 | "@jridgewell/trace-mapping": "^0.3.23", 1931 | "debug": "^4.1.1", 1932 | "istanbul-lib-coverage": "^3.0.0" 1933 | }, 1934 | "engines": { 1935 | "node": ">=10" 1936 | } 1937 | }, 1938 | "node_modules/istanbul-reports": { 1939 | "version": "3.1.7", 1940 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", 1941 | "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", 1942 | "dev": true, 1943 | "dependencies": { 1944 | "html-escaper": "^2.0.0", 1945 | "istanbul-lib-report": "^3.0.0" 1946 | }, 1947 | "engines": { 1948 | "node": ">=8" 1949 | } 1950 | }, 1951 | "node_modules/jackspeak": { 1952 | "version": "3.4.3", 1953 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", 1954 | "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", 1955 | "dev": true, 1956 | "dependencies": { 1957 | "@isaacs/cliui": "^8.0.2" 1958 | }, 1959 | "funding": { 1960 | "url": "https://github.com/sponsors/isaacs" 1961 | }, 1962 | "optionalDependencies": { 1963 | "@pkgjs/parseargs": "^0.11.0" 1964 | } 1965 | }, 1966 | "node_modules/joycon": { 1967 | "version": "3.1.1", 1968 | "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz", 1969 | "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==", 1970 | "dev": true, 1971 | "engines": { 1972 | "node": ">=10" 1973 | } 1974 | }, 1975 | "node_modules/js-beautify": { 1976 | "version": "1.14.9", 1977 | "resolved": "https://registry.npmjs.org/js-beautify/-/js-beautify-1.14.9.tgz", 1978 | "integrity": "sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==", 1979 | "dev": true, 1980 | "dependencies": { 1981 | "config-chain": "^1.1.13", 1982 | "editorconfig": "^1.0.3", 1983 | "glob": "^8.1.0", 1984 | "nopt": "^6.0.0" 1985 | }, 1986 | "bin": { 1987 | "css-beautify": "js/bin/css-beautify.js", 1988 | "html-beautify": "js/bin/html-beautify.js", 1989 | "js-beautify": "js/bin/js-beautify.js" 1990 | }, 1991 | "engines": { 1992 | "node": ">=12" 1993 | } 1994 | }, 1995 | "node_modules/jsdom": { 1996 | "version": "24.1.1", 1997 | "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.1.tgz", 1998 | "integrity": "sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==", 1999 | "dev": true, 2000 | "dependencies": { 2001 | "cssstyle": "^4.0.1", 2002 | "data-urls": "^5.0.0", 2003 | "decimal.js": "^10.4.3", 2004 | "form-data": "^4.0.0", 2005 | "html-encoding-sniffer": "^4.0.0", 2006 | "http-proxy-agent": "^7.0.2", 2007 | "https-proxy-agent": "^7.0.5", 2008 | "is-potential-custom-element-name": "^1.0.1", 2009 | "nwsapi": "^2.2.12", 2010 | "parse5": "^7.1.2", 2011 | "rrweb-cssom": "^0.7.1", 2012 | "saxes": "^6.0.0", 2013 | "symbol-tree": "^3.2.4", 2014 | "tough-cookie": "^4.1.4", 2015 | "w3c-xmlserializer": "^5.0.0", 2016 | "webidl-conversions": "^7.0.0", 2017 | "whatwg-encoding": "^3.1.1", 2018 | "whatwg-mimetype": "^4.0.0", 2019 | "whatwg-url": "^14.0.0", 2020 | "ws": "^8.18.0", 2021 | "xml-name-validator": "^5.0.0" 2022 | }, 2023 | "engines": { 2024 | "node": ">=18" 2025 | }, 2026 | "peerDependencies": { 2027 | "canvas": "^2.11.2" 2028 | }, 2029 | "peerDependenciesMeta": { 2030 | "canvas": { 2031 | "optional": true 2032 | } 2033 | } 2034 | }, 2035 | "node_modules/jsdom/node_modules/rrweb-cssom": { 2036 | "version": "0.7.1", 2037 | "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", 2038 | "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", 2039 | "dev": true 2040 | }, 2041 | "node_modules/lilconfig": { 2042 | "version": "3.1.2", 2043 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", 2044 | "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", 2045 | "dev": true, 2046 | "engines": { 2047 | "node": ">=14" 2048 | }, 2049 | "funding": { 2050 | "url": "https://github.com/sponsors/antonk52" 2051 | } 2052 | }, 2053 | "node_modules/lines-and-columns": { 2054 | "version": "1.2.4", 2055 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", 2056 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", 2057 | "dev": true 2058 | }, 2059 | "node_modules/load-tsconfig": { 2060 | "version": "0.2.5", 2061 | "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz", 2062 | "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==", 2063 | "dev": true, 2064 | "engines": { 2065 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 2066 | } 2067 | }, 2068 | "node_modules/lodash.sortby": { 2069 | "version": "4.7.0", 2070 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz", 2071 | "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==", 2072 | "dev": true 2073 | }, 2074 | "node_modules/loupe": { 2075 | "version": "3.1.1", 2076 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-3.1.1.tgz", 2077 | "integrity": "sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==", 2078 | "dev": true, 2079 | "dependencies": { 2080 | "get-func-name": "^2.0.1" 2081 | } 2082 | }, 2083 | "node_modules/lru-cache": { 2084 | "version": "6.0.0", 2085 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", 2086 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", 2087 | "dev": true, 2088 | "dependencies": { 2089 | "yallist": "^4.0.0" 2090 | }, 2091 | "engines": { 2092 | "node": ">=10" 2093 | } 2094 | }, 2095 | "node_modules/magic-string": { 2096 | "version": "0.30.11", 2097 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.11.tgz", 2098 | "integrity": "sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==", 2099 | "dependencies": { 2100 | "@jridgewell/sourcemap-codec": "^1.5.0" 2101 | } 2102 | }, 2103 | "node_modules/magicast": { 2104 | "version": "0.3.4", 2105 | "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.4.tgz", 2106 | "integrity": "sha512-TyDF/Pn36bBji9rWKHlZe+PZb6Mx5V8IHCSxk7X4aljM4e/vyDvZZYwHewdVaqiA0nb3ghfHU/6AUpDxWoER2Q==", 2107 | "dev": true, 2108 | "dependencies": { 2109 | "@babel/parser": "^7.24.4", 2110 | "@babel/types": "^7.24.0", 2111 | "source-map-js": "^1.2.0" 2112 | } 2113 | }, 2114 | "node_modules/make-dir": { 2115 | "version": "4.0.0", 2116 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz", 2117 | "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==", 2118 | "dev": true, 2119 | "dependencies": { 2120 | "semver": "^7.5.3" 2121 | }, 2122 | "engines": { 2123 | "node": ">=10" 2124 | }, 2125 | "funding": { 2126 | "url": "https://github.com/sponsors/sindresorhus" 2127 | } 2128 | }, 2129 | "node_modules/merge-stream": { 2130 | "version": "2.0.0", 2131 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", 2132 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==", 2133 | "dev": true 2134 | }, 2135 | "node_modules/merge2": { 2136 | "version": "1.4.1", 2137 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", 2138 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", 2139 | "dev": true, 2140 | "engines": { 2141 | "node": ">= 8" 2142 | } 2143 | }, 2144 | "node_modules/micromatch": { 2145 | "version": "4.0.5", 2146 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", 2147 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", 2148 | "dev": true, 2149 | "dependencies": { 2150 | "braces": "^3.0.2", 2151 | "picomatch": "^2.3.1" 2152 | }, 2153 | "engines": { 2154 | "node": ">=8.6" 2155 | } 2156 | }, 2157 | "node_modules/mime-db": { 2158 | "version": "1.52.0", 2159 | "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", 2160 | "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", 2161 | "dev": true, 2162 | "engines": { 2163 | "node": ">= 0.6" 2164 | } 2165 | }, 2166 | "node_modules/mime-types": { 2167 | "version": "2.1.35", 2168 | "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", 2169 | "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", 2170 | "dev": true, 2171 | "dependencies": { 2172 | "mime-db": "1.52.0" 2173 | }, 2174 | "engines": { 2175 | "node": ">= 0.6" 2176 | } 2177 | }, 2178 | "node_modules/mimic-fn": { 2179 | "version": "2.1.0", 2180 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz", 2181 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==", 2182 | "dev": true, 2183 | "engines": { 2184 | "node": ">=6" 2185 | } 2186 | }, 2187 | "node_modules/minimatch": { 2188 | "version": "9.0.1", 2189 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.1.tgz", 2190 | "integrity": "sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==", 2191 | "dev": true, 2192 | "dependencies": { 2193 | "brace-expansion": "^2.0.1" 2194 | }, 2195 | "engines": { 2196 | "node": ">=16 || 14 >=14.17" 2197 | }, 2198 | "funding": { 2199 | "url": "https://github.com/sponsors/isaacs" 2200 | } 2201 | }, 2202 | "node_modules/minipass": { 2203 | "version": "7.1.2", 2204 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", 2205 | "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", 2206 | "dev": true, 2207 | "engines": { 2208 | "node": ">=16 || 14 >=14.17" 2209 | } 2210 | }, 2211 | "node_modules/ms": { 2212 | "version": "2.1.2", 2213 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", 2214 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", 2215 | "dev": true 2216 | }, 2217 | "node_modules/mz": { 2218 | "version": "2.7.0", 2219 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", 2220 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", 2221 | "dev": true, 2222 | "dependencies": { 2223 | "any-promise": "^1.0.0", 2224 | "object-assign": "^4.0.1", 2225 | "thenify-all": "^1.0.0" 2226 | } 2227 | }, 2228 | "node_modules/nanoid": { 2229 | "version": "3.3.7", 2230 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", 2231 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", 2232 | "funding": [ 2233 | { 2234 | "type": "github", 2235 | "url": "https://github.com/sponsors/ai" 2236 | } 2237 | ], 2238 | "bin": { 2239 | "nanoid": "bin/nanoid.cjs" 2240 | }, 2241 | "engines": { 2242 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" 2243 | } 2244 | }, 2245 | "node_modules/nopt": { 2246 | "version": "6.0.0", 2247 | "resolved": "https://registry.npmjs.org/nopt/-/nopt-6.0.0.tgz", 2248 | "integrity": "sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==", 2249 | "dev": true, 2250 | "dependencies": { 2251 | "abbrev": "^1.0.0" 2252 | }, 2253 | "bin": { 2254 | "nopt": "bin/nopt.js" 2255 | }, 2256 | "engines": { 2257 | "node": "^12.13.0 || ^14.15.0 || >=16.0.0" 2258 | } 2259 | }, 2260 | "node_modules/normalize-path": { 2261 | "version": "3.0.0", 2262 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", 2263 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", 2264 | "dev": true, 2265 | "engines": { 2266 | "node": ">=0.10.0" 2267 | } 2268 | }, 2269 | "node_modules/npm-run-path": { 2270 | "version": "4.0.1", 2271 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz", 2272 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==", 2273 | "dev": true, 2274 | "dependencies": { 2275 | "path-key": "^3.0.0" 2276 | }, 2277 | "engines": { 2278 | "node": ">=8" 2279 | } 2280 | }, 2281 | "node_modules/nwsapi": { 2282 | "version": "2.2.12", 2283 | "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", 2284 | "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", 2285 | "dev": true 2286 | }, 2287 | "node_modules/object-assign": { 2288 | "version": "4.1.1", 2289 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", 2290 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", 2291 | "dev": true, 2292 | "engines": { 2293 | "node": ">=0.10.0" 2294 | } 2295 | }, 2296 | "node_modules/once": { 2297 | "version": "1.4.0", 2298 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", 2299 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", 2300 | "dev": true, 2301 | "dependencies": { 2302 | "wrappy": "1" 2303 | } 2304 | }, 2305 | "node_modules/onetime": { 2306 | "version": "5.1.2", 2307 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz", 2308 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==", 2309 | "dev": true, 2310 | "dependencies": { 2311 | "mimic-fn": "^2.1.0" 2312 | }, 2313 | "engines": { 2314 | "node": ">=6" 2315 | }, 2316 | "funding": { 2317 | "url": "https://github.com/sponsors/sindresorhus" 2318 | } 2319 | }, 2320 | "node_modules/package-json-from-dist": { 2321 | "version": "1.0.0", 2322 | "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.0.tgz", 2323 | "integrity": "sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==", 2324 | "dev": true 2325 | }, 2326 | "node_modules/parse5": { 2327 | "version": "7.1.2", 2328 | "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", 2329 | "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", 2330 | "dev": true, 2331 | "dependencies": { 2332 | "entities": "^4.4.0" 2333 | }, 2334 | "funding": { 2335 | "url": "https://github.com/inikulin/parse5?sponsor=1" 2336 | } 2337 | }, 2338 | "node_modules/path-key": { 2339 | "version": "3.1.1", 2340 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", 2341 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", 2342 | "dev": true, 2343 | "engines": { 2344 | "node": ">=8" 2345 | } 2346 | }, 2347 | "node_modules/path-scurry": { 2348 | "version": "1.11.1", 2349 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", 2350 | "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", 2351 | "dev": true, 2352 | "dependencies": { 2353 | "lru-cache": "^10.2.0", 2354 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" 2355 | }, 2356 | "engines": { 2357 | "node": ">=16 || 14 >=14.18" 2358 | }, 2359 | "funding": { 2360 | "url": "https://github.com/sponsors/isaacs" 2361 | } 2362 | }, 2363 | "node_modules/path-scurry/node_modules/lru-cache": { 2364 | "version": "10.4.3", 2365 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", 2366 | "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", 2367 | "dev": true 2368 | }, 2369 | "node_modules/path-type": { 2370 | "version": "4.0.0", 2371 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", 2372 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", 2373 | "dev": true, 2374 | "engines": { 2375 | "node": ">=8" 2376 | } 2377 | }, 2378 | "node_modules/pathe": { 2379 | "version": "1.1.2", 2380 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", 2381 | "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", 2382 | "dev": true 2383 | }, 2384 | "node_modules/pathval": { 2385 | "version": "2.0.0", 2386 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", 2387 | "integrity": "sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==", 2388 | "dev": true, 2389 | "engines": { 2390 | "node": ">= 14.16" 2391 | } 2392 | }, 2393 | "node_modules/picocolors": { 2394 | "version": "1.0.1", 2395 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", 2396 | "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==" 2397 | }, 2398 | "node_modules/picomatch": { 2399 | "version": "2.3.1", 2400 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", 2401 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", 2402 | "dev": true, 2403 | "engines": { 2404 | "node": ">=8.6" 2405 | }, 2406 | "funding": { 2407 | "url": "https://github.com/sponsors/jonschlinkert" 2408 | } 2409 | }, 2410 | "node_modules/pirates": { 2411 | "version": "4.0.6", 2412 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", 2413 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", 2414 | "dev": true, 2415 | "engines": { 2416 | "node": ">= 6" 2417 | } 2418 | }, 2419 | "node_modules/postcss": { 2420 | "version": "8.4.41", 2421 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.41.tgz", 2422 | "integrity": "sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==", 2423 | "funding": [ 2424 | { 2425 | "type": "opencollective", 2426 | "url": "https://opencollective.com/postcss/" 2427 | }, 2428 | { 2429 | "type": "tidelift", 2430 | "url": "https://tidelift.com/funding/github/npm/postcss" 2431 | }, 2432 | { 2433 | "type": "github", 2434 | "url": "https://github.com/sponsors/ai" 2435 | } 2436 | ], 2437 | "dependencies": { 2438 | "nanoid": "^3.3.7", 2439 | "picocolors": "^1.0.1", 2440 | "source-map-js": "^1.2.0" 2441 | }, 2442 | "engines": { 2443 | "node": "^10 || ^12 || >=14" 2444 | } 2445 | }, 2446 | "node_modules/postcss-load-config": { 2447 | "version": "6.0.1", 2448 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-6.0.1.tgz", 2449 | "integrity": "sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==", 2450 | "dev": true, 2451 | "funding": [ 2452 | { 2453 | "type": "opencollective", 2454 | "url": "https://opencollective.com/postcss/" 2455 | }, 2456 | { 2457 | "type": "github", 2458 | "url": "https://github.com/sponsors/ai" 2459 | } 2460 | ], 2461 | "dependencies": { 2462 | "lilconfig": "^3.1.1" 2463 | }, 2464 | "engines": { 2465 | "node": ">= 18" 2466 | }, 2467 | "peerDependencies": { 2468 | "jiti": ">=1.21.0", 2469 | "postcss": ">=8.0.9", 2470 | "tsx": "^4.8.1", 2471 | "yaml": "^2.4.2" 2472 | }, 2473 | "peerDependenciesMeta": { 2474 | "jiti": { 2475 | "optional": true 2476 | }, 2477 | "postcss": { 2478 | "optional": true 2479 | }, 2480 | "tsx": { 2481 | "optional": true 2482 | }, 2483 | "yaml": { 2484 | "optional": true 2485 | } 2486 | } 2487 | }, 2488 | "node_modules/prettier": { 2489 | "version": "3.3.3", 2490 | "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", 2491 | "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", 2492 | "dev": true, 2493 | "bin": { 2494 | "prettier": "bin/prettier.cjs" 2495 | }, 2496 | "engines": { 2497 | "node": ">=14" 2498 | }, 2499 | "funding": { 2500 | "url": "https://github.com/prettier/prettier?sponsor=1" 2501 | } 2502 | }, 2503 | "node_modules/proto-list": { 2504 | "version": "1.2.4", 2505 | "resolved": "https://registry.npmjs.org/proto-list/-/proto-list-1.2.4.tgz", 2506 | "integrity": "sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==", 2507 | "dev": true 2508 | }, 2509 | "node_modules/psl": { 2510 | "version": "1.9.0", 2511 | "resolved": "https://registry.npmjs.org/psl/-/psl-1.9.0.tgz", 2512 | "integrity": "sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==", 2513 | "dev": true 2514 | }, 2515 | "node_modules/punycode": { 2516 | "version": "2.3.1", 2517 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", 2518 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==", 2519 | "dev": true, 2520 | "engines": { 2521 | "node": ">=6" 2522 | } 2523 | }, 2524 | "node_modules/querystringify": { 2525 | "version": "2.2.0", 2526 | "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", 2527 | "integrity": "sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==", 2528 | "dev": true 2529 | }, 2530 | "node_modules/queue-microtask": { 2531 | "version": "1.2.3", 2532 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", 2533 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", 2534 | "dev": true, 2535 | "funding": [ 2536 | { 2537 | "type": "github", 2538 | "url": "https://github.com/sponsors/feross" 2539 | }, 2540 | { 2541 | "type": "patreon", 2542 | "url": "https://www.patreon.com/feross" 2543 | }, 2544 | { 2545 | "type": "consulting", 2546 | "url": "https://feross.org/support" 2547 | } 2548 | ] 2549 | }, 2550 | "node_modules/readdirp": { 2551 | "version": "3.6.0", 2552 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", 2553 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", 2554 | "dev": true, 2555 | "dependencies": { 2556 | "picomatch": "^2.2.1" 2557 | }, 2558 | "engines": { 2559 | "node": ">=8.10.0" 2560 | } 2561 | }, 2562 | "node_modules/regenerator-runtime": { 2563 | "version": "0.14.0", 2564 | "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz", 2565 | "integrity": "sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==", 2566 | "peer": true 2567 | }, 2568 | "node_modules/requires-port": { 2569 | "version": "1.0.0", 2570 | "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", 2571 | "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==", 2572 | "dev": true 2573 | }, 2574 | "node_modules/resolve-from": { 2575 | "version": "5.0.0", 2576 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", 2577 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", 2578 | "dev": true, 2579 | "engines": { 2580 | "node": ">=8" 2581 | } 2582 | }, 2583 | "node_modules/reusify": { 2584 | "version": "1.0.4", 2585 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", 2586 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", 2587 | "dev": true, 2588 | "engines": { 2589 | "iojs": ">=1.0.0", 2590 | "node": ">=0.10.0" 2591 | } 2592 | }, 2593 | "node_modules/rollup": { 2594 | "version": "4.21.0", 2595 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.21.0.tgz", 2596 | "integrity": "sha512-vo+S/lfA2lMS7rZ2Qoubi6I5hwZwzXeUIctILZLbHI+laNtvhhOIon2S1JksA5UEDQ7l3vberd0fxK44lTYjbQ==", 2597 | "dev": true, 2598 | "dependencies": { 2599 | "@types/estree": "1.0.5" 2600 | }, 2601 | "bin": { 2602 | "rollup": "dist/bin/rollup" 2603 | }, 2604 | "engines": { 2605 | "node": ">=18.0.0", 2606 | "npm": ">=8.0.0" 2607 | }, 2608 | "optionalDependencies": { 2609 | "@rollup/rollup-android-arm-eabi": "4.21.0", 2610 | "@rollup/rollup-android-arm64": "4.21.0", 2611 | "@rollup/rollup-darwin-arm64": "4.21.0", 2612 | "@rollup/rollup-darwin-x64": "4.21.0", 2613 | "@rollup/rollup-linux-arm-gnueabihf": "4.21.0", 2614 | "@rollup/rollup-linux-arm-musleabihf": "4.21.0", 2615 | "@rollup/rollup-linux-arm64-gnu": "4.21.0", 2616 | "@rollup/rollup-linux-arm64-musl": "4.21.0", 2617 | "@rollup/rollup-linux-powerpc64le-gnu": "4.21.0", 2618 | "@rollup/rollup-linux-riscv64-gnu": "4.21.0", 2619 | "@rollup/rollup-linux-s390x-gnu": "4.21.0", 2620 | "@rollup/rollup-linux-x64-gnu": "4.21.0", 2621 | "@rollup/rollup-linux-x64-musl": "4.21.0", 2622 | "@rollup/rollup-win32-arm64-msvc": "4.21.0", 2623 | "@rollup/rollup-win32-ia32-msvc": "4.21.0", 2624 | "@rollup/rollup-win32-x64-msvc": "4.21.0", 2625 | "fsevents": "~2.3.2" 2626 | } 2627 | }, 2628 | "node_modules/rrweb-cssom": { 2629 | "version": "0.6.0", 2630 | "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", 2631 | "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", 2632 | "dev": true 2633 | }, 2634 | "node_modules/run-parallel": { 2635 | "version": "1.2.0", 2636 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", 2637 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", 2638 | "dev": true, 2639 | "funding": [ 2640 | { 2641 | "type": "github", 2642 | "url": "https://github.com/sponsors/feross" 2643 | }, 2644 | { 2645 | "type": "patreon", 2646 | "url": "https://www.patreon.com/feross" 2647 | }, 2648 | { 2649 | "type": "consulting", 2650 | "url": "https://feross.org/support" 2651 | } 2652 | ], 2653 | "dependencies": { 2654 | "queue-microtask": "^1.2.2" 2655 | } 2656 | }, 2657 | "node_modules/safer-buffer": { 2658 | "version": "2.1.2", 2659 | "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", 2660 | "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", 2661 | "dev": true 2662 | }, 2663 | "node_modules/saxes": { 2664 | "version": "6.0.0", 2665 | "resolved": "https://registry.npmjs.org/saxes/-/saxes-6.0.0.tgz", 2666 | "integrity": "sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==", 2667 | "dev": true, 2668 | "dependencies": { 2669 | "xmlchars": "^2.2.0" 2670 | }, 2671 | "engines": { 2672 | "node": ">=v12.22.7" 2673 | } 2674 | }, 2675 | "node_modules/semver": { 2676 | "version": "7.5.4", 2677 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", 2678 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", 2679 | "dev": true, 2680 | "dependencies": { 2681 | "lru-cache": "^6.0.0" 2682 | }, 2683 | "bin": { 2684 | "semver": "bin/semver.js" 2685 | }, 2686 | "engines": { 2687 | "node": ">=10" 2688 | } 2689 | }, 2690 | "node_modules/shebang-command": { 2691 | "version": "2.0.0", 2692 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", 2693 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", 2694 | "dev": true, 2695 | "dependencies": { 2696 | "shebang-regex": "^3.0.0" 2697 | }, 2698 | "engines": { 2699 | "node": ">=8" 2700 | } 2701 | }, 2702 | "node_modules/shebang-regex": { 2703 | "version": "3.0.0", 2704 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", 2705 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", 2706 | "dev": true, 2707 | "engines": { 2708 | "node": ">=8" 2709 | } 2710 | }, 2711 | "node_modules/siginfo": { 2712 | "version": "2.0.0", 2713 | "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", 2714 | "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==", 2715 | "dev": true 2716 | }, 2717 | "node_modules/signal-exit": { 2718 | "version": "3.0.7", 2719 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", 2720 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", 2721 | "dev": true 2722 | }, 2723 | "node_modules/slash": { 2724 | "version": "3.0.0", 2725 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", 2726 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", 2727 | "dev": true, 2728 | "engines": { 2729 | "node": ">=8" 2730 | } 2731 | }, 2732 | "node_modules/source-map-js": { 2733 | "version": "1.2.0", 2734 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", 2735 | "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", 2736 | "engines": { 2737 | "node": ">=0.10.0" 2738 | } 2739 | }, 2740 | "node_modules/stackback": { 2741 | "version": "0.0.2", 2742 | "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz", 2743 | "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==", 2744 | "dev": true 2745 | }, 2746 | "node_modules/std-env": { 2747 | "version": "3.7.0", 2748 | "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.7.0.tgz", 2749 | "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", 2750 | "dev": true 2751 | }, 2752 | "node_modules/string-width": { 2753 | "version": "5.1.2", 2754 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", 2755 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", 2756 | "dev": true, 2757 | "dependencies": { 2758 | "eastasianwidth": "^0.2.0", 2759 | "emoji-regex": "^9.2.2", 2760 | "strip-ansi": "^7.0.1" 2761 | }, 2762 | "engines": { 2763 | "node": ">=12" 2764 | }, 2765 | "funding": { 2766 | "url": "https://github.com/sponsors/sindresorhus" 2767 | } 2768 | }, 2769 | "node_modules/string-width-cjs": { 2770 | "name": "string-width", 2771 | "version": "4.2.3", 2772 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 2773 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 2774 | "dev": true, 2775 | "dependencies": { 2776 | "emoji-regex": "^8.0.0", 2777 | "is-fullwidth-code-point": "^3.0.0", 2778 | "strip-ansi": "^6.0.1" 2779 | }, 2780 | "engines": { 2781 | "node": ">=8" 2782 | } 2783 | }, 2784 | "node_modules/string-width-cjs/node_modules/ansi-regex": { 2785 | "version": "5.0.1", 2786 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2787 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2788 | "dev": true, 2789 | "engines": { 2790 | "node": ">=8" 2791 | } 2792 | }, 2793 | "node_modules/string-width-cjs/node_modules/emoji-regex": { 2794 | "version": "8.0.0", 2795 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 2796 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 2797 | "dev": true 2798 | }, 2799 | "node_modules/string-width-cjs/node_modules/strip-ansi": { 2800 | "version": "6.0.1", 2801 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2802 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2803 | "dev": true, 2804 | "dependencies": { 2805 | "ansi-regex": "^5.0.1" 2806 | }, 2807 | "engines": { 2808 | "node": ">=8" 2809 | } 2810 | }, 2811 | "node_modules/strip-ansi": { 2812 | "version": "7.1.0", 2813 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", 2814 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", 2815 | "dev": true, 2816 | "dependencies": { 2817 | "ansi-regex": "^6.0.1" 2818 | }, 2819 | "engines": { 2820 | "node": ">=12" 2821 | }, 2822 | "funding": { 2823 | "url": "https://github.com/chalk/strip-ansi?sponsor=1" 2824 | } 2825 | }, 2826 | "node_modules/strip-ansi-cjs": { 2827 | "name": "strip-ansi", 2828 | "version": "6.0.1", 2829 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 2830 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 2831 | "dev": true, 2832 | "dependencies": { 2833 | "ansi-regex": "^5.0.1" 2834 | }, 2835 | "engines": { 2836 | "node": ">=8" 2837 | } 2838 | }, 2839 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { 2840 | "version": "5.0.1", 2841 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 2842 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 2843 | "dev": true, 2844 | "engines": { 2845 | "node": ">=8" 2846 | } 2847 | }, 2848 | "node_modules/strip-final-newline": { 2849 | "version": "2.0.0", 2850 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz", 2851 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==", 2852 | "dev": true, 2853 | "engines": { 2854 | "node": ">=6" 2855 | } 2856 | }, 2857 | "node_modules/sucrase": { 2858 | "version": "3.35.0", 2859 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", 2860 | "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", 2861 | "dev": true, 2862 | "dependencies": { 2863 | "@jridgewell/gen-mapping": "^0.3.2", 2864 | "commander": "^4.0.0", 2865 | "glob": "^10.3.10", 2866 | "lines-and-columns": "^1.1.6", 2867 | "mz": "^2.7.0", 2868 | "pirates": "^4.0.1", 2869 | "ts-interface-checker": "^0.1.9" 2870 | }, 2871 | "bin": { 2872 | "sucrase": "bin/sucrase", 2873 | "sucrase-node": "bin/sucrase-node" 2874 | }, 2875 | "engines": { 2876 | "node": ">=16 || 14 >=14.17" 2877 | } 2878 | }, 2879 | "node_modules/sucrase/node_modules/commander": { 2880 | "version": "4.1.1", 2881 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", 2882 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", 2883 | "dev": true, 2884 | "engines": { 2885 | "node": ">= 6" 2886 | } 2887 | }, 2888 | "node_modules/sucrase/node_modules/glob": { 2889 | "version": "10.4.5", 2890 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 2891 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 2892 | "dev": true, 2893 | "dependencies": { 2894 | "foreground-child": "^3.1.0", 2895 | "jackspeak": "^3.1.2", 2896 | "minimatch": "^9.0.4", 2897 | "minipass": "^7.1.2", 2898 | "package-json-from-dist": "^1.0.0", 2899 | "path-scurry": "^1.11.1" 2900 | }, 2901 | "bin": { 2902 | "glob": "dist/esm/bin.mjs" 2903 | }, 2904 | "funding": { 2905 | "url": "https://github.com/sponsors/isaacs" 2906 | } 2907 | }, 2908 | "node_modules/sucrase/node_modules/minimatch": { 2909 | "version": "9.0.5", 2910 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 2911 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 2912 | "dev": true, 2913 | "dependencies": { 2914 | "brace-expansion": "^2.0.1" 2915 | }, 2916 | "engines": { 2917 | "node": ">=16 || 14 >=14.17" 2918 | }, 2919 | "funding": { 2920 | "url": "https://github.com/sponsors/isaacs" 2921 | } 2922 | }, 2923 | "node_modules/supports-color": { 2924 | "version": "7.2.0", 2925 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", 2926 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", 2927 | "dev": true, 2928 | "dependencies": { 2929 | "has-flag": "^4.0.0" 2930 | }, 2931 | "engines": { 2932 | "node": ">=8" 2933 | } 2934 | }, 2935 | "node_modules/symbol-tree": { 2936 | "version": "3.2.4", 2937 | "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", 2938 | "integrity": "sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==", 2939 | "dev": true 2940 | }, 2941 | "node_modules/test-exclude": { 2942 | "version": "7.0.1", 2943 | "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", 2944 | "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", 2945 | "dev": true, 2946 | "dependencies": { 2947 | "@istanbuljs/schema": "^0.1.2", 2948 | "glob": "^10.4.1", 2949 | "minimatch": "^9.0.4" 2950 | }, 2951 | "engines": { 2952 | "node": ">=18" 2953 | } 2954 | }, 2955 | "node_modules/test-exclude/node_modules/glob": { 2956 | "version": "10.4.5", 2957 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", 2958 | "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", 2959 | "dev": true, 2960 | "dependencies": { 2961 | "foreground-child": "^3.1.0", 2962 | "jackspeak": "^3.1.2", 2963 | "minimatch": "^9.0.4", 2964 | "minipass": "^7.1.2", 2965 | "package-json-from-dist": "^1.0.0", 2966 | "path-scurry": "^1.11.1" 2967 | }, 2968 | "bin": { 2969 | "glob": "dist/esm/bin.mjs" 2970 | }, 2971 | "funding": { 2972 | "url": "https://github.com/sponsors/isaacs" 2973 | } 2974 | }, 2975 | "node_modules/test-exclude/node_modules/minimatch": { 2976 | "version": "9.0.5", 2977 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", 2978 | "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", 2979 | "dev": true, 2980 | "dependencies": { 2981 | "brace-expansion": "^2.0.1" 2982 | }, 2983 | "engines": { 2984 | "node": ">=16 || 14 >=14.17" 2985 | }, 2986 | "funding": { 2987 | "url": "https://github.com/sponsors/isaacs" 2988 | } 2989 | }, 2990 | "node_modules/thenify": { 2991 | "version": "3.3.1", 2992 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", 2993 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", 2994 | "dev": true, 2995 | "dependencies": { 2996 | "any-promise": "^1.0.0" 2997 | } 2998 | }, 2999 | "node_modules/thenify-all": { 3000 | "version": "1.6.0", 3001 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", 3002 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", 3003 | "dev": true, 3004 | "dependencies": { 3005 | "thenify": ">= 3.1.0 < 4" 3006 | }, 3007 | "engines": { 3008 | "node": ">=0.8" 3009 | } 3010 | }, 3011 | "node_modules/tinybench": { 3012 | "version": "2.9.0", 3013 | "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", 3014 | "integrity": "sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==", 3015 | "dev": true 3016 | }, 3017 | "node_modules/tinypool": { 3018 | "version": "1.0.1", 3019 | "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.0.1.tgz", 3020 | "integrity": "sha512-URZYihUbRPcGv95En+sz6MfghfIc2OJ1sv/RmhWZLouPY0/8Vo80viwPvg3dlaS9fuq7fQMEfgRRK7BBZThBEA==", 3021 | "dev": true, 3022 | "engines": { 3023 | "node": "^18.0.0 || >=20.0.0" 3024 | } 3025 | }, 3026 | "node_modules/tinyrainbow": { 3027 | "version": "1.2.0", 3028 | "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", 3029 | "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", 3030 | "dev": true, 3031 | "engines": { 3032 | "node": ">=14.0.0" 3033 | } 3034 | }, 3035 | "node_modules/tinyspy": { 3036 | "version": "3.0.0", 3037 | "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-3.0.0.tgz", 3038 | "integrity": "sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==", 3039 | "dev": true, 3040 | "engines": { 3041 | "node": ">=14.0.0" 3042 | } 3043 | }, 3044 | "node_modules/to-fast-properties": { 3045 | "version": "2.0.0", 3046 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", 3047 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", 3048 | "engines": { 3049 | "node": ">=4" 3050 | } 3051 | }, 3052 | "node_modules/to-regex-range": { 3053 | "version": "5.0.1", 3054 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", 3055 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", 3056 | "dev": true, 3057 | "dependencies": { 3058 | "is-number": "^7.0.0" 3059 | }, 3060 | "engines": { 3061 | "node": ">=8.0" 3062 | } 3063 | }, 3064 | "node_modules/tough-cookie": { 3065 | "version": "4.1.4", 3066 | "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", 3067 | "integrity": "sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==", 3068 | "dev": true, 3069 | "dependencies": { 3070 | "psl": "^1.1.33", 3071 | "punycode": "^2.1.1", 3072 | "universalify": "^0.2.0", 3073 | "url-parse": "^1.5.3" 3074 | }, 3075 | "engines": { 3076 | "node": ">=6" 3077 | } 3078 | }, 3079 | "node_modules/tr46": { 3080 | "version": "5.0.0", 3081 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", 3082 | "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", 3083 | "dev": true, 3084 | "dependencies": { 3085 | "punycode": "^2.3.1" 3086 | }, 3087 | "engines": { 3088 | "node": ">=18" 3089 | } 3090 | }, 3091 | "node_modules/tree-kill": { 3092 | "version": "1.2.2", 3093 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", 3094 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", 3095 | "dev": true, 3096 | "bin": { 3097 | "tree-kill": "cli.js" 3098 | } 3099 | }, 3100 | "node_modules/ts-interface-checker": { 3101 | "version": "0.1.13", 3102 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", 3103 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", 3104 | "dev": true 3105 | }, 3106 | "node_modules/tsup": { 3107 | "version": "8.2.4", 3108 | "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.2.4.tgz", 3109 | "integrity": "sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==", 3110 | "dev": true, 3111 | "dependencies": { 3112 | "bundle-require": "^5.0.0", 3113 | "cac": "^6.7.14", 3114 | "chokidar": "^3.6.0", 3115 | "consola": "^3.2.3", 3116 | "debug": "^4.3.5", 3117 | "esbuild": "^0.23.0", 3118 | "execa": "^5.1.1", 3119 | "globby": "^11.1.0", 3120 | "joycon": "^3.1.1", 3121 | "picocolors": "^1.0.1", 3122 | "postcss-load-config": "^6.0.1", 3123 | "resolve-from": "^5.0.0", 3124 | "rollup": "^4.19.0", 3125 | "source-map": "0.8.0-beta.0", 3126 | "sucrase": "^3.35.0", 3127 | "tree-kill": "^1.2.2" 3128 | }, 3129 | "bin": { 3130 | "tsup": "dist/cli-default.js", 3131 | "tsup-node": "dist/cli-node.js" 3132 | }, 3133 | "engines": { 3134 | "node": ">=18" 3135 | }, 3136 | "peerDependencies": { 3137 | "@microsoft/api-extractor": "^7.36.0", 3138 | "@swc/core": "^1", 3139 | "postcss": "^8.4.12", 3140 | "typescript": ">=4.5.0" 3141 | }, 3142 | "peerDependenciesMeta": { 3143 | "@microsoft/api-extractor": { 3144 | "optional": true 3145 | }, 3146 | "@swc/core": { 3147 | "optional": true 3148 | }, 3149 | "postcss": { 3150 | "optional": true 3151 | }, 3152 | "typescript": { 3153 | "optional": true 3154 | } 3155 | } 3156 | }, 3157 | "node_modules/tsup/node_modules/source-map": { 3158 | "version": "0.8.0-beta.0", 3159 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz", 3160 | "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==", 3161 | "dev": true, 3162 | "dependencies": { 3163 | "whatwg-url": "^7.0.0" 3164 | }, 3165 | "engines": { 3166 | "node": ">= 8" 3167 | } 3168 | }, 3169 | "node_modules/tsup/node_modules/tr46": { 3170 | "version": "1.0.1", 3171 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz", 3172 | "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==", 3173 | "dev": true, 3174 | "dependencies": { 3175 | "punycode": "^2.1.0" 3176 | } 3177 | }, 3178 | "node_modules/tsup/node_modules/webidl-conversions": { 3179 | "version": "4.0.2", 3180 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz", 3181 | "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==", 3182 | "dev": true 3183 | }, 3184 | "node_modules/tsup/node_modules/whatwg-url": { 3185 | "version": "7.1.0", 3186 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz", 3187 | "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==", 3188 | "dev": true, 3189 | "dependencies": { 3190 | "lodash.sortby": "^4.7.0", 3191 | "tr46": "^1.0.1", 3192 | "webidl-conversions": "^4.0.2" 3193 | } 3194 | }, 3195 | "node_modules/typescript": { 3196 | "version": "5.5.4", 3197 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", 3198 | "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", 3199 | "devOptional": true, 3200 | "bin": { 3201 | "tsc": "bin/tsc", 3202 | "tsserver": "bin/tsserver" 3203 | }, 3204 | "engines": { 3205 | "node": ">=14.17" 3206 | } 3207 | }, 3208 | "node_modules/universalify": { 3209 | "version": "0.2.0", 3210 | "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.2.0.tgz", 3211 | "integrity": "sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==", 3212 | "dev": true, 3213 | "engines": { 3214 | "node": ">= 4.0.0" 3215 | } 3216 | }, 3217 | "node_modules/url-parse": { 3218 | "version": "1.5.10", 3219 | "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", 3220 | "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", 3221 | "dev": true, 3222 | "dependencies": { 3223 | "querystringify": "^2.1.1", 3224 | "requires-port": "^1.0.0" 3225 | } 3226 | }, 3227 | "node_modules/vite": { 3228 | "version": "5.4.2", 3229 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.2.tgz", 3230 | "integrity": "sha512-dDrQTRHp5C1fTFzcSaMxjk6vdpKvT+2/mIdE07Gw2ykehT49O0z/VHS3zZ8iV/Gh8BJJKHWOe5RjaNrW5xf/GA==", 3231 | "dev": true, 3232 | "dependencies": { 3233 | "esbuild": "^0.21.3", 3234 | "postcss": "^8.4.41", 3235 | "rollup": "^4.20.0" 3236 | }, 3237 | "bin": { 3238 | "vite": "bin/vite.js" 3239 | }, 3240 | "engines": { 3241 | "node": "^18.0.0 || >=20.0.0" 3242 | }, 3243 | "funding": { 3244 | "url": "https://github.com/vitejs/vite?sponsor=1" 3245 | }, 3246 | "optionalDependencies": { 3247 | "fsevents": "~2.3.3" 3248 | }, 3249 | "peerDependencies": { 3250 | "@types/node": "^18.0.0 || >=20.0.0", 3251 | "less": "*", 3252 | "lightningcss": "^1.21.0", 3253 | "sass": "*", 3254 | "sass-embedded": "*", 3255 | "stylus": "*", 3256 | "sugarss": "*", 3257 | "terser": "^5.4.0" 3258 | }, 3259 | "peerDependenciesMeta": { 3260 | "@types/node": { 3261 | "optional": true 3262 | }, 3263 | "less": { 3264 | "optional": true 3265 | }, 3266 | "lightningcss": { 3267 | "optional": true 3268 | }, 3269 | "sass": { 3270 | "optional": true 3271 | }, 3272 | "sass-embedded": { 3273 | "optional": true 3274 | }, 3275 | "stylus": { 3276 | "optional": true 3277 | }, 3278 | "sugarss": { 3279 | "optional": true 3280 | }, 3281 | "terser": { 3282 | "optional": true 3283 | } 3284 | } 3285 | }, 3286 | "node_modules/vite-node": { 3287 | "version": "2.0.5", 3288 | "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.0.5.tgz", 3289 | "integrity": "sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==", 3290 | "dev": true, 3291 | "dependencies": { 3292 | "cac": "^6.7.14", 3293 | "debug": "^4.3.5", 3294 | "pathe": "^1.1.2", 3295 | "tinyrainbow": "^1.2.0", 3296 | "vite": "^5.0.0" 3297 | }, 3298 | "bin": { 3299 | "vite-node": "vite-node.mjs" 3300 | }, 3301 | "engines": { 3302 | "node": "^18.0.0 || >=20.0.0" 3303 | }, 3304 | "funding": { 3305 | "url": "https://opencollective.com/vitest" 3306 | } 3307 | }, 3308 | "node_modules/vite/node_modules/@esbuild/aix-ppc64": { 3309 | "version": "0.21.5", 3310 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", 3311 | "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", 3312 | "cpu": [ 3313 | "ppc64" 3314 | ], 3315 | "dev": true, 3316 | "optional": true, 3317 | "os": [ 3318 | "aix" 3319 | ], 3320 | "engines": { 3321 | "node": ">=12" 3322 | } 3323 | }, 3324 | "node_modules/vite/node_modules/@esbuild/android-arm": { 3325 | "version": "0.21.5", 3326 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", 3327 | "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", 3328 | "cpu": [ 3329 | "arm" 3330 | ], 3331 | "dev": true, 3332 | "optional": true, 3333 | "os": [ 3334 | "android" 3335 | ], 3336 | "engines": { 3337 | "node": ">=12" 3338 | } 3339 | }, 3340 | "node_modules/vite/node_modules/@esbuild/android-arm64": { 3341 | "version": "0.21.5", 3342 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", 3343 | "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", 3344 | "cpu": [ 3345 | "arm64" 3346 | ], 3347 | "dev": true, 3348 | "optional": true, 3349 | "os": [ 3350 | "android" 3351 | ], 3352 | "engines": { 3353 | "node": ">=12" 3354 | } 3355 | }, 3356 | "node_modules/vite/node_modules/@esbuild/android-x64": { 3357 | "version": "0.21.5", 3358 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", 3359 | "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", 3360 | "cpu": [ 3361 | "x64" 3362 | ], 3363 | "dev": true, 3364 | "optional": true, 3365 | "os": [ 3366 | "android" 3367 | ], 3368 | "engines": { 3369 | "node": ">=12" 3370 | } 3371 | }, 3372 | "node_modules/vite/node_modules/@esbuild/darwin-arm64": { 3373 | "version": "0.21.5", 3374 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", 3375 | "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", 3376 | "cpu": [ 3377 | "arm64" 3378 | ], 3379 | "dev": true, 3380 | "optional": true, 3381 | "os": [ 3382 | "darwin" 3383 | ], 3384 | "engines": { 3385 | "node": ">=12" 3386 | } 3387 | }, 3388 | "node_modules/vite/node_modules/@esbuild/darwin-x64": { 3389 | "version": "0.21.5", 3390 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", 3391 | "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", 3392 | "cpu": [ 3393 | "x64" 3394 | ], 3395 | "dev": true, 3396 | "optional": true, 3397 | "os": [ 3398 | "darwin" 3399 | ], 3400 | "engines": { 3401 | "node": ">=12" 3402 | } 3403 | }, 3404 | "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { 3405 | "version": "0.21.5", 3406 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", 3407 | "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", 3408 | "cpu": [ 3409 | "arm64" 3410 | ], 3411 | "dev": true, 3412 | "optional": true, 3413 | "os": [ 3414 | "freebsd" 3415 | ], 3416 | "engines": { 3417 | "node": ">=12" 3418 | } 3419 | }, 3420 | "node_modules/vite/node_modules/@esbuild/freebsd-x64": { 3421 | "version": "0.21.5", 3422 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", 3423 | "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", 3424 | "cpu": [ 3425 | "x64" 3426 | ], 3427 | "dev": true, 3428 | "optional": true, 3429 | "os": [ 3430 | "freebsd" 3431 | ], 3432 | "engines": { 3433 | "node": ">=12" 3434 | } 3435 | }, 3436 | "node_modules/vite/node_modules/@esbuild/linux-arm": { 3437 | "version": "0.21.5", 3438 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", 3439 | "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", 3440 | "cpu": [ 3441 | "arm" 3442 | ], 3443 | "dev": true, 3444 | "optional": true, 3445 | "os": [ 3446 | "linux" 3447 | ], 3448 | "engines": { 3449 | "node": ">=12" 3450 | } 3451 | }, 3452 | "node_modules/vite/node_modules/@esbuild/linux-arm64": { 3453 | "version": "0.21.5", 3454 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", 3455 | "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", 3456 | "cpu": [ 3457 | "arm64" 3458 | ], 3459 | "dev": true, 3460 | "optional": true, 3461 | "os": [ 3462 | "linux" 3463 | ], 3464 | "engines": { 3465 | "node": ">=12" 3466 | } 3467 | }, 3468 | "node_modules/vite/node_modules/@esbuild/linux-ia32": { 3469 | "version": "0.21.5", 3470 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", 3471 | "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", 3472 | "cpu": [ 3473 | "ia32" 3474 | ], 3475 | "dev": true, 3476 | "optional": true, 3477 | "os": [ 3478 | "linux" 3479 | ], 3480 | "engines": { 3481 | "node": ">=12" 3482 | } 3483 | }, 3484 | "node_modules/vite/node_modules/@esbuild/linux-loong64": { 3485 | "version": "0.21.5", 3486 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", 3487 | "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", 3488 | "cpu": [ 3489 | "loong64" 3490 | ], 3491 | "dev": true, 3492 | "optional": true, 3493 | "os": [ 3494 | "linux" 3495 | ], 3496 | "engines": { 3497 | "node": ">=12" 3498 | } 3499 | }, 3500 | "node_modules/vite/node_modules/@esbuild/linux-mips64el": { 3501 | "version": "0.21.5", 3502 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", 3503 | "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", 3504 | "cpu": [ 3505 | "mips64el" 3506 | ], 3507 | "dev": true, 3508 | "optional": true, 3509 | "os": [ 3510 | "linux" 3511 | ], 3512 | "engines": { 3513 | "node": ">=12" 3514 | } 3515 | }, 3516 | "node_modules/vite/node_modules/@esbuild/linux-ppc64": { 3517 | "version": "0.21.5", 3518 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", 3519 | "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", 3520 | "cpu": [ 3521 | "ppc64" 3522 | ], 3523 | "dev": true, 3524 | "optional": true, 3525 | "os": [ 3526 | "linux" 3527 | ], 3528 | "engines": { 3529 | "node": ">=12" 3530 | } 3531 | }, 3532 | "node_modules/vite/node_modules/@esbuild/linux-riscv64": { 3533 | "version": "0.21.5", 3534 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", 3535 | "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", 3536 | "cpu": [ 3537 | "riscv64" 3538 | ], 3539 | "dev": true, 3540 | "optional": true, 3541 | "os": [ 3542 | "linux" 3543 | ], 3544 | "engines": { 3545 | "node": ">=12" 3546 | } 3547 | }, 3548 | "node_modules/vite/node_modules/@esbuild/linux-s390x": { 3549 | "version": "0.21.5", 3550 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", 3551 | "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", 3552 | "cpu": [ 3553 | "s390x" 3554 | ], 3555 | "dev": true, 3556 | "optional": true, 3557 | "os": [ 3558 | "linux" 3559 | ], 3560 | "engines": { 3561 | "node": ">=12" 3562 | } 3563 | }, 3564 | "node_modules/vite/node_modules/@esbuild/linux-x64": { 3565 | "version": "0.21.5", 3566 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", 3567 | "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", 3568 | "cpu": [ 3569 | "x64" 3570 | ], 3571 | "dev": true, 3572 | "optional": true, 3573 | "os": [ 3574 | "linux" 3575 | ], 3576 | "engines": { 3577 | "node": ">=12" 3578 | } 3579 | }, 3580 | "node_modules/vite/node_modules/@esbuild/netbsd-x64": { 3581 | "version": "0.21.5", 3582 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", 3583 | "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", 3584 | "cpu": [ 3585 | "x64" 3586 | ], 3587 | "dev": true, 3588 | "optional": true, 3589 | "os": [ 3590 | "netbsd" 3591 | ], 3592 | "engines": { 3593 | "node": ">=12" 3594 | } 3595 | }, 3596 | "node_modules/vite/node_modules/@esbuild/openbsd-x64": { 3597 | "version": "0.21.5", 3598 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", 3599 | "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", 3600 | "cpu": [ 3601 | "x64" 3602 | ], 3603 | "dev": true, 3604 | "optional": true, 3605 | "os": [ 3606 | "openbsd" 3607 | ], 3608 | "engines": { 3609 | "node": ">=12" 3610 | } 3611 | }, 3612 | "node_modules/vite/node_modules/@esbuild/sunos-x64": { 3613 | "version": "0.21.5", 3614 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", 3615 | "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", 3616 | "cpu": [ 3617 | "x64" 3618 | ], 3619 | "dev": true, 3620 | "optional": true, 3621 | "os": [ 3622 | "sunos" 3623 | ], 3624 | "engines": { 3625 | "node": ">=12" 3626 | } 3627 | }, 3628 | "node_modules/vite/node_modules/@esbuild/win32-arm64": { 3629 | "version": "0.21.5", 3630 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", 3631 | "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", 3632 | "cpu": [ 3633 | "arm64" 3634 | ], 3635 | "dev": true, 3636 | "optional": true, 3637 | "os": [ 3638 | "win32" 3639 | ], 3640 | "engines": { 3641 | "node": ">=12" 3642 | } 3643 | }, 3644 | "node_modules/vite/node_modules/@esbuild/win32-ia32": { 3645 | "version": "0.21.5", 3646 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", 3647 | "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", 3648 | "cpu": [ 3649 | "ia32" 3650 | ], 3651 | "dev": true, 3652 | "optional": true, 3653 | "os": [ 3654 | "win32" 3655 | ], 3656 | "engines": { 3657 | "node": ">=12" 3658 | } 3659 | }, 3660 | "node_modules/vite/node_modules/@esbuild/win32-x64": { 3661 | "version": "0.21.5", 3662 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", 3663 | "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", 3664 | "cpu": [ 3665 | "x64" 3666 | ], 3667 | "dev": true, 3668 | "optional": true, 3669 | "os": [ 3670 | "win32" 3671 | ], 3672 | "engines": { 3673 | "node": ">=12" 3674 | } 3675 | }, 3676 | "node_modules/vite/node_modules/esbuild": { 3677 | "version": "0.21.5", 3678 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", 3679 | "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", 3680 | "dev": true, 3681 | "hasInstallScript": true, 3682 | "bin": { 3683 | "esbuild": "bin/esbuild" 3684 | }, 3685 | "engines": { 3686 | "node": ">=12" 3687 | }, 3688 | "optionalDependencies": { 3689 | "@esbuild/aix-ppc64": "0.21.5", 3690 | "@esbuild/android-arm": "0.21.5", 3691 | "@esbuild/android-arm64": "0.21.5", 3692 | "@esbuild/android-x64": "0.21.5", 3693 | "@esbuild/darwin-arm64": "0.21.5", 3694 | "@esbuild/darwin-x64": "0.21.5", 3695 | "@esbuild/freebsd-arm64": "0.21.5", 3696 | "@esbuild/freebsd-x64": "0.21.5", 3697 | "@esbuild/linux-arm": "0.21.5", 3698 | "@esbuild/linux-arm64": "0.21.5", 3699 | "@esbuild/linux-ia32": "0.21.5", 3700 | "@esbuild/linux-loong64": "0.21.5", 3701 | "@esbuild/linux-mips64el": "0.21.5", 3702 | "@esbuild/linux-ppc64": "0.21.5", 3703 | "@esbuild/linux-riscv64": "0.21.5", 3704 | "@esbuild/linux-s390x": "0.21.5", 3705 | "@esbuild/linux-x64": "0.21.5", 3706 | "@esbuild/netbsd-x64": "0.21.5", 3707 | "@esbuild/openbsd-x64": "0.21.5", 3708 | "@esbuild/sunos-x64": "0.21.5", 3709 | "@esbuild/win32-arm64": "0.21.5", 3710 | "@esbuild/win32-ia32": "0.21.5", 3711 | "@esbuild/win32-x64": "0.21.5" 3712 | } 3713 | }, 3714 | "node_modules/vitest": { 3715 | "version": "2.0.5", 3716 | "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.0.5.tgz", 3717 | "integrity": "sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==", 3718 | "dev": true, 3719 | "dependencies": { 3720 | "@ampproject/remapping": "^2.3.0", 3721 | "@vitest/expect": "2.0.5", 3722 | "@vitest/pretty-format": "^2.0.5", 3723 | "@vitest/runner": "2.0.5", 3724 | "@vitest/snapshot": "2.0.5", 3725 | "@vitest/spy": "2.0.5", 3726 | "@vitest/utils": "2.0.5", 3727 | "chai": "^5.1.1", 3728 | "debug": "^4.3.5", 3729 | "execa": "^8.0.1", 3730 | "magic-string": "^0.30.10", 3731 | "pathe": "^1.1.2", 3732 | "std-env": "^3.7.0", 3733 | "tinybench": "^2.8.0", 3734 | "tinypool": "^1.0.0", 3735 | "tinyrainbow": "^1.2.0", 3736 | "vite": "^5.0.0", 3737 | "vite-node": "2.0.5", 3738 | "why-is-node-running": "^2.3.0" 3739 | }, 3740 | "bin": { 3741 | "vitest": "vitest.mjs" 3742 | }, 3743 | "engines": { 3744 | "node": "^18.0.0 || >=20.0.0" 3745 | }, 3746 | "funding": { 3747 | "url": "https://opencollective.com/vitest" 3748 | }, 3749 | "peerDependencies": { 3750 | "@edge-runtime/vm": "*", 3751 | "@types/node": "^18.0.0 || >=20.0.0", 3752 | "@vitest/browser": "2.0.5", 3753 | "@vitest/ui": "2.0.5", 3754 | "happy-dom": "*", 3755 | "jsdom": "*" 3756 | }, 3757 | "peerDependenciesMeta": { 3758 | "@edge-runtime/vm": { 3759 | "optional": true 3760 | }, 3761 | "@types/node": { 3762 | "optional": true 3763 | }, 3764 | "@vitest/browser": { 3765 | "optional": true 3766 | }, 3767 | "@vitest/ui": { 3768 | "optional": true 3769 | }, 3770 | "happy-dom": { 3771 | "optional": true 3772 | }, 3773 | "jsdom": { 3774 | "optional": true 3775 | } 3776 | } 3777 | }, 3778 | "node_modules/vitest/node_modules/execa": { 3779 | "version": "8.0.1", 3780 | "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz", 3781 | "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==", 3782 | "dev": true, 3783 | "dependencies": { 3784 | "cross-spawn": "^7.0.3", 3785 | "get-stream": "^8.0.1", 3786 | "human-signals": "^5.0.0", 3787 | "is-stream": "^3.0.0", 3788 | "merge-stream": "^2.0.0", 3789 | "npm-run-path": "^5.1.0", 3790 | "onetime": "^6.0.0", 3791 | "signal-exit": "^4.1.0", 3792 | "strip-final-newline": "^3.0.0" 3793 | }, 3794 | "engines": { 3795 | "node": ">=16.17" 3796 | }, 3797 | "funding": { 3798 | "url": "https://github.com/sindresorhus/execa?sponsor=1" 3799 | } 3800 | }, 3801 | "node_modules/vitest/node_modules/get-stream": { 3802 | "version": "8.0.1", 3803 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz", 3804 | "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==", 3805 | "dev": true, 3806 | "engines": { 3807 | "node": ">=16" 3808 | }, 3809 | "funding": { 3810 | "url": "https://github.com/sponsors/sindresorhus" 3811 | } 3812 | }, 3813 | "node_modules/vitest/node_modules/human-signals": { 3814 | "version": "5.0.0", 3815 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz", 3816 | "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==", 3817 | "dev": true, 3818 | "engines": { 3819 | "node": ">=16.17.0" 3820 | } 3821 | }, 3822 | "node_modules/vitest/node_modules/is-stream": { 3823 | "version": "3.0.0", 3824 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", 3825 | "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", 3826 | "dev": true, 3827 | "engines": { 3828 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 3829 | }, 3830 | "funding": { 3831 | "url": "https://github.com/sponsors/sindresorhus" 3832 | } 3833 | }, 3834 | "node_modules/vitest/node_modules/mimic-fn": { 3835 | "version": "4.0.0", 3836 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", 3837 | "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", 3838 | "dev": true, 3839 | "engines": { 3840 | "node": ">=12" 3841 | }, 3842 | "funding": { 3843 | "url": "https://github.com/sponsors/sindresorhus" 3844 | } 3845 | }, 3846 | "node_modules/vitest/node_modules/npm-run-path": { 3847 | "version": "5.2.0", 3848 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.2.0.tgz", 3849 | "integrity": "sha512-W4/tgAXFqFA0iL7fk0+uQ3g7wkL8xJmx3XdK0VGb4cHW//eZTtKGvFBBoRKVTpY7n6ze4NL9ly7rgXcHufqXKg==", 3850 | "dev": true, 3851 | "dependencies": { 3852 | "path-key": "^4.0.0" 3853 | }, 3854 | "engines": { 3855 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0" 3856 | }, 3857 | "funding": { 3858 | "url": "https://github.com/sponsors/sindresorhus" 3859 | } 3860 | }, 3861 | "node_modules/vitest/node_modules/onetime": { 3862 | "version": "6.0.0", 3863 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", 3864 | "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", 3865 | "dev": true, 3866 | "dependencies": { 3867 | "mimic-fn": "^4.0.0" 3868 | }, 3869 | "engines": { 3870 | "node": ">=12" 3871 | }, 3872 | "funding": { 3873 | "url": "https://github.com/sponsors/sindresorhus" 3874 | } 3875 | }, 3876 | "node_modules/vitest/node_modules/path-key": { 3877 | "version": "4.0.0", 3878 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz", 3879 | "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==", 3880 | "dev": true, 3881 | "engines": { 3882 | "node": ">=12" 3883 | }, 3884 | "funding": { 3885 | "url": "https://github.com/sponsors/sindresorhus" 3886 | } 3887 | }, 3888 | "node_modules/vitest/node_modules/signal-exit": { 3889 | "version": "4.1.0", 3890 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", 3891 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", 3892 | "dev": true, 3893 | "engines": { 3894 | "node": ">=14" 3895 | }, 3896 | "funding": { 3897 | "url": "https://github.com/sponsors/isaacs" 3898 | } 3899 | }, 3900 | "node_modules/vitest/node_modules/strip-final-newline": { 3901 | "version": "3.0.0", 3902 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", 3903 | "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", 3904 | "dev": true, 3905 | "engines": { 3906 | "node": ">=12" 3907 | }, 3908 | "funding": { 3909 | "url": "https://github.com/sponsors/sindresorhus" 3910 | } 3911 | }, 3912 | "node_modules/vue": { 3913 | "version": "3.4.38", 3914 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.38.tgz", 3915 | "integrity": "sha512-f0ZgN+mZ5KFgVv9wz0f4OgVKukoXtS3nwET4c2vLBGQR50aI8G0cqbFtLlX9Yiyg3LFGBitruPHt2PxwTduJEw==", 3916 | "peer": true, 3917 | "dependencies": { 3918 | "@vue/compiler-dom": "3.4.38", 3919 | "@vue/compiler-sfc": "3.4.38", 3920 | "@vue/runtime-dom": "3.4.38", 3921 | "@vue/server-renderer": "3.4.38", 3922 | "@vue/shared": "3.4.38" 3923 | }, 3924 | "peerDependencies": { 3925 | "typescript": "*" 3926 | }, 3927 | "peerDependenciesMeta": { 3928 | "typescript": { 3929 | "optional": true 3930 | } 3931 | } 3932 | }, 3933 | "node_modules/vue-component-type-helpers": { 3934 | "version": "2.0.29", 3935 | "resolved": "https://registry.npmjs.org/vue-component-type-helpers/-/vue-component-type-helpers-2.0.29.tgz", 3936 | "integrity": "sha512-58i+ZhUAUpwQ+9h5Hck0D+jr1qbYl4voRt5KffBx8qzELViQ4XdT/Tuo+mzq8u63teAG8K0lLaOiL5ofqW38rg==", 3937 | "dev": true 3938 | }, 3939 | "node_modules/w3c-xmlserializer": { 3940 | "version": "5.0.0", 3941 | "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", 3942 | "integrity": "sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==", 3943 | "dev": true, 3944 | "dependencies": { 3945 | "xml-name-validator": "^5.0.0" 3946 | }, 3947 | "engines": { 3948 | "node": ">=18" 3949 | } 3950 | }, 3951 | "node_modules/webidl-conversions": { 3952 | "version": "7.0.0", 3953 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", 3954 | "integrity": "sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==", 3955 | "dev": true, 3956 | "engines": { 3957 | "node": ">=12" 3958 | } 3959 | }, 3960 | "node_modules/whatwg-encoding": { 3961 | "version": "3.1.1", 3962 | "resolved": "https://registry.npmjs.org/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz", 3963 | "integrity": "sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==", 3964 | "dev": true, 3965 | "dependencies": { 3966 | "iconv-lite": "0.6.3" 3967 | }, 3968 | "engines": { 3969 | "node": ">=18" 3970 | } 3971 | }, 3972 | "node_modules/whatwg-mimetype": { 3973 | "version": "4.0.0", 3974 | "resolved": "https://registry.npmjs.org/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz", 3975 | "integrity": "sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==", 3976 | "dev": true, 3977 | "engines": { 3978 | "node": ">=18" 3979 | } 3980 | }, 3981 | "node_modules/whatwg-url": { 3982 | "version": "14.0.0", 3983 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", 3984 | "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", 3985 | "dev": true, 3986 | "dependencies": { 3987 | "tr46": "^5.0.0", 3988 | "webidl-conversions": "^7.0.0" 3989 | }, 3990 | "engines": { 3991 | "node": ">=18" 3992 | } 3993 | }, 3994 | "node_modules/which": { 3995 | "version": "2.0.2", 3996 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", 3997 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", 3998 | "dev": true, 3999 | "dependencies": { 4000 | "isexe": "^2.0.0" 4001 | }, 4002 | "bin": { 4003 | "node-which": "bin/node-which" 4004 | }, 4005 | "engines": { 4006 | "node": ">= 8" 4007 | } 4008 | }, 4009 | "node_modules/why-is-node-running": { 4010 | "version": "2.3.0", 4011 | "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.3.0.tgz", 4012 | "integrity": "sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==", 4013 | "dev": true, 4014 | "dependencies": { 4015 | "siginfo": "^2.0.0", 4016 | "stackback": "0.0.2" 4017 | }, 4018 | "bin": { 4019 | "why-is-node-running": "cli.js" 4020 | }, 4021 | "engines": { 4022 | "node": ">=8" 4023 | } 4024 | }, 4025 | "node_modules/wrap-ansi": { 4026 | "version": "8.1.0", 4027 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", 4028 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", 4029 | "dev": true, 4030 | "dependencies": { 4031 | "ansi-styles": "^6.1.0", 4032 | "string-width": "^5.0.1", 4033 | "strip-ansi": "^7.0.1" 4034 | }, 4035 | "engines": { 4036 | "node": ">=12" 4037 | }, 4038 | "funding": { 4039 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 4040 | } 4041 | }, 4042 | "node_modules/wrap-ansi-cjs": { 4043 | "name": "wrap-ansi", 4044 | "version": "7.0.0", 4045 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", 4046 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", 4047 | "dev": true, 4048 | "dependencies": { 4049 | "ansi-styles": "^4.0.0", 4050 | "string-width": "^4.1.0", 4051 | "strip-ansi": "^6.0.0" 4052 | }, 4053 | "engines": { 4054 | "node": ">=10" 4055 | }, 4056 | "funding": { 4057 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1" 4058 | } 4059 | }, 4060 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { 4061 | "version": "5.0.1", 4062 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", 4063 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", 4064 | "dev": true, 4065 | "engines": { 4066 | "node": ">=8" 4067 | } 4068 | }, 4069 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { 4070 | "version": "4.3.0", 4071 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", 4072 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", 4073 | "dev": true, 4074 | "dependencies": { 4075 | "color-convert": "^2.0.1" 4076 | }, 4077 | "engines": { 4078 | "node": ">=8" 4079 | }, 4080 | "funding": { 4081 | "url": "https://github.com/chalk/ansi-styles?sponsor=1" 4082 | } 4083 | }, 4084 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { 4085 | "version": "8.0.0", 4086 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", 4087 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", 4088 | "dev": true 4089 | }, 4090 | "node_modules/wrap-ansi-cjs/node_modules/string-width": { 4091 | "version": "4.2.3", 4092 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", 4093 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", 4094 | "dev": true, 4095 | "dependencies": { 4096 | "emoji-regex": "^8.0.0", 4097 | "is-fullwidth-code-point": "^3.0.0", 4098 | "strip-ansi": "^6.0.1" 4099 | }, 4100 | "engines": { 4101 | "node": ">=8" 4102 | } 4103 | }, 4104 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { 4105 | "version": "6.0.1", 4106 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", 4107 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", 4108 | "dev": true, 4109 | "dependencies": { 4110 | "ansi-regex": "^5.0.1" 4111 | }, 4112 | "engines": { 4113 | "node": ">=8" 4114 | } 4115 | }, 4116 | "node_modules/wrappy": { 4117 | "version": "1.0.2", 4118 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", 4119 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", 4120 | "dev": true 4121 | }, 4122 | "node_modules/ws": { 4123 | "version": "8.18.0", 4124 | "resolved": "https://registry.npmjs.org/ws/-/ws-8.18.0.tgz", 4125 | "integrity": "sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==", 4126 | "dev": true, 4127 | "engines": { 4128 | "node": ">=10.0.0" 4129 | }, 4130 | "peerDependencies": { 4131 | "bufferutil": "^4.0.1", 4132 | "utf-8-validate": ">=5.0.2" 4133 | }, 4134 | "peerDependenciesMeta": { 4135 | "bufferutil": { 4136 | "optional": true 4137 | }, 4138 | "utf-8-validate": { 4139 | "optional": true 4140 | } 4141 | } 4142 | }, 4143 | "node_modules/xml-name-validator": { 4144 | "version": "5.0.0", 4145 | "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-5.0.0.tgz", 4146 | "integrity": "sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==", 4147 | "dev": true, 4148 | "engines": { 4149 | "node": ">=18" 4150 | } 4151 | }, 4152 | "node_modules/xmlchars": { 4153 | "version": "2.2.0", 4154 | "resolved": "https://registry.npmjs.org/xmlchars/-/xmlchars-2.2.0.tgz", 4155 | "integrity": "sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==", 4156 | "dev": true 4157 | }, 4158 | "node_modules/yallist": { 4159 | "version": "4.0.0", 4160 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", 4161 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", 4162 | "dev": true 4163 | } 4164 | } 4165 | } 4166 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "i18next-vue", 3 | "description": "i18next integration for Vue", 4 | "version": "5.3.0", 5 | "author": "Konrad Kügler ", 6 | "license": "MIT", 7 | "repository": { 8 | "type": "git", 9 | "url": "git+https://github.com/i18next/i18next-vue.git" 10 | }, 11 | "homepage": "https://github.com/i18next/i18next-vue", 12 | "bugs": { 13 | "url": "https://github.com/i18next/i18next-vue/issues" 14 | }, 15 | "keywords": [ 16 | "i18n", 17 | "i18next", 18 | "vue", 19 | "typescript" 20 | ], 21 | "scripts": { 22 | "dev": "npm run build -- --watch index.ts", 23 | "build": "tsup index.ts --format esm --dts", 24 | "prepare": "npm run build", 25 | "test": "vitest", 26 | "test-ci": "vitest run", 27 | "coverage": "vitest run --coverage && rm -rf ./coverage", 28 | "format": "prettier . --write" 29 | }, 30 | "type": "module", 31 | "module": "./dist/index.js", 32 | "exports": "./dist/index.js", 33 | "types": "./dist/index.d.ts", 34 | "peerDependencies": { 35 | "i18next": ">=23", 36 | "vue": "^3.4.38" 37 | }, 38 | "devDependencies": { 39 | "@vitest/coverage-v8": "^2.0.5", 40 | "@vue/test-utils": "^2.4.6", 41 | "jsdom": "^24.1.1", 42 | "prettier": "3.3.3", 43 | "tsup": "^8.2.4", 44 | "typescript": "^5.5.4", 45 | "vitest": "^2.0.5" 46 | }, 47 | "files": [ 48 | "dist/**/*", 49 | "types/**/*" 50 | ] 51 | } 52 | -------------------------------------------------------------------------------- /tests/component.spec.ts: -------------------------------------------------------------------------------- 1 | import { mount } from "@vue/test-utils"; 2 | import { expect, test } from "vitest"; 3 | import globalI18next from "i18next"; 4 | import i18nextvue from "../index"; 5 | import { expectHTML, expectText, TranslateWithKey } from "./helpers"; 6 | 7 | test("Translation component", async () => { 8 | const Component = { 9 | template: 10 | "" + 11 | '' + 12 | '' + 13 | "", 14 | }; 15 | 16 | const i18next = globalI18next.createInstance(); 17 | await i18next.init({ 18 | lng: "en", 19 | resources: { 20 | en: { 21 | translation: { 22 | tos: "Terms of Service", 23 | term: "I accept the {termsOfUseLink}. {strongPromise}.", 24 | promise: "I promise", 25 | "component-greeting_one": "{greeting} single person {{whatTheyDo}}", 26 | "component-greeting_other": "{greeting} {{count}} people {{whatTheyDo}}", 27 | hello: "Greetings", 28 | }, 29 | }, 30 | de: { 31 | translation: { 32 | tos: "Nutzungsbedingungen", 33 | term: "{strongPromise}! Ich stimme den {termsOfUseLink} zu.", 34 | promise: "Ich versprech's", 35 | "component-greeting_one": "{greeting} Einzelperson {{whatTheyDo}}", 36 | "component-greeting_other": "{greeting} {{count}} Leute {{whatTheyDo}}", 37 | hello: "Grüße", 38 | }, 39 | }, 40 | }, 41 | }); 42 | 43 | const wrapper = mount(Component, { 44 | global: { 45 | plugins: [[i18nextvue, { i18next }]], 46 | }, 47 | }); 48 | 49 | await expectHTML( 50 | wrapper, 51 | 'I accept the\nTerms of Service\n.\nI promise\n.', 52 | ); 53 | 54 | await i18next.changeLanguage("de"); 55 | await expectHTML( 56 | wrapper, 57 | `\nIch versprech's\n! Ich stimme den\nNutzungsbedingungen\n zu.`, 58 | ); 59 | }); 60 | 61 | test("Missing slots remain as text", async () => { 62 | const Component = { 63 | template: "", 64 | }; 65 | 66 | const i18next = globalI18next.createInstance(); 67 | await i18next.init({ 68 | lng: "en", 69 | resources: { 70 | en: { 71 | translation: { 72 | term: "I accept the {termsOfUseLink}.", 73 | }, 74 | }, 75 | }, 76 | }); 77 | 78 | const wrapper = mount(Component, { 79 | global: { 80 | plugins: [[i18nextvue, { i18next }]], 81 | }, 82 | }); 83 | 84 | await expectHTML(wrapper, "I accept the\n{termsOfUseLink}\n."); 85 | }); 86 | -------------------------------------------------------------------------------- /tests/composition.spec.ts: -------------------------------------------------------------------------------- 1 | import { mount } from "@vue/test-utils"; 2 | import { expect, test } from "vitest"; 3 | import globalI18next from "i18next"; 4 | import i18nextvue, { useTranslation } from "../index"; 5 | import { expectText } from "./helpers"; 6 | import { ref } from "vue"; 7 | 8 | const CompositionWithKey = { 9 | template: "

{{ t(k) }}

", 10 | props: ["k"], 11 | setup() { 12 | return useTranslation(); 13 | }, 14 | }; 15 | 16 | test("Simple translate", async () => { 17 | const i18next = globalI18next.createInstance(); 18 | await i18next.init({ 19 | lng: "en", 20 | resources: { 21 | en: { translation: { hello: "Hello world" } }, 22 | }, 23 | }); 24 | 25 | const wrapper = mount(CompositionWithKey, { 26 | props: { 27 | k: "hello", 28 | }, 29 | global: { 30 | plugins: [[i18nextvue, { i18next }]], 31 | }, 32 | }); 33 | 34 | expect(wrapper.text()).toBe("Hello world"); 35 | }); 36 | 37 | test("Language change", async () => { 38 | const i18next = globalI18next.createInstance(); 39 | await i18next.init({ 40 | lng: "en", 41 | resources: { 42 | en: { translation: { hello: "Hello world" } }, 43 | de: { translation: { hello: "Hallo Welt" } }, 44 | }, 45 | }); 46 | 47 | const wrapper = mount(CompositionWithKey, { 48 | props: { 49 | k: "hello", 50 | }, 51 | global: { 52 | plugins: [[i18nextvue, { i18next }]], 53 | }, 54 | }); 55 | 56 | expect(wrapper.text()).toBe("Hello world"); 57 | 58 | await i18next.changeLanguage("de"); 59 | await expectText(wrapper, "Hallo Welt"); 60 | 61 | await i18next.changeLanguage("en"); 62 | await expectText(wrapper, "Hello world"); 63 | }); 64 | 65 | test("$i18next reactivity", async () => { 66 | const LangComponent = { 67 | template: "

{{ i18next.language }}

", 68 | setup() { 69 | return useTranslation(); 70 | }, 71 | }; 72 | const i18next = globalI18next.createInstance(); 73 | await i18next.init({ 74 | lng: "en", 75 | resources: {}, 76 | }); 77 | 78 | const wrapper = mount(LangComponent, { 79 | global: { 80 | plugins: [[i18nextvue, { i18next }]], 81 | }, 82 | }); 83 | 84 | expect(wrapper.text()).toBe("en"); 85 | 86 | await i18next.changeLanguage("de"); 87 | await expectText(wrapper, "de"); 88 | 89 | await i18next.changeLanguage("en"); 90 | await expectText(wrapper, "en"); 91 | }); 92 | 93 | test("Composition-t with set namespace", async () => { 94 | const CompositionWithNsp = { 95 | template: "

local: {{ t(k) }} - global: {{ $t(k) }}

", 96 | props: ["k"], 97 | setup() { 98 | return useTranslation("nsp2"); 99 | }, 100 | }; 101 | 102 | const i18next = globalI18next.createInstance(); 103 | await i18next.init({ 104 | lng: "en", 105 | resources: { 106 | en: { 107 | translation: { hello: "Hello world" }, 108 | nsp2: { hello: "Greetings globe!" }, 109 | }, 110 | }, 111 | }); 112 | 113 | const wrapper = mount(CompositionWithNsp, { 114 | props: { 115 | k: "hello", 116 | }, 117 | global: { 118 | plugins: [[i18nextvue, { i18next }]], 119 | }, 120 | }); 121 | 122 | expect(wrapper.text()).toBe("local: Greetings globe! - global: Hello world"); 123 | }); 124 | 125 | test("Composition-t with set language", async () => { 126 | const Component = { 127 | template: "

local: {{ t('hello') }} - global: {{ $t('hello') }}

", 128 | setup() { 129 | return useTranslation(undefined, { lng: "de" }); 130 | }, 131 | }; 132 | 133 | const i18next = globalI18next.createInstance(); 134 | await i18next.init({ 135 | lng: "en", 136 | resources: { 137 | en: { translation: { hello: "Hello world" } }, 138 | de: { translation: { hello: "Hallo Welt" } }, 139 | }, 140 | }); 141 | 142 | const wrapper = mount(Component, { 143 | global: { 144 | plugins: [[i18nextvue, { i18next }]], 145 | }, 146 | }); 147 | 148 | expect(wrapper.text()).toBe("local: Hallo Welt - global: Hello world"); 149 | }); 150 | 151 | test("Translation with only a provide context and no component", async () => { 152 | const i18next = globalI18next.createInstance(); 153 | await i18next.init({ 154 | lng: "en", 155 | resources: { 156 | en: { translation: { hello: "Hello world" } }, 157 | }, 158 | }); 159 | 160 | const result = ref(""); 161 | mount(CompositionWithKey, { 162 | props: { 163 | k: "hello", 164 | }, 165 | global: { 166 | plugins: [ 167 | [i18nextvue, { i18next }], 168 | // fake plugin that uses the translation outside of a component/setup context 169 | { 170 | install(app) { 171 | app.runWithContext(() => { 172 | const { t } = useTranslation(); 173 | result.value = t("hello"); 174 | }); 175 | }, 176 | }, 177 | ], 178 | }, 179 | }); 180 | 181 | expect(result.value).toBe("Hello world"); 182 | }); 183 | -------------------------------------------------------------------------------- /tests/escaping.spec.ts: -------------------------------------------------------------------------------- 1 | import { mount } from "@vue/test-utils"; 2 | import { expect, test } from "vitest"; 3 | import globalI18next from "i18next"; 4 | import i18nextvue from "../index"; 5 | 6 | export const TranslateWithKeyAndValue = { 7 | template: "

{{ $t(k, {val: v}) }}

", 8 | props: ["k", "v"], 9 | }; 10 | 11 | test("Vue text escaping without value", async () => { 12 | const i18next = globalI18next.createInstance(); 13 | await i18next.init({ 14 | lng: "en", 15 | interpolation: { 16 | escapeValue: false, 17 | }, 18 | resources: { 19 | en: { translation: { hello: "Hello " } }, 20 | }, 21 | }); 22 | 23 | const wrapper = mount(TranslateWithKeyAndValue, { 24 | props: { 25 | k: "hello", 26 | }, 27 | global: { 28 | plugins: [[i18nextvue, { i18next }]], 29 | }, 30 | }); 31 | 32 | expect(wrapper.html()).toBe("

Hello <world>

"); 33 | }); 34 | 35 | test("Default config will yield double value escaping", async () => { 36 | const i18next = globalI18next.createInstance(); 37 | await i18next.init({ 38 | lng: "en", 39 | resources: { 40 | en: { translation: { hello: "Hello {{val}}" } }, 41 | }, 42 | }); 43 | 44 | const wrapper = mount(TranslateWithKeyAndValue, { 45 | props: { 46 | k: "hello", 47 | v: "", 48 | }, 49 | global: { 50 | plugins: [[i18nextvue, { i18next }]], 51 | }, 52 | }); 53 | 54 | expect(wrapper.html()).toBe("

Hello &lt;world&gt;

"); 55 | }); 56 | 57 | test("Recommended config with proper escaping", async () => { 58 | const i18next = globalI18next.createInstance(); 59 | await i18next.init({ 60 | lng: "en", 61 | interpolation: { 62 | escapeValue: false, 63 | }, 64 | resources: { 65 | en: { translation: { hello: "Hello {{val}}" } }, 66 | }, 67 | }); 68 | 69 | const wrapper = mount(TranslateWithKeyAndValue, { 70 | props: { 71 | k: "hello", 72 | v: "", 73 | }, 74 | global: { 75 | plugins: [[i18nextvue, { i18next }]], 76 | }, 77 | }); 78 | 79 | expect(wrapper.html()).toBe("

Hello <world>

"); 80 | }); 81 | -------------------------------------------------------------------------------- /tests/helpers.ts: -------------------------------------------------------------------------------- 1 | import { flushPromises, VueWrapper } from "@vue/test-utils"; 2 | import { expect } from "vitest"; 3 | import type { BackendModule, ReadCallback, ResourceKey } from "i18next"; 4 | 5 | export const TranslateWithKey = { 6 | template: "

{{ $t(k) }}

", 7 | props: ["k"], 8 | }; 9 | 10 | export async function expectText(wrapper: VueWrapper, expected: string) { 11 | await flushPromises(); // await potential Vue re-rendering 12 | expect(wrapper.text()).toBe(expected); 13 | } 14 | 15 | export async function expectHTML(wrapper: VueWrapper, expected: string) { 16 | await flushPromises(); // await potential Vue re-rendering 17 | expect(wrapper.html()).toBe(expected); 18 | } 19 | 20 | export function withTimeout(code: () => void) { 21 | return new Promise((resolve) => { 22 | setTimeout(() => { 23 | code(); 24 | resolve(); 25 | }, 1); 26 | }); 27 | } 28 | 29 | export class LoadingModule implements BackendModule { 30 | type = "backend" as const; 31 | #callbacks = {} as Record>; 32 | constructor() {} 33 | 34 | init() { 35 | // ok, cool 36 | } 37 | read(language: string, namespace: string, callback: ReadCallback) { 38 | // console.log("read", { language, namespace }) 39 | const lngCallbacks = (this.#callbacks[language] ??= {}); 40 | lngCallbacks[namespace] = callback; 41 | } 42 | fakeLoaded(language: string, namespace: string, resources: ResourceKey) { 43 | // console.log("fake", { language, namespace }) 44 | const lngCallbacks = this.#callbacks[language]; 45 | lngCallbacks[namespace](null, resources); 46 | delete lngCallbacks[namespace]; 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /tests/is-initialized.spec.ts: -------------------------------------------------------------------------------- 1 | import { mount } from "@vue/test-utils"; 2 | import { expect, test } from "vitest"; 3 | import globalI18next from "i18next"; 4 | import i18nextvue from "../index"; 5 | import { expectText, LoadingModule, withTimeout } from "./helpers"; 6 | 7 | test("$i18next.isInitialized reactive", async () => { 8 | const Component = { 9 | template: '

Initialized

Loading

', 10 | }; 11 | 12 | const i18next = globalI18next.createInstance(); 13 | const backend = new LoadingModule(); 14 | i18next.use(backend).init({ 15 | lng: "en", 16 | fallbackLng: false, 17 | }); 18 | 19 | const wrapper = mount(Component, { 20 | global: { 21 | plugins: [[i18nextvue, { i18next }]], 22 | }, 23 | }); 24 | expect(!!i18next.isInitialized).toBe(false); 25 | await expectText(wrapper, "Loading"); 26 | 27 | await withTimeout(() => { 28 | backend.fakeLoaded("en", "translation", {}); 29 | }); 30 | 31 | expect(i18next.isInitialized).toBe(true); 32 | await expectText(wrapper, "Initialized"); 33 | }); 34 | -------------------------------------------------------------------------------- /tests/loading.spec.ts: -------------------------------------------------------------------------------- 1 | import { mount } from "@vue/test-utils"; 2 | import { expect, test } from "vitest"; 3 | import globalI18next from "i18next"; 4 | import i18nextvue, { useTranslation } from "../index"; 5 | import { LoadingModule, TranslateWithKey, withTimeout, expectText } from "./helpers"; 6 | 7 | test("Simple translate", async () => { 8 | const i18next = globalI18next.createInstance(); 9 | const backend = new LoadingModule(); 10 | i18next.use(backend).init({ 11 | lng: "en", 12 | fallbackLng: false, 13 | }); 14 | 15 | const wrapper = mount(TranslateWithKey, { 16 | props: { 17 | k: "hello", 18 | }, 19 | global: { 20 | plugins: [[i18nextvue, { i18next }]], 21 | }, 22 | }); 23 | expect(wrapper.text()).toBe(""); 24 | 25 | await withTimeout(() => { 26 | backend.fakeLoaded("en", "translation", { hello: "Hello world" }); 27 | }); 28 | 29 | await expectText(wrapper, "Hello world"); 30 | }); 31 | 32 | test("Language change", async () => { 33 | const i18next = globalI18next.createInstance(); 34 | const backend = new LoadingModule(); 35 | const initPromise = i18next.use(backend).init({ 36 | lng: "en", 37 | fallbackLng: false, 38 | }); 39 | await withTimeout(() => { 40 | backend.fakeLoaded("en", "translation", { hello: "Hello world" }); 41 | }); 42 | await initPromise; 43 | 44 | const wrapper = mount(TranslateWithKey, { 45 | props: { 46 | k: "hello", 47 | }, 48 | global: { 49 | plugins: [[i18nextvue, { i18next }]], 50 | }, 51 | }); 52 | 53 | expect(wrapper.text()).toBe("Hello world"); 54 | 55 | i18next.changeLanguage("de"); 56 | 57 | // remains en, as de is not yet loaded 58 | await expectText(wrapper, "Hello world"); 59 | 60 | await withTimeout(() => { 61 | backend.fakeLoaded("de", "translation", { hello: "Hallo Welt" }); 62 | }); 63 | 64 | // now it actually is de 65 | await expectText(wrapper, "Hallo Welt"); 66 | 67 | await i18next.changeLanguage("en"); 68 | await expectText(wrapper, "Hello world"); 69 | }); 70 | 71 | test("Composition-t, loading namespace", async () => { 72 | const CompositionWithNsp = { 73 | template: "

t: {{ t(k) }} - $t: {{ $t(k) }}

", 74 | props: ["k"], 75 | setup() { 76 | return useTranslation("nsp2"); 77 | }, 78 | }; 79 | 80 | const i18next = globalI18next.createInstance(); 81 | const backend = new LoadingModule(); 82 | const initPromise = i18next.use(backend).init({ 83 | lng: "en", 84 | fallbackLng: false, 85 | }); 86 | 87 | const wrapper = mount(CompositionWithNsp, { 88 | props: { 89 | k: "hello", 90 | }, 91 | global: { 92 | plugins: [[i18nextvue, { i18next }]], 93 | }, 94 | }); 95 | expect(wrapper.text()).toBe("t: - $t:"); 96 | 97 | await withTimeout(() => { 98 | backend.fakeLoaded("en", "translation", { hello: "Hello world" }); 99 | }); 100 | await initPromise; 101 | await expectText(wrapper, "t: - $t: Hello world"); 102 | 103 | await withTimeout(() => { 104 | backend.fakeLoaded("en", "nsp2", { hello: "Greetings globe!" }); 105 | }); 106 | await expectText(wrapper, "t: Greetings globe! - $t: Hello world"); 107 | }); 108 | -------------------------------------------------------------------------------- /tests/simple.spec.ts: -------------------------------------------------------------------------------- 1 | import { mount } from "@vue/test-utils"; 2 | import { expect, test } from "vitest"; 3 | import globalI18next from "i18next"; 4 | import i18nextvue from "../index"; 5 | import { expectText, TranslateWithKey } from "./helpers"; 6 | 7 | test("Simple translate", async () => { 8 | const i18next = globalI18next.createInstance(); 9 | await i18next.init({ 10 | lng: "en", 11 | resources: { 12 | en: { translation: { hello: "Hello world" } }, 13 | }, 14 | }); 15 | 16 | const wrapper = mount(TranslateWithKey, { 17 | props: { 18 | k: "hello", 19 | }, 20 | global: { 21 | plugins: [[i18nextvue, { i18next }]], 22 | }, 23 | }); 24 | 25 | expect(wrapper.text()).toBe("Hello world"); 26 | }); 27 | 28 | test("Language change", async () => { 29 | const i18next = globalI18next.createInstance(); 30 | await i18next.init({ 31 | lng: "en", 32 | resources: { 33 | en: { translation: { hello: "Hello world" } }, 34 | de: { translation: { hello: "Hallo Welt" } }, 35 | }, 36 | }); 37 | 38 | const wrapper = mount(TranslateWithKey, { 39 | props: { 40 | k: "hello", 41 | }, 42 | global: { 43 | plugins: [[i18nextvue, { i18next }]], 44 | }, 45 | }); 46 | 47 | expect(wrapper.text()).toBe("Hello world"); 48 | 49 | await i18next.changeLanguage("de"); 50 | await expectText(wrapper, "Hallo Welt"); 51 | 52 | await i18next.changeLanguage("en"); 53 | await expectText(wrapper, "Hello world"); 54 | }); 55 | 56 | test("$i18next reactivity", async () => { 57 | const LangComponent = { 58 | template: "

{{ $i18next.language }}

", 59 | }; 60 | const i18next = globalI18next.createInstance(); 61 | await i18next.init({ 62 | lng: "en", 63 | resources: {}, 64 | }); 65 | 66 | const wrapper = mount(LangComponent, { 67 | global: { 68 | plugins: [[i18nextvue, { i18next }]], 69 | }, 70 | }); 71 | 72 | expect(wrapper.text()).toBe("en"); 73 | 74 | await i18next.changeLanguage("de"); 75 | await expectText(wrapper, "de"); 76 | 77 | await i18next.changeLanguage("en"); 78 | await expectText(wrapper, "en"); 79 | }); 80 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "declaration": true, 4 | "declarationDir": "types", 5 | "module": "Node16", 6 | "outDir": "dist", 7 | "target": "ES2017", 8 | "removeComments": true, 9 | "strict": true, 10 | "esModuleInterop": true, 11 | "moduleResolution": "Node16", 12 | "types": ["vitest/globals"] 13 | }, 14 | "include": ["index.ts"] 15 | } 16 | -------------------------------------------------------------------------------- /vite.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from "vitest/config"; 2 | 3 | export default defineConfig({ 4 | test: { 5 | globals: true, 6 | environment: "jsdom", 7 | coverage: { 8 | reporter: ["text"], 9 | }, 10 | }, 11 | }); 12 | --------------------------------------------------------------------------------