├── .github
├── FUNDING.yml
└── workflows
│ └── tests.yaml
├── .gitignore
├── CODE_OF_CONDUCT.md
├── LICENSE
├── README.md
├── package-lock.json
├── package.json
├── src
├── exporter.ts
├── index.ts
├── pluralizer.ts
├── translator.ts
├── vite.ts
└── vue.ts
├── tests
├── exporter.test.ts
├── fixtures
│ ├── lang
│ │ ├── de.json
│ │ ├── en.json
│ │ ├── en
│ │ │ ├── auth.php
│ │ │ ├── domain
│ │ │ │ ├── car.php
│ │ │ │ └── user.php
│ │ │ └── nested
│ │ │ │ └── cars
│ │ │ │ └── car.php
│ │ ├── es.json
│ │ ├── fr
│ │ │ └── auth.php
│ │ ├── pt.json
│ │ ├── pt
│ │ │ ├── auth.php
│ │ │ └── nested
│ │ │ │ └── cars
│ │ │ │ └── car.php
│ │ ├── wrongfolder
│ │ │ └── random.php
│ │ └── zh_TW.json
│ └── locales
│ │ └── en
│ │ ├── auth.php
│ │ └── domain
│ │ └── user.php
└── trans.test.ts
├── tsconfig.json
└── vite.config.ts
/.github/FUNDING.yml:
--------------------------------------------------------------------------------
1 | # These are supported funding model platforms
2 |
3 | github: sergix44
4 |
--------------------------------------------------------------------------------
/.github/workflows/tests.yaml:
--------------------------------------------------------------------------------
1 | on:
2 | push:
3 | branches: [ master ]
4 | pull_request:
5 | branches: [ master ]
6 |
7 | jobs:
8 | tests:
9 | runs-on: ubuntu-latest
10 |
11 | strategy:
12 | matrix:
13 | node-version: [ 18.x ]
14 |
15 | steps:
16 | - uses: actions/checkout@v3
17 | - name: Use Node.js ${{ matrix.node-version }}
18 | uses: actions/setup-node@v3
19 | with:
20 | node-version: ${{ matrix.node-version }}
21 | cache: "npm"
22 |
23 | - name: Npm install
24 | run: npm ci
25 |
26 | - name: Execute tests
27 | run: npm run tests
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | node_modules/
2 | .idea/
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Contributor Covenant Code of Conduct
2 |
3 | ## Our Pledge
4 |
5 | We as members, contributors, and leaders pledge to make participation in our
6 | community a harassment-free experience for everyone, regardless of age, body
7 | size, visible or invisible disability, ethnicity, sex characteristics, gender
8 | identity and expression, level of experience, education, socio-economic status,
9 | nationality, personal appearance, race, religion, or sexual identity
10 | and orientation.
11 |
12 | We pledge to act and interact in ways that contribute to an open, welcoming,
13 | diverse, inclusive, and healthy community.
14 |
15 | ## Our Standards
16 |
17 | Examples of behavior that contributes to a positive environment for our
18 | community include:
19 |
20 | * Demonstrating empathy and kindness toward other people
21 | * Being respectful of differing opinions, viewpoints, and experiences
22 | * Giving and gracefully accepting constructive feedback
23 | * Accepting responsibility and apologizing to those affected by our mistakes,
24 | and learning from the experience
25 | * Focusing on what is best not just for us as individuals, but for the
26 | overall community
27 |
28 | Examples of unacceptable behavior include:
29 |
30 | * The use of sexualized language or imagery, and sexual attention or
31 | advances of any kind
32 | * Trolling, insulting or derogatory comments, and personal or political attacks
33 | * Public or private harassment
34 | * Publishing others' private information, such as a physical or email
35 | address, without their explicit permission
36 | * Other conduct which could reasonably be considered inappropriate in a
37 | professional setting
38 |
39 | ## Enforcement Responsibilities
40 |
41 | Community leaders are responsible for clarifying and enforcing our standards of
42 | acceptable behavior and will take appropriate and fair corrective action in
43 | response to any behavior that they deem inappropriate, threatening, offensive,
44 | or harmful.
45 |
46 | Community leaders have the right and responsibility to remove, edit, or reject
47 | comments, commits, code, wiki edits, issues, and other contributions that are
48 | not aligned to this Code of Conduct, and will communicate reasons for moderation
49 | decisions when appropriate.
50 |
51 | ## Scope
52 |
53 | This Code of Conduct applies within all community spaces, and also applies when
54 | an individual is officially representing the community in public spaces.
55 | Examples of representing our community include using an official e-mail address,
56 | posting via an official social media account, or acting as an appointed
57 | representative at an online or offline event.
58 |
59 | ## Enforcement
60 |
61 | Instances of abusive, harassing, or otherwise unacceptable behavior may be
62 | reported to the community leaders responsible for enforcement at
63 | sergio@brighenti.me.
64 | All complaints will be reviewed and investigated promptly and fairly.
65 |
66 | All community leaders are obligated to respect the privacy and security of the
67 | reporter of any incident.
68 |
69 | ## Enforcement Guidelines
70 |
71 | Community leaders will follow these Community Impact Guidelines in determining
72 | the consequences for any action they deem in violation of this Code of Conduct:
73 |
74 | ### 1. Correction
75 |
76 | **Community Impact**: Use of inappropriate language or other behavior deemed
77 | unprofessional or unwelcome in the community.
78 |
79 | **Consequence**: A private, written warning from community leaders, providing
80 | clarity around the nature of the violation and an explanation of why the
81 | behavior was inappropriate. A public apology may be requested.
82 |
83 | ### 2. Warning
84 |
85 | **Community Impact**: A violation through a single incident or series
86 | of actions.
87 |
88 | **Consequence**: A warning with consequences for continued behavior. No
89 | interaction with the people involved, including unsolicited interaction with
90 | those enforcing the Code of Conduct, for a specified period of time. This
91 | includes avoiding interactions in community spaces as well as external channels
92 | like social media. Violating these terms may lead to a temporary or
93 | permanent ban.
94 |
95 | ### 3. Temporary Ban
96 |
97 | **Community Impact**: A serious violation of community standards, including
98 | sustained inappropriate behavior.
99 |
100 | **Consequence**: A temporary ban from any sort of interaction or public
101 | communication with the community for a specified period of time. No public or
102 | private interaction with the people involved, including unsolicited interaction
103 | with those enforcing the Code of Conduct, is allowed during this period.
104 | Violating these terms may lead to a permanent ban.
105 |
106 | ### 4. Permanent Ban
107 |
108 | **Community Impact**: Demonstrating a pattern of violation of community
109 | standards, including sustained inappropriate behavior, harassment of an
110 | individual, or aggression toward or disparagement of classes of individuals.
111 |
112 | **Consequence**: A permanent ban from any sort of public interaction within
113 | the community.
114 |
115 | ## Attribution
116 |
117 | This Code of Conduct is adapted from the [Contributor Covenant][homepage],
118 | version 2.0, available at
119 | https://www.contributor-covenant.org/version/2/0/code_of_conduct.html.
120 |
121 | Community Impact Guidelines were inspired by [Mozilla's code of conduct
122 | enforcement ladder](https://github.com/mozilla/diversity).
123 |
124 | [homepage]: https://www.contributor-covenant.org
125 |
126 | For answers to common questions about this code of conduct, see the FAQ at
127 | https://www.contributor-covenant.org/faq. Translations are available at
128 | https://www.contributor-covenant.org/translations.
129 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023 Sergio Brighenti
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 |
2 |
3 | > Laravel Translator for Frontend
4 |
5 | Laravel Translator is a package that allows you to use Laravel's localization features in your frontend code, with
6 | the same syntax you would use in your backend code and zero configuration.
7 |
8 | This package was inspired by [laravel-vue-i18n](https://github.com/xiCO2k/laravel-vue-i18n)
9 | and [lingua](https://github.com/cyberwolf-studio/lingua).
10 |
11 | ## 🧩 Features
12 |
13 | - Frontend framework-agnostic, works with any framework or even plain javascript (and even without Laravel)
14 | - Use the same translation files you use in your backend code (both php and json files are supported)
15 | - No extra configuration required: install, register and use
16 | - Zero SSR configuration required
17 | - No export step required, translations are parsed and bundled directly from your backend code by Vite
18 | - Support for hot reloading
19 | - Minimal and lightweight
20 |
21 | ## 🚀 Installation
22 |
23 | *ViteJS is required to use this package.*
24 | Install the package via npm or yarn:
25 |
26 | ```bash
27 | npm install -D laravel-translator
28 | ```
29 |
30 | In your `vite.config.js` file, register the plugin:
31 |
32 | ```js
33 | import {defineConfig} from 'vite'
34 | import laravelTranslator from 'laravel-translator/vite'
35 |
36 | export default defineConfig({
37 | plugins: [
38 | // ...
39 | laravelTranslator()
40 | ]
41 | })
42 | ```
43 |
44 | Run `npm run dev` to start the development server, or `npm run build` to build your assets for production.
45 |
46 | Remember to set the language in your `html`, for example in your `app.blade.php` file:
47 |
48 | ```html
49 |
50 |
51 | ```
52 |
53 | If you want to also pass the fallback locale to your frontend code, you can do so by adding the following line to your
54 | `app.blade.php` file:
55 |
56 | ```html
57 |
58 |
61 | ```
62 |
63 | ## 🧑💻Usage
64 |
65 | You can import the usual Laravel translation functions from the `laravel-translator` package:
66 |
67 | ```js
68 | import {__, trans, t, trans_choice} from 'laravel-translator'
69 |
70 | __('user.welcome', {name: 'John'}) // Welcome, John!
71 | trans('auth.failed') // These credentials do not match our records.
72 | t('auth.failed') // ...
73 |
74 | trans_choice('user.count', 1) // User
75 | trans_choice('user.count', 2) // Users
76 | ```
77 |
78 | #### Svelte
79 |
80 | ```html
81 |
82 |
85 |
86 |
{__('page.title')}
87 |
88 | {__('page.content')}
89 | ```
90 |
91 | #### Vue
92 |
93 | Register the plugin:
94 | ```js
95 | ...
96 | .use(LaravelTranslatorVue, {
97 | locale: 'it'
98 | // fallbackLocale: 'en', optional
99 | })
100 | ...
101 | ```
102 |
103 | Use the functions function in your components:
104 |
105 | ```html
106 |
107 |
108 |
{{ __('page.title') }}
109 |
110 |
{{ __('page.content') }}
111 |
{{ t('page.content') }}
112 |
{{ trans('page.content') }}
113 |
{{ trans_choice('page.content') }}
114 |
115 |
116 | ```
117 |
118 | ### Advanced usage
119 |
120 | It's possible to set the locale and the fallback locale manually, by using the `setLocale` function:
121 |
122 | ```js
123 | import {setLocale} from "laravel-translator"
124 |
125 | setLocale('it') // Set the locale to 'it'
126 | setLocale('it', 'en') // Set the locale to 'it' and the fallback locale to 'en'
127 | ```
128 |
129 | You can add additional path where to look for translation files on the Vite plugin options:
130 |
131 | ```js
132 | import {defineConfig} from 'vite'
133 | import laravelTranslator from 'laravel-translator/vite'
134 |
135 | export default defineConfig({
136 | plugins: [
137 | // ...
138 | laravelTranslator({
139 | langPath: 'resources/js/translations', // By default, the package looks for translations in the 'lang' folder
140 | additionalLangPaths: ['vendor/my-package/lang'] // You can add additional paths where to look for translations
141 | })
142 | ]
143 | })
144 | ```
145 |
146 | ## ⚙️ How it works
147 |
148 | This package uses [Vite](https://vitejs.dev/) Virtual Modules feature to parse your translations files and make them
149 | available in your frontend code, without the need to export them to a separate file.
150 |
151 | In development mode, the translations are parsed and bundled on the fly, and hot reloaded when the files change.
152 |
153 | In production mode, the translations are parsed and bundled automatically when you run `npm run build`.
154 |
155 | ## ⚖️ License
156 |
157 | The MIT License (MIT). Please see [License File](LICENSE) for more information.
158 |
159 | ## 🏅 Credits
160 |
161 | - [Sergio Brighenti](https://github.com/sergix44/)
162 | - [All Contributors](https://github.com/sergix44/laravel-translator-js/contributors)
--------------------------------------------------------------------------------
/package-lock.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "laravel-translator",
3 | "version": "1.0.5",
4 | "lockfileVersion": 3,
5 | "requires": true,
6 | "packages": {
7 | "": {
8 | "name": "laravel-translator",
9 | "version": "1.0.5",
10 | "license": "MIT",
11 | "dependencies": {
12 | "glob": "^10.3.10",
13 | "php-parser": "^3.1.5"
14 | },
15 | "devDependencies": {
16 | "@types/node": "^20.10.4",
17 | "@vitest/coverage-v8": "^1.0.4",
18 | "tsup": "^8.0.1",
19 | "typescript": "^5.3.3",
20 | "vite": "^5.2.8",
21 | "vitest": "^1.0.0",
22 | "vue": "^3.4.27"
23 | }
24 | },
25 | "node_modules/@ampproject/remapping": {
26 | "version": "2.2.1",
27 | "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz",
28 | "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==",
29 | "dev": true,
30 | "dependencies": {
31 | "@jridgewell/gen-mapping": "^0.3.0",
32 | "@jridgewell/trace-mapping": "^0.3.9"
33 | },
34 | "engines": {
35 | "node": ">=6.0.0"
36 | }
37 | },
38 | "node_modules/@babel/helper-string-parser": {
39 | "version": "7.23.4",
40 | "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.23.4.tgz",
41 | "integrity": "sha512-803gmbQdqwdf4olxrX4AJyFBV/RTr3rSmOj0rKwesmzlfhYNDEs+/iOcznzpNWlJlIlTJC2QfPFcHB6DlzdVLQ==",
42 | "dev": true,
43 | "engines": {
44 | "node": ">=6.9.0"
45 | }
46 | },
47 | "node_modules/@babel/helper-validator-identifier": {
48 | "version": "7.22.20",
49 | "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
50 | "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
51 | "dev": true,
52 | "engines": {
53 | "node": ">=6.9.0"
54 | }
55 | },
56 | "node_modules/@babel/parser": {
57 | "version": "7.24.5",
58 | "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.5.tgz",
59 | "integrity": "sha512-EOv5IK8arwh3LI47dz1b0tKUb/1uhHAnHJOrjgtQMIpu1uXd9mlFrJg9IUgGUgZ41Ch0K8REPTYpO7B76b4vJg==",
60 | "dev": true,
61 | "bin": {
62 | "parser": "bin/babel-parser.js"
63 | },
64 | "engines": {
65 | "node": ">=6.0.0"
66 | }
67 | },
68 | "node_modules/@babel/types": {
69 | "version": "7.23.6",
70 | "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.6.tgz",
71 | "integrity": "sha512-+uarb83brBzPKN38NX1MkB6vb6+mwvR6amUulqAE7ccQw1pEl+bCia9TbdG1lsnFP7lZySvUn37CHyXQdfTwzg==",
72 | "dev": true,
73 | "dependencies": {
74 | "@babel/helper-string-parser": "^7.23.4",
75 | "@babel/helper-validator-identifier": "^7.22.20",
76 | "to-fast-properties": "^2.0.0"
77 | },
78 | "engines": {
79 | "node": ">=6.9.0"
80 | }
81 | },
82 | "node_modules/@bcoe/v8-coverage": {
83 | "version": "0.2.3",
84 | "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz",
85 | "integrity": "sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==",
86 | "dev": true
87 | },
88 | "node_modules/@esbuild/aix-ppc64": {
89 | "version": "0.19.10",
90 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.10.tgz",
91 | "integrity": "sha512-Q+mk96KJ+FZ30h9fsJl+67IjNJm3x2eX+GBWGmocAKgzp27cowCOOqSdscX80s0SpdFXZnIv/+1xD1EctFx96Q==",
92 | "cpu": [
93 | "ppc64"
94 | ],
95 | "dev": true,
96 | "optional": true,
97 | "os": [
98 | "aix"
99 | ],
100 | "engines": {
101 | "node": ">=12"
102 | }
103 | },
104 | "node_modules/@esbuild/android-arm": {
105 | "version": "0.19.10",
106 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.10.tgz",
107 | "integrity": "sha512-7W0bK7qfkw1fc2viBfrtAEkDKHatYfHzr/jKAHNr9BvkYDXPcC6bodtm8AyLJNNuqClLNaeTLuwURt4PRT9d7w==",
108 | "cpu": [
109 | "arm"
110 | ],
111 | "dev": true,
112 | "optional": true,
113 | "os": [
114 | "android"
115 | ],
116 | "engines": {
117 | "node": ">=12"
118 | }
119 | },
120 | "node_modules/@esbuild/android-arm64": {
121 | "version": "0.19.10",
122 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.10.tgz",
123 | "integrity": "sha512-1X4CClKhDgC3by7k8aOWZeBXQX8dHT5QAMCAQDArCLaYfkppoARvh0fit3X2Qs+MXDngKcHv6XXyQCpY0hkK1Q==",
124 | "cpu": [
125 | "arm64"
126 | ],
127 | "dev": true,
128 | "optional": true,
129 | "os": [
130 | "android"
131 | ],
132 | "engines": {
133 | "node": ">=12"
134 | }
135 | },
136 | "node_modules/@esbuild/android-x64": {
137 | "version": "0.19.10",
138 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.10.tgz",
139 | "integrity": "sha512-O/nO/g+/7NlitUxETkUv/IvADKuZXyH4BHf/g/7laqKC4i/7whLpB0gvpPc2zpF0q9Q6FXS3TS75QHac9MvVWw==",
140 | "cpu": [
141 | "x64"
142 | ],
143 | "dev": true,
144 | "optional": true,
145 | "os": [
146 | "android"
147 | ],
148 | "engines": {
149 | "node": ">=12"
150 | }
151 | },
152 | "node_modules/@esbuild/darwin-arm64": {
153 | "version": "0.19.10",
154 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.10.tgz",
155 | "integrity": "sha512-YSRRs2zOpwypck+6GL3wGXx2gNP7DXzetmo5pHXLrY/VIMsS59yKfjPizQ4lLt5vEI80M41gjm2BxrGZ5U+VMA==",
156 | "cpu": [
157 | "arm64"
158 | ],
159 | "dev": true,
160 | "optional": true,
161 | "os": [
162 | "darwin"
163 | ],
164 | "engines": {
165 | "node": ">=12"
166 | }
167 | },
168 | "node_modules/@esbuild/darwin-x64": {
169 | "version": "0.19.10",
170 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.10.tgz",
171 | "integrity": "sha512-alfGtT+IEICKtNE54hbvPg13xGBe4GkVxyGWtzr+yHO7HIiRJppPDhOKq3zstTcVf8msXb/t4eavW3jCDpMSmA==",
172 | "cpu": [
173 | "x64"
174 | ],
175 | "dev": true,
176 | "optional": true,
177 | "os": [
178 | "darwin"
179 | ],
180 | "engines": {
181 | "node": ">=12"
182 | }
183 | },
184 | "node_modules/@esbuild/freebsd-arm64": {
185 | "version": "0.19.10",
186 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.10.tgz",
187 | "integrity": "sha512-dMtk1wc7FSH8CCkE854GyGuNKCewlh+7heYP/sclpOG6Cectzk14qdUIY5CrKDbkA/OczXq9WesqnPl09mj5dg==",
188 | "cpu": [
189 | "arm64"
190 | ],
191 | "dev": true,
192 | "optional": true,
193 | "os": [
194 | "freebsd"
195 | ],
196 | "engines": {
197 | "node": ">=12"
198 | }
199 | },
200 | "node_modules/@esbuild/freebsd-x64": {
201 | "version": "0.19.10",
202 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.10.tgz",
203 | "integrity": "sha512-G5UPPspryHu1T3uX8WiOEUa6q6OlQh6gNl4CO4Iw5PS+Kg5bVggVFehzXBJY6X6RSOMS8iXDv2330VzaObm4Ag==",
204 | "cpu": [
205 | "x64"
206 | ],
207 | "dev": true,
208 | "optional": true,
209 | "os": [
210 | "freebsd"
211 | ],
212 | "engines": {
213 | "node": ">=12"
214 | }
215 | },
216 | "node_modules/@esbuild/linux-arm": {
217 | "version": "0.19.10",
218 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.10.tgz",
219 | "integrity": "sha512-j6gUW5aAaPgD416Hk9FHxn27On28H4eVI9rJ4az7oCGTFW48+LcgNDBN+9f8rKZz7EEowo889CPKyeaD0iw9Kg==",
220 | "cpu": [
221 | "arm"
222 | ],
223 | "dev": true,
224 | "optional": true,
225 | "os": [
226 | "linux"
227 | ],
228 | "engines": {
229 | "node": ">=12"
230 | }
231 | },
232 | "node_modules/@esbuild/linux-arm64": {
233 | "version": "0.19.10",
234 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.10.tgz",
235 | "integrity": "sha512-QxaouHWZ+2KWEj7cGJmvTIHVALfhpGxo3WLmlYfJ+dA5fJB6lDEIg+oe/0//FuyVHuS3l79/wyBxbHr0NgtxJQ==",
236 | "cpu": [
237 | "arm64"
238 | ],
239 | "dev": true,
240 | "optional": true,
241 | "os": [
242 | "linux"
243 | ],
244 | "engines": {
245 | "node": ">=12"
246 | }
247 | },
248 | "node_modules/@esbuild/linux-ia32": {
249 | "version": "0.19.10",
250 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.10.tgz",
251 | "integrity": "sha512-4ub1YwXxYjj9h1UIZs2hYbnTZBtenPw5NfXCRgEkGb0b6OJ2gpkMvDqRDYIDRjRdWSe/TBiZltm3Y3Q8SN1xNg==",
252 | "cpu": [
253 | "ia32"
254 | ],
255 | "dev": true,
256 | "optional": true,
257 | "os": [
258 | "linux"
259 | ],
260 | "engines": {
261 | "node": ">=12"
262 | }
263 | },
264 | "node_modules/@esbuild/linux-loong64": {
265 | "version": "0.19.10",
266 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.10.tgz",
267 | "integrity": "sha512-lo3I9k+mbEKoxtoIbM0yC/MZ1i2wM0cIeOejlVdZ3D86LAcFXFRdeuZmh91QJvUTW51bOK5W2BznGNIl4+mDaA==",
268 | "cpu": [
269 | "loong64"
270 | ],
271 | "dev": true,
272 | "optional": true,
273 | "os": [
274 | "linux"
275 | ],
276 | "engines": {
277 | "node": ">=12"
278 | }
279 | },
280 | "node_modules/@esbuild/linux-mips64el": {
281 | "version": "0.19.10",
282 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.10.tgz",
283 | "integrity": "sha512-J4gH3zhHNbdZN0Bcr1QUGVNkHTdpijgx5VMxeetSk6ntdt+vR1DqGmHxQYHRmNb77tP6GVvD+K0NyO4xjd7y4A==",
284 | "cpu": [
285 | "mips64el"
286 | ],
287 | "dev": true,
288 | "optional": true,
289 | "os": [
290 | "linux"
291 | ],
292 | "engines": {
293 | "node": ">=12"
294 | }
295 | },
296 | "node_modules/@esbuild/linux-ppc64": {
297 | "version": "0.19.10",
298 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.10.tgz",
299 | "integrity": "sha512-tgT/7u+QhV6ge8wFMzaklOY7KqiyitgT1AUHMApau32ZlvTB/+efeCtMk4eXS+uEymYK249JsoiklZN64xt6oQ==",
300 | "cpu": [
301 | "ppc64"
302 | ],
303 | "dev": true,
304 | "optional": true,
305 | "os": [
306 | "linux"
307 | ],
308 | "engines": {
309 | "node": ">=12"
310 | }
311 | },
312 | "node_modules/@esbuild/linux-riscv64": {
313 | "version": "0.19.10",
314 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.10.tgz",
315 | "integrity": "sha512-0f/spw0PfBMZBNqtKe5FLzBDGo0SKZKvMl5PHYQr3+eiSscfJ96XEknCe+JoOayybWUFQbcJTrk946i3j9uYZA==",
316 | "cpu": [
317 | "riscv64"
318 | ],
319 | "dev": true,
320 | "optional": true,
321 | "os": [
322 | "linux"
323 | ],
324 | "engines": {
325 | "node": ">=12"
326 | }
327 | },
328 | "node_modules/@esbuild/linux-s390x": {
329 | "version": "0.19.10",
330 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.10.tgz",
331 | "integrity": "sha512-pZFe0OeskMHzHa9U38g+z8Yx5FNCLFtUnJtQMpwhS+r4S566aK2ci3t4NCP4tjt6d5j5uo4h7tExZMjeKoehAA==",
332 | "cpu": [
333 | "s390x"
334 | ],
335 | "dev": true,
336 | "optional": true,
337 | "os": [
338 | "linux"
339 | ],
340 | "engines": {
341 | "node": ">=12"
342 | }
343 | },
344 | "node_modules/@esbuild/linux-x64": {
345 | "version": "0.19.10",
346 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.10.tgz",
347 | "integrity": "sha512-SpYNEqg/6pZYoc+1zLCjVOYvxfZVZj6w0KROZ3Fje/QrM3nfvT2llI+wmKSrWuX6wmZeTapbarvuNNK/qepSgA==",
348 | "cpu": [
349 | "x64"
350 | ],
351 | "dev": true,
352 | "optional": true,
353 | "os": [
354 | "linux"
355 | ],
356 | "engines": {
357 | "node": ">=12"
358 | }
359 | },
360 | "node_modules/@esbuild/netbsd-x64": {
361 | "version": "0.19.10",
362 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.10.tgz",
363 | "integrity": "sha512-ACbZ0vXy9zksNArWlk2c38NdKg25+L9pr/mVaj9SUq6lHZu/35nx2xnQVRGLrC1KKQqJKRIB0q8GspiHI3J80Q==",
364 | "cpu": [
365 | "x64"
366 | ],
367 | "dev": true,
368 | "optional": true,
369 | "os": [
370 | "netbsd"
371 | ],
372 | "engines": {
373 | "node": ">=12"
374 | }
375 | },
376 | "node_modules/@esbuild/openbsd-x64": {
377 | "version": "0.19.10",
378 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.10.tgz",
379 | "integrity": "sha512-PxcgvjdSjtgPMiPQrM3pwSaG4kGphP+bLSb+cihuP0LYdZv1epbAIecHVl5sD3npkfYBZ0ZnOjR878I7MdJDFg==",
380 | "cpu": [
381 | "x64"
382 | ],
383 | "dev": true,
384 | "optional": true,
385 | "os": [
386 | "openbsd"
387 | ],
388 | "engines": {
389 | "node": ">=12"
390 | }
391 | },
392 | "node_modules/@esbuild/sunos-x64": {
393 | "version": "0.19.10",
394 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.10.tgz",
395 | "integrity": "sha512-ZkIOtrRL8SEJjr+VHjmW0znkPs+oJXhlJbNwfI37rvgeMtk3sxOQevXPXjmAPZPigVTncvFqLMd+uV0IBSEzqA==",
396 | "cpu": [
397 | "x64"
398 | ],
399 | "dev": true,
400 | "optional": true,
401 | "os": [
402 | "sunos"
403 | ],
404 | "engines": {
405 | "node": ">=12"
406 | }
407 | },
408 | "node_modules/@esbuild/win32-arm64": {
409 | "version": "0.19.10",
410 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.10.tgz",
411 | "integrity": "sha512-+Sa4oTDbpBfGpl3Hn3XiUe4f8TU2JF7aX8cOfqFYMMjXp6ma6NJDztl5FDG8Ezx0OjwGikIHw+iA54YLDNNVfw==",
412 | "cpu": [
413 | "arm64"
414 | ],
415 | "dev": true,
416 | "optional": true,
417 | "os": [
418 | "win32"
419 | ],
420 | "engines": {
421 | "node": ">=12"
422 | }
423 | },
424 | "node_modules/@esbuild/win32-ia32": {
425 | "version": "0.19.10",
426 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.10.tgz",
427 | "integrity": "sha512-EOGVLK1oWMBXgfttJdPHDTiivYSjX6jDNaATeNOaCOFEVcfMjtbx7WVQwPSE1eIfCp/CaSF2nSrDtzc4I9f8TQ==",
428 | "cpu": [
429 | "ia32"
430 | ],
431 | "dev": true,
432 | "optional": true,
433 | "os": [
434 | "win32"
435 | ],
436 | "engines": {
437 | "node": ">=12"
438 | }
439 | },
440 | "node_modules/@esbuild/win32-x64": {
441 | "version": "0.19.10",
442 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.10.tgz",
443 | "integrity": "sha512-whqLG6Sc70AbU73fFYvuYzaE4MNMBIlR1Y/IrUeOXFrWHxBEjjbZaQ3IXIQS8wJdAzue2GwYZCjOrgrU1oUHoA==",
444 | "cpu": [
445 | "x64"
446 | ],
447 | "dev": true,
448 | "optional": true,
449 | "os": [
450 | "win32"
451 | ],
452 | "engines": {
453 | "node": ">=12"
454 | }
455 | },
456 | "node_modules/@isaacs/cliui": {
457 | "version": "8.0.2",
458 | "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz",
459 | "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==",
460 | "dependencies": {
461 | "string-width": "^5.1.2",
462 | "string-width-cjs": "npm:string-width@^4.2.0",
463 | "strip-ansi": "^7.0.1",
464 | "strip-ansi-cjs": "npm:strip-ansi@^6.0.1",
465 | "wrap-ansi": "^8.1.0",
466 | "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0"
467 | },
468 | "engines": {
469 | "node": ">=12"
470 | }
471 | },
472 | "node_modules/@istanbuljs/schema": {
473 | "version": "0.1.3",
474 | "resolved": "https://registry.npmjs.org/@istanbuljs/schema/-/schema-0.1.3.tgz",
475 | "integrity": "sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==",
476 | "dev": true,
477 | "engines": {
478 | "node": ">=8"
479 | }
480 | },
481 | "node_modules/@jest/schemas": {
482 | "version": "29.6.3",
483 | "resolved": "https://registry.npmjs.org/@jest/schemas/-/schemas-29.6.3.tgz",
484 | "integrity": "sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==",
485 | "dev": true,
486 | "dependencies": {
487 | "@sinclair/typebox": "^0.27.8"
488 | },
489 | "engines": {
490 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
491 | }
492 | },
493 | "node_modules/@jridgewell/gen-mapping": {
494 | "version": "0.3.3",
495 | "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz",
496 | "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==",
497 | "dev": true,
498 | "dependencies": {
499 | "@jridgewell/set-array": "^1.0.1",
500 | "@jridgewell/sourcemap-codec": "^1.4.10",
501 | "@jridgewell/trace-mapping": "^0.3.9"
502 | },
503 | "engines": {
504 | "node": ">=6.0.0"
505 | }
506 | },
507 | "node_modules/@jridgewell/resolve-uri": {
508 | "version": "3.1.1",
509 | "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz",
510 | "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==",
511 | "dev": true,
512 | "engines": {
513 | "node": ">=6.0.0"
514 | }
515 | },
516 | "node_modules/@jridgewell/set-array": {
517 | "version": "1.1.2",
518 | "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz",
519 | "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==",
520 | "dev": true,
521 | "engines": {
522 | "node": ">=6.0.0"
523 | }
524 | },
525 | "node_modules/@jridgewell/sourcemap-codec": {
526 | "version": "1.4.15",
527 | "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz",
528 | "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==",
529 | "dev": true
530 | },
531 | "node_modules/@jridgewell/trace-mapping": {
532 | "version": "0.3.20",
533 | "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.20.tgz",
534 | "integrity": "sha512-R8LcPeWZol2zR8mmH3JeKQ6QRCFb7XgUhV9ZlGhHLGyg4wpPiPZNQOOWhFZhxKw8u//yTbNGI42Bx/3paXEQ+Q==",
535 | "dev": true,
536 | "dependencies": {
537 | "@jridgewell/resolve-uri": "^3.1.0",
538 | "@jridgewell/sourcemap-codec": "^1.4.14"
539 | }
540 | },
541 | "node_modules/@nodelib/fs.scandir": {
542 | "version": "2.1.5",
543 | "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
544 | "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
545 | "dev": true,
546 | "dependencies": {
547 | "@nodelib/fs.stat": "2.0.5",
548 | "run-parallel": "^1.1.9"
549 | },
550 | "engines": {
551 | "node": ">= 8"
552 | }
553 | },
554 | "node_modules/@nodelib/fs.stat": {
555 | "version": "2.0.5",
556 | "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
557 | "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
558 | "dev": true,
559 | "engines": {
560 | "node": ">= 8"
561 | }
562 | },
563 | "node_modules/@nodelib/fs.walk": {
564 | "version": "1.2.8",
565 | "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
566 | "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
567 | "dev": true,
568 | "dependencies": {
569 | "@nodelib/fs.scandir": "2.1.5",
570 | "fastq": "^1.6.0"
571 | },
572 | "engines": {
573 | "node": ">= 8"
574 | }
575 | },
576 | "node_modules/@pkgjs/parseargs": {
577 | "version": "0.11.0",
578 | "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz",
579 | "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==",
580 | "optional": true,
581 | "engines": {
582 | "node": ">=14"
583 | }
584 | },
585 | "node_modules/@rollup/rollup-android-arm-eabi": {
586 | "version": "4.14.2",
587 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.14.2.tgz",
588 | "integrity": "sha512-ahxSgCkAEk+P/AVO0vYr7DxOD3CwAQrT0Go9BJyGQ9Ef0QxVOfjDZMiF4Y2s3mLyPrjonchIMH/tbWHucJMykQ==",
589 | "cpu": [
590 | "arm"
591 | ],
592 | "dev": true,
593 | "optional": true,
594 | "os": [
595 | "android"
596 | ]
597 | },
598 | "node_modules/@rollup/rollup-android-arm64": {
599 | "version": "4.14.2",
600 | "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.14.2.tgz",
601 | "integrity": "sha512-lAarIdxZWbFSHFSDao9+I/F5jDaKyCqAPMq5HqnfpBw8dKDiCaaqM0lq5h1pQTLeIqueeay4PieGR5jGZMWprw==",
602 | "cpu": [
603 | "arm64"
604 | ],
605 | "dev": true,
606 | "optional": true,
607 | "os": [
608 | "android"
609 | ]
610 | },
611 | "node_modules/@rollup/rollup-darwin-arm64": {
612 | "version": "4.14.2",
613 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.14.2.tgz",
614 | "integrity": "sha512-SWsr8zEUk82KSqquIMgZEg2GE5mCSfr9sE/thDROkX6pb3QQWPp8Vw8zOq2GyxZ2t0XoSIUlvHDkrf5Gmf7x3Q==",
615 | "cpu": [
616 | "arm64"
617 | ],
618 | "dev": true,
619 | "optional": true,
620 | "os": [
621 | "darwin"
622 | ]
623 | },
624 | "node_modules/@rollup/rollup-darwin-x64": {
625 | "version": "4.14.2",
626 | "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.14.2.tgz",
627 | "integrity": "sha512-o/HAIrQq0jIxJAhgtIvV5FWviYK4WB0WwV91SLUnsliw1lSAoLsmgEEgRWzDguAFeUEUUoIWXiJrPqU7vGiVkA==",
628 | "cpu": [
629 | "x64"
630 | ],
631 | "dev": true,
632 | "optional": true,
633 | "os": [
634 | "darwin"
635 | ]
636 | },
637 | "node_modules/@rollup/rollup-linux-arm-gnueabihf": {
638 | "version": "4.14.2",
639 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.14.2.tgz",
640 | "integrity": "sha512-nwlJ65UY9eGq91cBi6VyDfArUJSKOYt5dJQBq8xyLhvS23qO+4Nr/RreibFHjP6t+5ap2ohZrUJcHv5zk5ju/g==",
641 | "cpu": [
642 | "arm"
643 | ],
644 | "dev": true,
645 | "optional": true,
646 | "os": [
647 | "linux"
648 | ]
649 | },
650 | "node_modules/@rollup/rollup-linux-arm64-gnu": {
651 | "version": "4.14.2",
652 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.14.2.tgz",
653 | "integrity": "sha512-Pg5TxxO2IVlMj79+c/9G0LREC9SY3HM+pfAwX7zj5/cAuwrbfj2Wv9JbMHIdPCfQpYsI4g9mE+2Bw/3aeSs2rQ==",
654 | "cpu": [
655 | "arm64"
656 | ],
657 | "dev": true,
658 | "optional": true,
659 | "os": [
660 | "linux"
661 | ]
662 | },
663 | "node_modules/@rollup/rollup-linux-arm64-musl": {
664 | "version": "4.14.2",
665 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.14.2.tgz",
666 | "integrity": "sha512-cAOTjGNm84gc6tS02D1EXtG7tDRsVSDTBVXOLbj31DkwfZwgTPYZ6aafSU7rD/4R2a34JOwlF9fQayuTSkoclA==",
667 | "cpu": [
668 | "arm64"
669 | ],
670 | "dev": true,
671 | "optional": true,
672 | "os": [
673 | "linux"
674 | ]
675 | },
676 | "node_modules/@rollup/rollup-linux-powerpc64le-gnu": {
677 | "version": "4.14.2",
678 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.14.2.tgz",
679 | "integrity": "sha512-4RyT6v1kXb7C0fn6zV33rvaX05P0zHoNzaXI/5oFHklfKm602j+N4mn2YvoezQViRLPnxP8M1NaY4s/5kXO5cw==",
680 | "cpu": [
681 | "ppc64"
682 | ],
683 | "dev": true,
684 | "optional": true,
685 | "os": [
686 | "linux"
687 | ]
688 | },
689 | "node_modules/@rollup/rollup-linux-riscv64-gnu": {
690 | "version": "4.14.2",
691 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.14.2.tgz",
692 | "integrity": "sha512-KNUH6jC/vRGAKSorySTyc/yRYlCwN/5pnMjXylfBniwtJx5O7X17KG/0efj8XM3TZU7raYRXJFFReOzNmL1n1w==",
693 | "cpu": [
694 | "riscv64"
695 | ],
696 | "dev": true,
697 | "optional": true,
698 | "os": [
699 | "linux"
700 | ]
701 | },
702 | "node_modules/@rollup/rollup-linux-s390x-gnu": {
703 | "version": "4.14.2",
704 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.14.2.tgz",
705 | "integrity": "sha512-xPV4y73IBEXToNPa3h5lbgXOi/v0NcvKxU0xejiFw6DtIYQqOTMhZ2DN18/HrrP0PmiL3rGtRG9gz1QE8vFKXQ==",
706 | "cpu": [
707 | "s390x"
708 | ],
709 | "dev": true,
710 | "optional": true,
711 | "os": [
712 | "linux"
713 | ]
714 | },
715 | "node_modules/@rollup/rollup-linux-x64-gnu": {
716 | "version": "4.14.2",
717 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.14.2.tgz",
718 | "integrity": "sha512-QBhtr07iFGmF9egrPOWyO5wciwgtzKkYPNLVCFZTmr4TWmY0oY2Dm/bmhHjKRwZoGiaKdNcKhFtUMBKvlchH+Q==",
719 | "cpu": [
720 | "x64"
721 | ],
722 | "dev": true,
723 | "optional": true,
724 | "os": [
725 | "linux"
726 | ]
727 | },
728 | "node_modules/@rollup/rollup-linux-x64-musl": {
729 | "version": "4.14.2",
730 | "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.14.2.tgz",
731 | "integrity": "sha512-8zfsQRQGH23O6qazZSFY5jP5gt4cFvRuKTpuBsC1ZnSWxV8ZKQpPqOZIUtdfMOugCcBvFGRa1pDC/tkf19EgBw==",
732 | "cpu": [
733 | "x64"
734 | ],
735 | "dev": true,
736 | "optional": true,
737 | "os": [
738 | "linux"
739 | ]
740 | },
741 | "node_modules/@rollup/rollup-win32-arm64-msvc": {
742 | "version": "4.14.2",
743 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.14.2.tgz",
744 | "integrity": "sha512-H4s8UjgkPnlChl6JF5empNvFHp77Jx+Wfy2EtmYPe9G22XV+PMuCinZVHurNe8ggtwoaohxARJZbaH/3xjB/FA==",
745 | "cpu": [
746 | "arm64"
747 | ],
748 | "dev": true,
749 | "optional": true,
750 | "os": [
751 | "win32"
752 | ]
753 | },
754 | "node_modules/@rollup/rollup-win32-ia32-msvc": {
755 | "version": "4.14.2",
756 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.14.2.tgz",
757 | "integrity": "sha512-djqpAjm/i8erWYF0K6UY4kRO3X5+T4TypIqw60Q8MTqSBaQNpNXDhxdjpZ3ikgb+wn99svA7jxcXpiyg9MUsdw==",
758 | "cpu": [
759 | "ia32"
760 | ],
761 | "dev": true,
762 | "optional": true,
763 | "os": [
764 | "win32"
765 | ]
766 | },
767 | "node_modules/@rollup/rollup-win32-x64-msvc": {
768 | "version": "4.14.2",
769 | "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.14.2.tgz",
770 | "integrity": "sha512-teAqzLT0yTYZa8ZP7zhFKEx4cotS8Tkk5XiqNMJhD4CpaWB1BHARE4Qy+RzwnXvSAYv+Q3jAqCVBS+PS+Yee8Q==",
771 | "cpu": [
772 | "x64"
773 | ],
774 | "dev": true,
775 | "optional": true,
776 | "os": [
777 | "win32"
778 | ]
779 | },
780 | "node_modules/@sinclair/typebox": {
781 | "version": "0.27.8",
782 | "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz",
783 | "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==",
784 | "dev": true
785 | },
786 | "node_modules/@types/estree": {
787 | "version": "1.0.5",
788 | "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz",
789 | "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==",
790 | "dev": true
791 | },
792 | "node_modules/@types/istanbul-lib-coverage": {
793 | "version": "2.0.6",
794 | "resolved": "https://registry.npmjs.org/@types/istanbul-lib-coverage/-/istanbul-lib-coverage-2.0.6.tgz",
795 | "integrity": "sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==",
796 | "dev": true
797 | },
798 | "node_modules/@types/node": {
799 | "version": "20.10.5",
800 | "resolved": "https://registry.npmjs.org/@types/node/-/node-20.10.5.tgz",
801 | "integrity": "sha512-nNPsNE65wjMxEKI93yOP+NPGGBJz/PoN3kZsVLee0XMiJolxSekEVD8wRwBUBqkwc7UWop0edW50yrCQW4CyRw==",
802 | "dev": true,
803 | "dependencies": {
804 | "undici-types": "~5.26.4"
805 | }
806 | },
807 | "node_modules/@vitest/coverage-v8": {
808 | "version": "1.1.0",
809 | "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-1.1.0.tgz",
810 | "integrity": "sha512-kHQRk70vTdXAyQY2C0vKOHPyQD/R6IUzcGdO4vCuyr4alE5Yg1+Sk2jSdjlIrTTXdcNEs+ReWVM09mmSFJpzyQ==",
811 | "dev": true,
812 | "dependencies": {
813 | "@ampproject/remapping": "^2.2.1",
814 | "@bcoe/v8-coverage": "^0.2.3",
815 | "debug": "^4.3.4",
816 | "istanbul-lib-coverage": "^3.2.2",
817 | "istanbul-lib-report": "^3.0.1",
818 | "istanbul-lib-source-maps": "^4.0.1",
819 | "istanbul-reports": "^3.1.6",
820 | "magic-string": "^0.30.5",
821 | "magicast": "^0.3.2",
822 | "picocolors": "^1.0.0",
823 | "std-env": "^3.5.0",
824 | "test-exclude": "^6.0.0",
825 | "v8-to-istanbul": "^9.2.0"
826 | },
827 | "funding": {
828 | "url": "https://opencollective.com/vitest"
829 | },
830 | "peerDependencies": {
831 | "vitest": "^1.0.0"
832 | }
833 | },
834 | "node_modules/@vitest/expect": {
835 | "version": "1.1.0",
836 | "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-1.1.0.tgz",
837 | "integrity": "sha512-9IE2WWkcJo2BR9eqtY5MIo3TPmS50Pnwpm66A6neb2hvk/QSLfPXBz2qdiwUOQkwyFuuXEUj5380CbwfzW4+/w==",
838 | "dev": true,
839 | "dependencies": {
840 | "@vitest/spy": "1.1.0",
841 | "@vitest/utils": "1.1.0",
842 | "chai": "^4.3.10"
843 | },
844 | "funding": {
845 | "url": "https://opencollective.com/vitest"
846 | }
847 | },
848 | "node_modules/@vitest/runner": {
849 | "version": "1.1.0",
850 | "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-1.1.0.tgz",
851 | "integrity": "sha512-zdNLJ00pm5z/uhbWF6aeIJCGMSyTyWImy3Fcp9piRGvueERFlQFbUwCpzVce79OLm2UHk9iwaMSOaU9jVHgNVw==",
852 | "dev": true,
853 | "dependencies": {
854 | "@vitest/utils": "1.1.0",
855 | "p-limit": "^5.0.0",
856 | "pathe": "^1.1.1"
857 | },
858 | "funding": {
859 | "url": "https://opencollective.com/vitest"
860 | }
861 | },
862 | "node_modules/@vitest/snapshot": {
863 | "version": "1.1.0",
864 | "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-1.1.0.tgz",
865 | "integrity": "sha512-5O/wyZg09V5qmNmAlUgCBqflvn2ylgsWJRRuPrnHEfDNT6tQpQ8O1isNGgo+VxofISHqz961SG3iVvt3SPK/QQ==",
866 | "dev": true,
867 | "dependencies": {
868 | "magic-string": "^0.30.5",
869 | "pathe": "^1.1.1",
870 | "pretty-format": "^29.7.0"
871 | },
872 | "funding": {
873 | "url": "https://opencollective.com/vitest"
874 | }
875 | },
876 | "node_modules/@vitest/spy": {
877 | "version": "1.1.0",
878 | "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-1.1.0.tgz",
879 | "integrity": "sha512-sNOVSU/GE+7+P76qYo+VXdXhXffzWZcYIPQfmkiRxaNCSPiLANvQx5Mx6ZURJ/ndtEkUJEpvKLXqAYTKEY+lTg==",
880 | "dev": true,
881 | "dependencies": {
882 | "tinyspy": "^2.2.0"
883 | },
884 | "funding": {
885 | "url": "https://opencollective.com/vitest"
886 | }
887 | },
888 | "node_modules/@vitest/utils": {
889 | "version": "1.1.0",
890 | "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-1.1.0.tgz",
891 | "integrity": "sha512-z+s510fKmYz4Y41XhNs3vcuFTFhcij2YF7F8VQfMEYAAUfqQh0Zfg7+w9xdgFGhPf3tX3TicAe+8BDITk6ampQ==",
892 | "dev": true,
893 | "dependencies": {
894 | "diff-sequences": "^29.6.3",
895 | "loupe": "^2.3.7",
896 | "pretty-format": "^29.7.0"
897 | },
898 | "funding": {
899 | "url": "https://opencollective.com/vitest"
900 | }
901 | },
902 | "node_modules/@vue/compiler-core": {
903 | "version": "3.4.27",
904 | "resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.4.27.tgz",
905 | "integrity": "sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==",
906 | "dev": true,
907 | "dependencies": {
908 | "@babel/parser": "^7.24.4",
909 | "@vue/shared": "3.4.27",
910 | "entities": "^4.5.0",
911 | "estree-walker": "^2.0.2",
912 | "source-map-js": "^1.2.0"
913 | }
914 | },
915 | "node_modules/@vue/compiler-dom": {
916 | "version": "3.4.27",
917 | "resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.4.27.tgz",
918 | "integrity": "sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==",
919 | "dev": true,
920 | "dependencies": {
921 | "@vue/compiler-core": "3.4.27",
922 | "@vue/shared": "3.4.27"
923 | }
924 | },
925 | "node_modules/@vue/compiler-sfc": {
926 | "version": "3.4.27",
927 | "resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.4.27.tgz",
928 | "integrity": "sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==",
929 | "dev": true,
930 | "dependencies": {
931 | "@babel/parser": "^7.24.4",
932 | "@vue/compiler-core": "3.4.27",
933 | "@vue/compiler-dom": "3.4.27",
934 | "@vue/compiler-ssr": "3.4.27",
935 | "@vue/shared": "3.4.27",
936 | "estree-walker": "^2.0.2",
937 | "magic-string": "^0.30.10",
938 | "postcss": "^8.4.38",
939 | "source-map-js": "^1.2.0"
940 | }
941 | },
942 | "node_modules/@vue/compiler-ssr": {
943 | "version": "3.4.27",
944 | "resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.4.27.tgz",
945 | "integrity": "sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==",
946 | "dev": true,
947 | "dependencies": {
948 | "@vue/compiler-dom": "3.4.27",
949 | "@vue/shared": "3.4.27"
950 | }
951 | },
952 | "node_modules/@vue/reactivity": {
953 | "version": "3.4.27",
954 | "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.27.tgz",
955 | "integrity": "sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==",
956 | "dev": true,
957 | "dependencies": {
958 | "@vue/shared": "3.4.27"
959 | }
960 | },
961 | "node_modules/@vue/runtime-core": {
962 | "version": "3.4.27",
963 | "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.27.tgz",
964 | "integrity": "sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==",
965 | "dev": true,
966 | "dependencies": {
967 | "@vue/reactivity": "3.4.27",
968 | "@vue/shared": "3.4.27"
969 | }
970 | },
971 | "node_modules/@vue/runtime-dom": {
972 | "version": "3.4.27",
973 | "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.27.tgz",
974 | "integrity": "sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==",
975 | "dev": true,
976 | "dependencies": {
977 | "@vue/runtime-core": "3.4.27",
978 | "@vue/shared": "3.4.27",
979 | "csstype": "^3.1.3"
980 | }
981 | },
982 | "node_modules/@vue/server-renderer": {
983 | "version": "3.4.27",
984 | "resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.4.27.tgz",
985 | "integrity": "sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==",
986 | "dev": true,
987 | "dependencies": {
988 | "@vue/compiler-ssr": "3.4.27",
989 | "@vue/shared": "3.4.27"
990 | },
991 | "peerDependencies": {
992 | "vue": "3.4.27"
993 | }
994 | },
995 | "node_modules/@vue/shared": {
996 | "version": "3.4.27",
997 | "resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.4.27.tgz",
998 | "integrity": "sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==",
999 | "dev": true
1000 | },
1001 | "node_modules/acorn": {
1002 | "version": "8.11.2",
1003 | "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz",
1004 | "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==",
1005 | "dev": true,
1006 | "bin": {
1007 | "acorn": "bin/acorn"
1008 | },
1009 | "engines": {
1010 | "node": ">=0.4.0"
1011 | }
1012 | },
1013 | "node_modules/acorn-walk": {
1014 | "version": "8.3.1",
1015 | "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.1.tgz",
1016 | "integrity": "sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw==",
1017 | "dev": true,
1018 | "engines": {
1019 | "node": ">=0.4.0"
1020 | }
1021 | },
1022 | "node_modules/ansi-regex": {
1023 | "version": "6.0.1",
1024 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz",
1025 | "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==",
1026 | "engines": {
1027 | "node": ">=12"
1028 | },
1029 | "funding": {
1030 | "url": "https://github.com/chalk/ansi-regex?sponsor=1"
1031 | }
1032 | },
1033 | "node_modules/ansi-styles": {
1034 | "version": "5.2.0",
1035 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz",
1036 | "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==",
1037 | "dev": true,
1038 | "engines": {
1039 | "node": ">=10"
1040 | },
1041 | "funding": {
1042 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
1043 | }
1044 | },
1045 | "node_modules/any-promise": {
1046 | "version": "1.3.0",
1047 | "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz",
1048 | "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==",
1049 | "dev": true
1050 | },
1051 | "node_modules/anymatch": {
1052 | "version": "3.1.3",
1053 | "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz",
1054 | "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==",
1055 | "dev": true,
1056 | "dependencies": {
1057 | "normalize-path": "^3.0.0",
1058 | "picomatch": "^2.0.4"
1059 | },
1060 | "engines": {
1061 | "node": ">= 8"
1062 | }
1063 | },
1064 | "node_modules/array-union": {
1065 | "version": "2.1.0",
1066 | "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz",
1067 | "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==",
1068 | "dev": true,
1069 | "engines": {
1070 | "node": ">=8"
1071 | }
1072 | },
1073 | "node_modules/assertion-error": {
1074 | "version": "1.1.0",
1075 | "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz",
1076 | "integrity": "sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==",
1077 | "dev": true,
1078 | "engines": {
1079 | "node": "*"
1080 | }
1081 | },
1082 | "node_modules/balanced-match": {
1083 | "version": "1.0.2",
1084 | "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz",
1085 | "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw=="
1086 | },
1087 | "node_modules/binary-extensions": {
1088 | "version": "2.2.0",
1089 | "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz",
1090 | "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==",
1091 | "dev": true,
1092 | "engines": {
1093 | "node": ">=8"
1094 | }
1095 | },
1096 | "node_modules/brace-expansion": {
1097 | "version": "2.0.1",
1098 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
1099 | "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
1100 | "dependencies": {
1101 | "balanced-match": "^1.0.0"
1102 | }
1103 | },
1104 | "node_modules/braces": {
1105 | "version": "3.0.2",
1106 | "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz",
1107 | "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==",
1108 | "dev": true,
1109 | "dependencies": {
1110 | "fill-range": "^7.0.1"
1111 | },
1112 | "engines": {
1113 | "node": ">=8"
1114 | }
1115 | },
1116 | "node_modules/bundle-require": {
1117 | "version": "4.0.2",
1118 | "resolved": "https://registry.npmjs.org/bundle-require/-/bundle-require-4.0.2.tgz",
1119 | "integrity": "sha512-jwzPOChofl67PSTW2SGubV9HBQAhhR2i6nskiOThauo9dzwDUgOWQScFVaJkjEfYX+UXiD+LEx8EblQMc2wIag==",
1120 | "dev": true,
1121 | "dependencies": {
1122 | "load-tsconfig": "^0.2.3"
1123 | },
1124 | "engines": {
1125 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
1126 | },
1127 | "peerDependencies": {
1128 | "esbuild": ">=0.17"
1129 | }
1130 | },
1131 | "node_modules/cac": {
1132 | "version": "6.7.14",
1133 | "resolved": "https://registry.npmjs.org/cac/-/cac-6.7.14.tgz",
1134 | "integrity": "sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==",
1135 | "dev": true,
1136 | "engines": {
1137 | "node": ">=8"
1138 | }
1139 | },
1140 | "node_modules/chai": {
1141 | "version": "4.3.10",
1142 | "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.10.tgz",
1143 | "integrity": "sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==",
1144 | "dev": true,
1145 | "dependencies": {
1146 | "assertion-error": "^1.1.0",
1147 | "check-error": "^1.0.3",
1148 | "deep-eql": "^4.1.3",
1149 | "get-func-name": "^2.0.2",
1150 | "loupe": "^2.3.6",
1151 | "pathval": "^1.1.1",
1152 | "type-detect": "^4.0.8"
1153 | },
1154 | "engines": {
1155 | "node": ">=4"
1156 | }
1157 | },
1158 | "node_modules/check-error": {
1159 | "version": "1.0.3",
1160 | "resolved": "https://registry.npmjs.org/check-error/-/check-error-1.0.3.tgz",
1161 | "integrity": "sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==",
1162 | "dev": true,
1163 | "dependencies": {
1164 | "get-func-name": "^2.0.2"
1165 | },
1166 | "engines": {
1167 | "node": "*"
1168 | }
1169 | },
1170 | "node_modules/chokidar": {
1171 | "version": "3.5.3",
1172 | "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz",
1173 | "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==",
1174 | "dev": true,
1175 | "funding": [
1176 | {
1177 | "type": "individual",
1178 | "url": "https://paulmillr.com/funding/"
1179 | }
1180 | ],
1181 | "dependencies": {
1182 | "anymatch": "~3.1.2",
1183 | "braces": "~3.0.2",
1184 | "glob-parent": "~5.1.2",
1185 | "is-binary-path": "~2.1.0",
1186 | "is-glob": "~4.0.1",
1187 | "normalize-path": "~3.0.0",
1188 | "readdirp": "~3.6.0"
1189 | },
1190 | "engines": {
1191 | "node": ">= 8.10.0"
1192 | },
1193 | "optionalDependencies": {
1194 | "fsevents": "~2.3.2"
1195 | }
1196 | },
1197 | "node_modules/color-convert": {
1198 | "version": "2.0.1",
1199 | "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz",
1200 | "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==",
1201 | "dependencies": {
1202 | "color-name": "~1.1.4"
1203 | },
1204 | "engines": {
1205 | "node": ">=7.0.0"
1206 | }
1207 | },
1208 | "node_modules/color-name": {
1209 | "version": "1.1.4",
1210 | "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz",
1211 | "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA=="
1212 | },
1213 | "node_modules/commander": {
1214 | "version": "4.1.1",
1215 | "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz",
1216 | "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==",
1217 | "dev": true,
1218 | "engines": {
1219 | "node": ">= 6"
1220 | }
1221 | },
1222 | "node_modules/concat-map": {
1223 | "version": "0.0.1",
1224 | "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz",
1225 | "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==",
1226 | "dev": true
1227 | },
1228 | "node_modules/convert-source-map": {
1229 | "version": "2.0.0",
1230 | "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-2.0.0.tgz",
1231 | "integrity": "sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==",
1232 | "dev": true
1233 | },
1234 | "node_modules/cross-spawn": {
1235 | "version": "7.0.3",
1236 | "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz",
1237 | "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==",
1238 | "dependencies": {
1239 | "path-key": "^3.1.0",
1240 | "shebang-command": "^2.0.0",
1241 | "which": "^2.0.1"
1242 | },
1243 | "engines": {
1244 | "node": ">= 8"
1245 | }
1246 | },
1247 | "node_modules/csstype": {
1248 | "version": "3.1.3",
1249 | "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz",
1250 | "integrity": "sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==",
1251 | "dev": true
1252 | },
1253 | "node_modules/debug": {
1254 | "version": "4.3.4",
1255 | "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz",
1256 | "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==",
1257 | "dev": true,
1258 | "dependencies": {
1259 | "ms": "2.1.2"
1260 | },
1261 | "engines": {
1262 | "node": ">=6.0"
1263 | },
1264 | "peerDependenciesMeta": {
1265 | "supports-color": {
1266 | "optional": true
1267 | }
1268 | }
1269 | },
1270 | "node_modules/deep-eql": {
1271 | "version": "4.1.3",
1272 | "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-4.1.3.tgz",
1273 | "integrity": "sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==",
1274 | "dev": true,
1275 | "dependencies": {
1276 | "type-detect": "^4.0.0"
1277 | },
1278 | "engines": {
1279 | "node": ">=6"
1280 | }
1281 | },
1282 | "node_modules/diff-sequences": {
1283 | "version": "29.6.3",
1284 | "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz",
1285 | "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==",
1286 | "dev": true,
1287 | "engines": {
1288 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
1289 | }
1290 | },
1291 | "node_modules/dir-glob": {
1292 | "version": "3.0.1",
1293 | "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz",
1294 | "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==",
1295 | "dev": true,
1296 | "dependencies": {
1297 | "path-type": "^4.0.0"
1298 | },
1299 | "engines": {
1300 | "node": ">=8"
1301 | }
1302 | },
1303 | "node_modules/eastasianwidth": {
1304 | "version": "0.2.0",
1305 | "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
1306 | "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA=="
1307 | },
1308 | "node_modules/emoji-regex": {
1309 | "version": "9.2.2",
1310 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz",
1311 | "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg=="
1312 | },
1313 | "node_modules/entities": {
1314 | "version": "4.5.0",
1315 | "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz",
1316 | "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==",
1317 | "dev": true,
1318 | "engines": {
1319 | "node": ">=0.12"
1320 | },
1321 | "funding": {
1322 | "url": "https://github.com/fb55/entities?sponsor=1"
1323 | }
1324 | },
1325 | "node_modules/esbuild": {
1326 | "version": "0.19.10",
1327 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.10.tgz",
1328 | "integrity": "sha512-S1Y27QGt/snkNYrRcswgRFqZjaTG5a5xM3EQo97uNBnH505pdzSNe/HLBq1v0RO7iK/ngdbhJB6mDAp0OK+iUA==",
1329 | "dev": true,
1330 | "hasInstallScript": true,
1331 | "bin": {
1332 | "esbuild": "bin/esbuild"
1333 | },
1334 | "engines": {
1335 | "node": ">=12"
1336 | },
1337 | "optionalDependencies": {
1338 | "@esbuild/aix-ppc64": "0.19.10",
1339 | "@esbuild/android-arm": "0.19.10",
1340 | "@esbuild/android-arm64": "0.19.10",
1341 | "@esbuild/android-x64": "0.19.10",
1342 | "@esbuild/darwin-arm64": "0.19.10",
1343 | "@esbuild/darwin-x64": "0.19.10",
1344 | "@esbuild/freebsd-arm64": "0.19.10",
1345 | "@esbuild/freebsd-x64": "0.19.10",
1346 | "@esbuild/linux-arm": "0.19.10",
1347 | "@esbuild/linux-arm64": "0.19.10",
1348 | "@esbuild/linux-ia32": "0.19.10",
1349 | "@esbuild/linux-loong64": "0.19.10",
1350 | "@esbuild/linux-mips64el": "0.19.10",
1351 | "@esbuild/linux-ppc64": "0.19.10",
1352 | "@esbuild/linux-riscv64": "0.19.10",
1353 | "@esbuild/linux-s390x": "0.19.10",
1354 | "@esbuild/linux-x64": "0.19.10",
1355 | "@esbuild/netbsd-x64": "0.19.10",
1356 | "@esbuild/openbsd-x64": "0.19.10",
1357 | "@esbuild/sunos-x64": "0.19.10",
1358 | "@esbuild/win32-arm64": "0.19.10",
1359 | "@esbuild/win32-ia32": "0.19.10",
1360 | "@esbuild/win32-x64": "0.19.10"
1361 | }
1362 | },
1363 | "node_modules/estree-walker": {
1364 | "version": "2.0.2",
1365 | "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz",
1366 | "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==",
1367 | "dev": true
1368 | },
1369 | "node_modules/execa": {
1370 | "version": "5.1.1",
1371 | "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz",
1372 | "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==",
1373 | "dev": true,
1374 | "dependencies": {
1375 | "cross-spawn": "^7.0.3",
1376 | "get-stream": "^6.0.0",
1377 | "human-signals": "^2.1.0",
1378 | "is-stream": "^2.0.0",
1379 | "merge-stream": "^2.0.0",
1380 | "npm-run-path": "^4.0.1",
1381 | "onetime": "^5.1.2",
1382 | "signal-exit": "^3.0.3",
1383 | "strip-final-newline": "^2.0.0"
1384 | },
1385 | "engines": {
1386 | "node": ">=10"
1387 | },
1388 | "funding": {
1389 | "url": "https://github.com/sindresorhus/execa?sponsor=1"
1390 | }
1391 | },
1392 | "node_modules/execa/node_modules/signal-exit": {
1393 | "version": "3.0.7",
1394 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz",
1395 | "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==",
1396 | "dev": true
1397 | },
1398 | "node_modules/fast-glob": {
1399 | "version": "3.3.2",
1400 | "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
1401 | "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
1402 | "dev": true,
1403 | "dependencies": {
1404 | "@nodelib/fs.stat": "^2.0.2",
1405 | "@nodelib/fs.walk": "^1.2.3",
1406 | "glob-parent": "^5.1.2",
1407 | "merge2": "^1.3.0",
1408 | "micromatch": "^4.0.4"
1409 | },
1410 | "engines": {
1411 | "node": ">=8.6.0"
1412 | }
1413 | },
1414 | "node_modules/fastq": {
1415 | "version": "1.16.0",
1416 | "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz",
1417 | "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==",
1418 | "dev": true,
1419 | "dependencies": {
1420 | "reusify": "^1.0.4"
1421 | }
1422 | },
1423 | "node_modules/fill-range": {
1424 | "version": "7.0.1",
1425 | "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz",
1426 | "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==",
1427 | "dev": true,
1428 | "dependencies": {
1429 | "to-regex-range": "^5.0.1"
1430 | },
1431 | "engines": {
1432 | "node": ">=8"
1433 | }
1434 | },
1435 | "node_modules/foreground-child": {
1436 | "version": "3.1.1",
1437 | "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz",
1438 | "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==",
1439 | "dependencies": {
1440 | "cross-spawn": "^7.0.0",
1441 | "signal-exit": "^4.0.1"
1442 | },
1443 | "engines": {
1444 | "node": ">=14"
1445 | },
1446 | "funding": {
1447 | "url": "https://github.com/sponsors/isaacs"
1448 | }
1449 | },
1450 | "node_modules/fs.realpath": {
1451 | "version": "1.0.0",
1452 | "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
1453 | "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==",
1454 | "dev": true
1455 | },
1456 | "node_modules/fsevents": {
1457 | "version": "2.3.3",
1458 | "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz",
1459 | "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==",
1460 | "dev": true,
1461 | "hasInstallScript": true,
1462 | "optional": true,
1463 | "os": [
1464 | "darwin"
1465 | ],
1466 | "engines": {
1467 | "node": "^8.16.0 || ^10.6.0 || >=11.0.0"
1468 | }
1469 | },
1470 | "node_modules/get-func-name": {
1471 | "version": "2.0.2",
1472 | "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz",
1473 | "integrity": "sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==",
1474 | "dev": true,
1475 | "engines": {
1476 | "node": "*"
1477 | }
1478 | },
1479 | "node_modules/get-stream": {
1480 | "version": "6.0.1",
1481 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz",
1482 | "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==",
1483 | "dev": true,
1484 | "engines": {
1485 | "node": ">=10"
1486 | },
1487 | "funding": {
1488 | "url": "https://github.com/sponsors/sindresorhus"
1489 | }
1490 | },
1491 | "node_modules/glob": {
1492 | "version": "10.3.10",
1493 | "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz",
1494 | "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==",
1495 | "dependencies": {
1496 | "foreground-child": "^3.1.0",
1497 | "jackspeak": "^2.3.5",
1498 | "minimatch": "^9.0.1",
1499 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0",
1500 | "path-scurry": "^1.10.1"
1501 | },
1502 | "bin": {
1503 | "glob": "dist/esm/bin.mjs"
1504 | },
1505 | "engines": {
1506 | "node": ">=16 || 14 >=14.17"
1507 | },
1508 | "funding": {
1509 | "url": "https://github.com/sponsors/isaacs"
1510 | }
1511 | },
1512 | "node_modules/glob-parent": {
1513 | "version": "5.1.2",
1514 | "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
1515 | "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
1516 | "dev": true,
1517 | "dependencies": {
1518 | "is-glob": "^4.0.1"
1519 | },
1520 | "engines": {
1521 | "node": ">= 6"
1522 | }
1523 | },
1524 | "node_modules/globby": {
1525 | "version": "11.1.0",
1526 | "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz",
1527 | "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==",
1528 | "dev": true,
1529 | "dependencies": {
1530 | "array-union": "^2.1.0",
1531 | "dir-glob": "^3.0.1",
1532 | "fast-glob": "^3.2.9",
1533 | "ignore": "^5.2.0",
1534 | "merge2": "^1.4.1",
1535 | "slash": "^3.0.0"
1536 | },
1537 | "engines": {
1538 | "node": ">=10"
1539 | },
1540 | "funding": {
1541 | "url": "https://github.com/sponsors/sindresorhus"
1542 | }
1543 | },
1544 | "node_modules/has-flag": {
1545 | "version": "4.0.0",
1546 | "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz",
1547 | "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==",
1548 | "dev": true,
1549 | "engines": {
1550 | "node": ">=8"
1551 | }
1552 | },
1553 | "node_modules/html-escaper": {
1554 | "version": "2.0.2",
1555 | "resolved": "https://registry.npmjs.org/html-escaper/-/html-escaper-2.0.2.tgz",
1556 | "integrity": "sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==",
1557 | "dev": true
1558 | },
1559 | "node_modules/human-signals": {
1560 | "version": "2.1.0",
1561 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz",
1562 | "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==",
1563 | "dev": true,
1564 | "engines": {
1565 | "node": ">=10.17.0"
1566 | }
1567 | },
1568 | "node_modules/ignore": {
1569 | "version": "5.3.0",
1570 | "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz",
1571 | "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==",
1572 | "dev": true,
1573 | "engines": {
1574 | "node": ">= 4"
1575 | }
1576 | },
1577 | "node_modules/inflight": {
1578 | "version": "1.0.6",
1579 | "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz",
1580 | "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==",
1581 | "dev": true,
1582 | "dependencies": {
1583 | "once": "^1.3.0",
1584 | "wrappy": "1"
1585 | }
1586 | },
1587 | "node_modules/inherits": {
1588 | "version": "2.0.4",
1589 | "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz",
1590 | "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==",
1591 | "dev": true
1592 | },
1593 | "node_modules/is-binary-path": {
1594 | "version": "2.1.0",
1595 | "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz",
1596 | "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==",
1597 | "dev": true,
1598 | "dependencies": {
1599 | "binary-extensions": "^2.0.0"
1600 | },
1601 | "engines": {
1602 | "node": ">=8"
1603 | }
1604 | },
1605 | "node_modules/is-extglob": {
1606 | "version": "2.1.1",
1607 | "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz",
1608 | "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==",
1609 | "dev": true,
1610 | "engines": {
1611 | "node": ">=0.10.0"
1612 | }
1613 | },
1614 | "node_modules/is-fullwidth-code-point": {
1615 | "version": "3.0.0",
1616 | "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz",
1617 | "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==",
1618 | "engines": {
1619 | "node": ">=8"
1620 | }
1621 | },
1622 | "node_modules/is-glob": {
1623 | "version": "4.0.3",
1624 | "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz",
1625 | "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==",
1626 | "dev": true,
1627 | "dependencies": {
1628 | "is-extglob": "^2.1.1"
1629 | },
1630 | "engines": {
1631 | "node": ">=0.10.0"
1632 | }
1633 | },
1634 | "node_modules/is-number": {
1635 | "version": "7.0.0",
1636 | "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz",
1637 | "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==",
1638 | "dev": true,
1639 | "engines": {
1640 | "node": ">=0.12.0"
1641 | }
1642 | },
1643 | "node_modules/is-stream": {
1644 | "version": "2.0.1",
1645 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-2.0.1.tgz",
1646 | "integrity": "sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==",
1647 | "dev": true,
1648 | "engines": {
1649 | "node": ">=8"
1650 | },
1651 | "funding": {
1652 | "url": "https://github.com/sponsors/sindresorhus"
1653 | }
1654 | },
1655 | "node_modules/isexe": {
1656 | "version": "2.0.0",
1657 | "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz",
1658 | "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw=="
1659 | },
1660 | "node_modules/istanbul-lib-coverage": {
1661 | "version": "3.2.2",
1662 | "resolved": "https://registry.npmjs.org/istanbul-lib-coverage/-/istanbul-lib-coverage-3.2.2.tgz",
1663 | "integrity": "sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==",
1664 | "dev": true,
1665 | "engines": {
1666 | "node": ">=8"
1667 | }
1668 | },
1669 | "node_modules/istanbul-lib-report": {
1670 | "version": "3.0.1",
1671 | "resolved": "https://registry.npmjs.org/istanbul-lib-report/-/istanbul-lib-report-3.0.1.tgz",
1672 | "integrity": "sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==",
1673 | "dev": true,
1674 | "dependencies": {
1675 | "istanbul-lib-coverage": "^3.0.0",
1676 | "make-dir": "^4.0.0",
1677 | "supports-color": "^7.1.0"
1678 | },
1679 | "engines": {
1680 | "node": ">=10"
1681 | }
1682 | },
1683 | "node_modules/istanbul-lib-source-maps": {
1684 | "version": "4.0.1",
1685 | "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz",
1686 | "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==",
1687 | "dev": true,
1688 | "dependencies": {
1689 | "debug": "^4.1.1",
1690 | "istanbul-lib-coverage": "^3.0.0",
1691 | "source-map": "^0.6.1"
1692 | },
1693 | "engines": {
1694 | "node": ">=10"
1695 | }
1696 | },
1697 | "node_modules/istanbul-reports": {
1698 | "version": "3.1.6",
1699 | "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz",
1700 | "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==",
1701 | "dev": true,
1702 | "dependencies": {
1703 | "html-escaper": "^2.0.0",
1704 | "istanbul-lib-report": "^3.0.0"
1705 | },
1706 | "engines": {
1707 | "node": ">=8"
1708 | }
1709 | },
1710 | "node_modules/jackspeak": {
1711 | "version": "2.3.6",
1712 | "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz",
1713 | "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==",
1714 | "dependencies": {
1715 | "@isaacs/cliui": "^8.0.2"
1716 | },
1717 | "engines": {
1718 | "node": ">=14"
1719 | },
1720 | "funding": {
1721 | "url": "https://github.com/sponsors/isaacs"
1722 | },
1723 | "optionalDependencies": {
1724 | "@pkgjs/parseargs": "^0.11.0"
1725 | }
1726 | },
1727 | "node_modules/joycon": {
1728 | "version": "3.1.1",
1729 | "resolved": "https://registry.npmjs.org/joycon/-/joycon-3.1.1.tgz",
1730 | "integrity": "sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==",
1731 | "dev": true,
1732 | "engines": {
1733 | "node": ">=10"
1734 | }
1735 | },
1736 | "node_modules/jsonc-parser": {
1737 | "version": "3.2.0",
1738 | "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz",
1739 | "integrity": "sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==",
1740 | "dev": true
1741 | },
1742 | "node_modules/lilconfig": {
1743 | "version": "3.0.0",
1744 | "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz",
1745 | "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==",
1746 | "dev": true,
1747 | "engines": {
1748 | "node": ">=14"
1749 | }
1750 | },
1751 | "node_modules/lines-and-columns": {
1752 | "version": "1.2.4",
1753 | "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz",
1754 | "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==",
1755 | "dev": true
1756 | },
1757 | "node_modules/load-tsconfig": {
1758 | "version": "0.2.5",
1759 | "resolved": "https://registry.npmjs.org/load-tsconfig/-/load-tsconfig-0.2.5.tgz",
1760 | "integrity": "sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==",
1761 | "dev": true,
1762 | "engines": {
1763 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
1764 | }
1765 | },
1766 | "node_modules/local-pkg": {
1767 | "version": "0.5.0",
1768 | "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz",
1769 | "integrity": "sha512-ok6z3qlYyCDS4ZEU27HaU6x/xZa9Whf8jD4ptH5UZTQYZVYeb9bnZ3ojVhiJNLiXK1Hfc0GNbLXcmZ5plLDDBg==",
1770 | "dev": true,
1771 | "dependencies": {
1772 | "mlly": "^1.4.2",
1773 | "pkg-types": "^1.0.3"
1774 | },
1775 | "engines": {
1776 | "node": ">=14"
1777 | },
1778 | "funding": {
1779 | "url": "https://github.com/sponsors/antfu"
1780 | }
1781 | },
1782 | "node_modules/lodash.sortby": {
1783 | "version": "4.7.0",
1784 | "resolved": "https://registry.npmjs.org/lodash.sortby/-/lodash.sortby-4.7.0.tgz",
1785 | "integrity": "sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==",
1786 | "dev": true
1787 | },
1788 | "node_modules/loupe": {
1789 | "version": "2.3.7",
1790 | "resolved": "https://registry.npmjs.org/loupe/-/loupe-2.3.7.tgz",
1791 | "integrity": "sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==",
1792 | "dev": true,
1793 | "dependencies": {
1794 | "get-func-name": "^2.0.1"
1795 | }
1796 | },
1797 | "node_modules/lru-cache": {
1798 | "version": "10.1.0",
1799 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.1.0.tgz",
1800 | "integrity": "sha512-/1clY/ui8CzjKFyjdvwPWJUYKiFVXG2I2cY0ssG7h4+hwk+XOIX7ZSG9Q7TW8TW3Kp3BUSqgFWBLgL4PJ+Blag==",
1801 | "engines": {
1802 | "node": "14 || >=16.14"
1803 | }
1804 | },
1805 | "node_modules/magic-string": {
1806 | "version": "0.30.10",
1807 | "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz",
1808 | "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==",
1809 | "dev": true,
1810 | "dependencies": {
1811 | "@jridgewell/sourcemap-codec": "^1.4.15"
1812 | }
1813 | },
1814 | "node_modules/magicast": {
1815 | "version": "0.3.2",
1816 | "resolved": "https://registry.npmjs.org/magicast/-/magicast-0.3.2.tgz",
1817 | "integrity": "sha512-Fjwkl6a0syt9TFN0JSYpOybxiMCkYNEeOTnOTNRbjphirLakznZXAqrXgj/7GG3D1dvETONNwrBfinvAbpunDg==",
1818 | "dev": true,
1819 | "dependencies": {
1820 | "@babel/parser": "^7.23.3",
1821 | "@babel/types": "^7.23.3",
1822 | "source-map-js": "^1.0.2"
1823 | }
1824 | },
1825 | "node_modules/make-dir": {
1826 | "version": "4.0.0",
1827 | "resolved": "https://registry.npmjs.org/make-dir/-/make-dir-4.0.0.tgz",
1828 | "integrity": "sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==",
1829 | "dev": true,
1830 | "dependencies": {
1831 | "semver": "^7.5.3"
1832 | },
1833 | "engines": {
1834 | "node": ">=10"
1835 | },
1836 | "funding": {
1837 | "url": "https://github.com/sponsors/sindresorhus"
1838 | }
1839 | },
1840 | "node_modules/merge-stream": {
1841 | "version": "2.0.0",
1842 | "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz",
1843 | "integrity": "sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==",
1844 | "dev": true
1845 | },
1846 | "node_modules/merge2": {
1847 | "version": "1.4.1",
1848 | "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
1849 | "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
1850 | "dev": true,
1851 | "engines": {
1852 | "node": ">= 8"
1853 | }
1854 | },
1855 | "node_modules/micromatch": {
1856 | "version": "4.0.5",
1857 | "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz",
1858 | "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==",
1859 | "dev": true,
1860 | "dependencies": {
1861 | "braces": "^3.0.2",
1862 | "picomatch": "^2.3.1"
1863 | },
1864 | "engines": {
1865 | "node": ">=8.6"
1866 | }
1867 | },
1868 | "node_modules/mimic-fn": {
1869 | "version": "2.1.0",
1870 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-2.1.0.tgz",
1871 | "integrity": "sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==",
1872 | "dev": true,
1873 | "engines": {
1874 | "node": ">=6"
1875 | }
1876 | },
1877 | "node_modules/minimatch": {
1878 | "version": "9.0.3",
1879 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
1880 | "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
1881 | "dependencies": {
1882 | "brace-expansion": "^2.0.1"
1883 | },
1884 | "engines": {
1885 | "node": ">=16 || 14 >=14.17"
1886 | },
1887 | "funding": {
1888 | "url": "https://github.com/sponsors/isaacs"
1889 | }
1890 | },
1891 | "node_modules/minipass": {
1892 | "version": "7.0.4",
1893 | "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
1894 | "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
1895 | "engines": {
1896 | "node": ">=16 || 14 >=14.17"
1897 | }
1898 | },
1899 | "node_modules/mlly": {
1900 | "version": "1.4.2",
1901 | "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.4.2.tgz",
1902 | "integrity": "sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==",
1903 | "dev": true,
1904 | "dependencies": {
1905 | "acorn": "^8.10.0",
1906 | "pathe": "^1.1.1",
1907 | "pkg-types": "^1.0.3",
1908 | "ufo": "^1.3.0"
1909 | }
1910 | },
1911 | "node_modules/ms": {
1912 | "version": "2.1.2",
1913 | "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz",
1914 | "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==",
1915 | "dev": true
1916 | },
1917 | "node_modules/mz": {
1918 | "version": "2.7.0",
1919 | "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz",
1920 | "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==",
1921 | "dev": true,
1922 | "dependencies": {
1923 | "any-promise": "^1.0.0",
1924 | "object-assign": "^4.0.1",
1925 | "thenify-all": "^1.0.0"
1926 | }
1927 | },
1928 | "node_modules/nanoid": {
1929 | "version": "3.3.7",
1930 | "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz",
1931 | "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==",
1932 | "dev": true,
1933 | "funding": [
1934 | {
1935 | "type": "github",
1936 | "url": "https://github.com/sponsors/ai"
1937 | }
1938 | ],
1939 | "bin": {
1940 | "nanoid": "bin/nanoid.cjs"
1941 | },
1942 | "engines": {
1943 | "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
1944 | }
1945 | },
1946 | "node_modules/normalize-path": {
1947 | "version": "3.0.0",
1948 | "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz",
1949 | "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==",
1950 | "dev": true,
1951 | "engines": {
1952 | "node": ">=0.10.0"
1953 | }
1954 | },
1955 | "node_modules/npm-run-path": {
1956 | "version": "4.0.1",
1957 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-4.0.1.tgz",
1958 | "integrity": "sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==",
1959 | "dev": true,
1960 | "dependencies": {
1961 | "path-key": "^3.0.0"
1962 | },
1963 | "engines": {
1964 | "node": ">=8"
1965 | }
1966 | },
1967 | "node_modules/object-assign": {
1968 | "version": "4.1.1",
1969 | "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz",
1970 | "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==",
1971 | "dev": true,
1972 | "engines": {
1973 | "node": ">=0.10.0"
1974 | }
1975 | },
1976 | "node_modules/once": {
1977 | "version": "1.4.0",
1978 | "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz",
1979 | "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==",
1980 | "dev": true,
1981 | "dependencies": {
1982 | "wrappy": "1"
1983 | }
1984 | },
1985 | "node_modules/onetime": {
1986 | "version": "5.1.2",
1987 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-5.1.2.tgz",
1988 | "integrity": "sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==",
1989 | "dev": true,
1990 | "dependencies": {
1991 | "mimic-fn": "^2.1.0"
1992 | },
1993 | "engines": {
1994 | "node": ">=6"
1995 | },
1996 | "funding": {
1997 | "url": "https://github.com/sponsors/sindresorhus"
1998 | }
1999 | },
2000 | "node_modules/p-limit": {
2001 | "version": "5.0.0",
2002 | "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-5.0.0.tgz",
2003 | "integrity": "sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==",
2004 | "dev": true,
2005 | "dependencies": {
2006 | "yocto-queue": "^1.0.0"
2007 | },
2008 | "engines": {
2009 | "node": ">=18"
2010 | },
2011 | "funding": {
2012 | "url": "https://github.com/sponsors/sindresorhus"
2013 | }
2014 | },
2015 | "node_modules/path-is-absolute": {
2016 | "version": "1.0.1",
2017 | "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz",
2018 | "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==",
2019 | "dev": true,
2020 | "engines": {
2021 | "node": ">=0.10.0"
2022 | }
2023 | },
2024 | "node_modules/path-key": {
2025 | "version": "3.1.1",
2026 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz",
2027 | "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==",
2028 | "engines": {
2029 | "node": ">=8"
2030 | }
2031 | },
2032 | "node_modules/path-scurry": {
2033 | "version": "1.10.1",
2034 | "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz",
2035 | "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==",
2036 | "dependencies": {
2037 | "lru-cache": "^9.1.1 || ^10.0.0",
2038 | "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
2039 | },
2040 | "engines": {
2041 | "node": ">=16 || 14 >=14.17"
2042 | },
2043 | "funding": {
2044 | "url": "https://github.com/sponsors/isaacs"
2045 | }
2046 | },
2047 | "node_modules/path-type": {
2048 | "version": "4.0.0",
2049 | "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz",
2050 | "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==",
2051 | "dev": true,
2052 | "engines": {
2053 | "node": ">=8"
2054 | }
2055 | },
2056 | "node_modules/pathe": {
2057 | "version": "1.1.1",
2058 | "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz",
2059 | "integrity": "sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==",
2060 | "dev": true
2061 | },
2062 | "node_modules/pathval": {
2063 | "version": "1.1.1",
2064 | "resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.1.tgz",
2065 | "integrity": "sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==",
2066 | "dev": true,
2067 | "engines": {
2068 | "node": "*"
2069 | }
2070 | },
2071 | "node_modules/php-parser": {
2072 | "version": "3.1.5",
2073 | "resolved": "https://registry.npmjs.org/php-parser/-/php-parser-3.1.5.tgz",
2074 | "integrity": "sha512-jEY2DcbgCm5aclzBdfW86GM6VEIWcSlhTBSHN1qhJguVePlYe28GhwS0yoeLYXpM2K8y6wzLwrbq814n2PHSoQ=="
2075 | },
2076 | "node_modules/picocolors": {
2077 | "version": "1.0.0",
2078 | "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
2079 | "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
2080 | "dev": true
2081 | },
2082 | "node_modules/picomatch": {
2083 | "version": "2.3.1",
2084 | "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz",
2085 | "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==",
2086 | "dev": true,
2087 | "engines": {
2088 | "node": ">=8.6"
2089 | },
2090 | "funding": {
2091 | "url": "https://github.com/sponsors/jonschlinkert"
2092 | }
2093 | },
2094 | "node_modules/pirates": {
2095 | "version": "4.0.6",
2096 | "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz",
2097 | "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==",
2098 | "dev": true,
2099 | "engines": {
2100 | "node": ">= 6"
2101 | }
2102 | },
2103 | "node_modules/pkg-types": {
2104 | "version": "1.0.3",
2105 | "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.0.3.tgz",
2106 | "integrity": "sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==",
2107 | "dev": true,
2108 | "dependencies": {
2109 | "jsonc-parser": "^3.2.0",
2110 | "mlly": "^1.2.0",
2111 | "pathe": "^1.1.0"
2112 | }
2113 | },
2114 | "node_modules/postcss": {
2115 | "version": "8.4.38",
2116 | "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz",
2117 | "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==",
2118 | "dev": true,
2119 | "funding": [
2120 | {
2121 | "type": "opencollective",
2122 | "url": "https://opencollective.com/postcss/"
2123 | },
2124 | {
2125 | "type": "tidelift",
2126 | "url": "https://tidelift.com/funding/github/npm/postcss"
2127 | },
2128 | {
2129 | "type": "github",
2130 | "url": "https://github.com/sponsors/ai"
2131 | }
2132 | ],
2133 | "dependencies": {
2134 | "nanoid": "^3.3.7",
2135 | "picocolors": "^1.0.0",
2136 | "source-map-js": "^1.2.0"
2137 | },
2138 | "engines": {
2139 | "node": "^10 || ^12 || >=14"
2140 | }
2141 | },
2142 | "node_modules/postcss-load-config": {
2143 | "version": "4.0.2",
2144 | "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz",
2145 | "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==",
2146 | "dev": true,
2147 | "funding": [
2148 | {
2149 | "type": "opencollective",
2150 | "url": "https://opencollective.com/postcss/"
2151 | },
2152 | {
2153 | "type": "github",
2154 | "url": "https://github.com/sponsors/ai"
2155 | }
2156 | ],
2157 | "dependencies": {
2158 | "lilconfig": "^3.0.0",
2159 | "yaml": "^2.3.4"
2160 | },
2161 | "engines": {
2162 | "node": ">= 14"
2163 | },
2164 | "peerDependencies": {
2165 | "postcss": ">=8.0.9",
2166 | "ts-node": ">=9.0.0"
2167 | },
2168 | "peerDependenciesMeta": {
2169 | "postcss": {
2170 | "optional": true
2171 | },
2172 | "ts-node": {
2173 | "optional": true
2174 | }
2175 | }
2176 | },
2177 | "node_modules/pretty-format": {
2178 | "version": "29.7.0",
2179 | "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz",
2180 | "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==",
2181 | "dev": true,
2182 | "dependencies": {
2183 | "@jest/schemas": "^29.6.3",
2184 | "ansi-styles": "^5.0.0",
2185 | "react-is": "^18.0.0"
2186 | },
2187 | "engines": {
2188 | "node": "^14.15.0 || ^16.10.0 || >=18.0.0"
2189 | }
2190 | },
2191 | "node_modules/punycode": {
2192 | "version": "2.3.1",
2193 | "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz",
2194 | "integrity": "sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==",
2195 | "dev": true,
2196 | "engines": {
2197 | "node": ">=6"
2198 | }
2199 | },
2200 | "node_modules/queue-microtask": {
2201 | "version": "1.2.3",
2202 | "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
2203 | "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
2204 | "dev": true,
2205 | "funding": [
2206 | {
2207 | "type": "github",
2208 | "url": "https://github.com/sponsors/feross"
2209 | },
2210 | {
2211 | "type": "patreon",
2212 | "url": "https://www.patreon.com/feross"
2213 | },
2214 | {
2215 | "type": "consulting",
2216 | "url": "https://feross.org/support"
2217 | }
2218 | ]
2219 | },
2220 | "node_modules/react-is": {
2221 | "version": "18.2.0",
2222 | "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz",
2223 | "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==",
2224 | "dev": true
2225 | },
2226 | "node_modules/readdirp": {
2227 | "version": "3.6.0",
2228 | "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz",
2229 | "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==",
2230 | "dev": true,
2231 | "dependencies": {
2232 | "picomatch": "^2.2.1"
2233 | },
2234 | "engines": {
2235 | "node": ">=8.10.0"
2236 | }
2237 | },
2238 | "node_modules/resolve-from": {
2239 | "version": "5.0.0",
2240 | "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz",
2241 | "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==",
2242 | "dev": true,
2243 | "engines": {
2244 | "node": ">=8"
2245 | }
2246 | },
2247 | "node_modules/reusify": {
2248 | "version": "1.0.4",
2249 | "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
2250 | "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
2251 | "dev": true,
2252 | "engines": {
2253 | "iojs": ">=1.0.0",
2254 | "node": ">=0.10.0"
2255 | }
2256 | },
2257 | "node_modules/rollup": {
2258 | "version": "4.14.2",
2259 | "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.14.2.tgz",
2260 | "integrity": "sha512-WkeoTWvuBoFjFAhsEOHKRoZ3r9GfTyhh7Vff1zwebEFLEFjT1lG3784xEgKiTa7E+e70vsC81roVL2MP4tgEEQ==",
2261 | "dev": true,
2262 | "dependencies": {
2263 | "@types/estree": "1.0.5"
2264 | },
2265 | "bin": {
2266 | "rollup": "dist/bin/rollup"
2267 | },
2268 | "engines": {
2269 | "node": ">=18.0.0",
2270 | "npm": ">=8.0.0"
2271 | },
2272 | "optionalDependencies": {
2273 | "@rollup/rollup-android-arm-eabi": "4.14.2",
2274 | "@rollup/rollup-android-arm64": "4.14.2",
2275 | "@rollup/rollup-darwin-arm64": "4.14.2",
2276 | "@rollup/rollup-darwin-x64": "4.14.2",
2277 | "@rollup/rollup-linux-arm-gnueabihf": "4.14.2",
2278 | "@rollup/rollup-linux-arm64-gnu": "4.14.2",
2279 | "@rollup/rollup-linux-arm64-musl": "4.14.2",
2280 | "@rollup/rollup-linux-powerpc64le-gnu": "4.14.2",
2281 | "@rollup/rollup-linux-riscv64-gnu": "4.14.2",
2282 | "@rollup/rollup-linux-s390x-gnu": "4.14.2",
2283 | "@rollup/rollup-linux-x64-gnu": "4.14.2",
2284 | "@rollup/rollup-linux-x64-musl": "4.14.2",
2285 | "@rollup/rollup-win32-arm64-msvc": "4.14.2",
2286 | "@rollup/rollup-win32-ia32-msvc": "4.14.2",
2287 | "@rollup/rollup-win32-x64-msvc": "4.14.2",
2288 | "fsevents": "~2.3.2"
2289 | }
2290 | },
2291 | "node_modules/run-parallel": {
2292 | "version": "1.2.0",
2293 | "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
2294 | "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
2295 | "dev": true,
2296 | "funding": [
2297 | {
2298 | "type": "github",
2299 | "url": "https://github.com/sponsors/feross"
2300 | },
2301 | {
2302 | "type": "patreon",
2303 | "url": "https://www.patreon.com/feross"
2304 | },
2305 | {
2306 | "type": "consulting",
2307 | "url": "https://feross.org/support"
2308 | }
2309 | ],
2310 | "dependencies": {
2311 | "queue-microtask": "^1.2.2"
2312 | }
2313 | },
2314 | "node_modules/semver": {
2315 | "version": "7.5.4",
2316 | "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz",
2317 | "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==",
2318 | "dev": true,
2319 | "dependencies": {
2320 | "lru-cache": "^6.0.0"
2321 | },
2322 | "bin": {
2323 | "semver": "bin/semver.js"
2324 | },
2325 | "engines": {
2326 | "node": ">=10"
2327 | }
2328 | },
2329 | "node_modules/semver/node_modules/lru-cache": {
2330 | "version": "6.0.0",
2331 | "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
2332 | "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
2333 | "dev": true,
2334 | "dependencies": {
2335 | "yallist": "^4.0.0"
2336 | },
2337 | "engines": {
2338 | "node": ">=10"
2339 | }
2340 | },
2341 | "node_modules/shebang-command": {
2342 | "version": "2.0.0",
2343 | "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz",
2344 | "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==",
2345 | "dependencies": {
2346 | "shebang-regex": "^3.0.0"
2347 | },
2348 | "engines": {
2349 | "node": ">=8"
2350 | }
2351 | },
2352 | "node_modules/shebang-regex": {
2353 | "version": "3.0.0",
2354 | "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz",
2355 | "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==",
2356 | "engines": {
2357 | "node": ">=8"
2358 | }
2359 | },
2360 | "node_modules/siginfo": {
2361 | "version": "2.0.0",
2362 | "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz",
2363 | "integrity": "sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==",
2364 | "dev": true
2365 | },
2366 | "node_modules/signal-exit": {
2367 | "version": "4.1.0",
2368 | "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
2369 | "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
2370 | "engines": {
2371 | "node": ">=14"
2372 | },
2373 | "funding": {
2374 | "url": "https://github.com/sponsors/isaacs"
2375 | }
2376 | },
2377 | "node_modules/slash": {
2378 | "version": "3.0.0",
2379 | "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz",
2380 | "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==",
2381 | "dev": true,
2382 | "engines": {
2383 | "node": ">=8"
2384 | }
2385 | },
2386 | "node_modules/source-map": {
2387 | "version": "0.6.1",
2388 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz",
2389 | "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==",
2390 | "dev": true,
2391 | "engines": {
2392 | "node": ">=0.10.0"
2393 | }
2394 | },
2395 | "node_modules/source-map-js": {
2396 | "version": "1.2.0",
2397 | "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz",
2398 | "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==",
2399 | "dev": true,
2400 | "engines": {
2401 | "node": ">=0.10.0"
2402 | }
2403 | },
2404 | "node_modules/stackback": {
2405 | "version": "0.0.2",
2406 | "resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
2407 | "integrity": "sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==",
2408 | "dev": true
2409 | },
2410 | "node_modules/std-env": {
2411 | "version": "3.6.0",
2412 | "resolved": "https://registry.npmjs.org/std-env/-/std-env-3.6.0.tgz",
2413 | "integrity": "sha512-aFZ19IgVmhdB2uX599ve2kE6BIE3YMnQ6Gp6BURhW/oIzpXGKr878TQfAQZn1+i0Flcc/UKUy1gOlcfaUBCryg==",
2414 | "dev": true
2415 | },
2416 | "node_modules/string-width": {
2417 | "version": "5.1.2",
2418 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz",
2419 | "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==",
2420 | "dependencies": {
2421 | "eastasianwidth": "^0.2.0",
2422 | "emoji-regex": "^9.2.2",
2423 | "strip-ansi": "^7.0.1"
2424 | },
2425 | "engines": {
2426 | "node": ">=12"
2427 | },
2428 | "funding": {
2429 | "url": "https://github.com/sponsors/sindresorhus"
2430 | }
2431 | },
2432 | "node_modules/string-width-cjs": {
2433 | "name": "string-width",
2434 | "version": "4.2.3",
2435 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
2436 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
2437 | "dependencies": {
2438 | "emoji-regex": "^8.0.0",
2439 | "is-fullwidth-code-point": "^3.0.0",
2440 | "strip-ansi": "^6.0.1"
2441 | },
2442 | "engines": {
2443 | "node": ">=8"
2444 | }
2445 | },
2446 | "node_modules/string-width-cjs/node_modules/ansi-regex": {
2447 | "version": "5.0.1",
2448 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2449 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2450 | "engines": {
2451 | "node": ">=8"
2452 | }
2453 | },
2454 | "node_modules/string-width-cjs/node_modules/emoji-regex": {
2455 | "version": "8.0.0",
2456 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
2457 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
2458 | },
2459 | "node_modules/string-width-cjs/node_modules/strip-ansi": {
2460 | "version": "6.0.1",
2461 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2462 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2463 | "dependencies": {
2464 | "ansi-regex": "^5.0.1"
2465 | },
2466 | "engines": {
2467 | "node": ">=8"
2468 | }
2469 | },
2470 | "node_modules/strip-ansi": {
2471 | "version": "7.1.0",
2472 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz",
2473 | "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==",
2474 | "dependencies": {
2475 | "ansi-regex": "^6.0.1"
2476 | },
2477 | "engines": {
2478 | "node": ">=12"
2479 | },
2480 | "funding": {
2481 | "url": "https://github.com/chalk/strip-ansi?sponsor=1"
2482 | }
2483 | },
2484 | "node_modules/strip-ansi-cjs": {
2485 | "name": "strip-ansi",
2486 | "version": "6.0.1",
2487 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
2488 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
2489 | "dependencies": {
2490 | "ansi-regex": "^5.0.1"
2491 | },
2492 | "engines": {
2493 | "node": ">=8"
2494 | }
2495 | },
2496 | "node_modules/strip-ansi-cjs/node_modules/ansi-regex": {
2497 | "version": "5.0.1",
2498 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
2499 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
2500 | "engines": {
2501 | "node": ">=8"
2502 | }
2503 | },
2504 | "node_modules/strip-final-newline": {
2505 | "version": "2.0.0",
2506 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-2.0.0.tgz",
2507 | "integrity": "sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==",
2508 | "dev": true,
2509 | "engines": {
2510 | "node": ">=6"
2511 | }
2512 | },
2513 | "node_modules/strip-literal": {
2514 | "version": "1.3.0",
2515 | "resolved": "https://registry.npmjs.org/strip-literal/-/strip-literal-1.3.0.tgz",
2516 | "integrity": "sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==",
2517 | "dev": true,
2518 | "dependencies": {
2519 | "acorn": "^8.10.0"
2520 | },
2521 | "funding": {
2522 | "url": "https://github.com/sponsors/antfu"
2523 | }
2524 | },
2525 | "node_modules/sucrase": {
2526 | "version": "3.34.0",
2527 | "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.34.0.tgz",
2528 | "integrity": "sha512-70/LQEZ07TEcxiU2dz51FKaE6hCTWC6vr7FOk3Gr0U60C3shtAN+H+BFr9XlYe5xqf3RA8nrc+VIwzCfnxuXJw==",
2529 | "dev": true,
2530 | "dependencies": {
2531 | "@jridgewell/gen-mapping": "^0.3.2",
2532 | "commander": "^4.0.0",
2533 | "glob": "7.1.6",
2534 | "lines-and-columns": "^1.1.6",
2535 | "mz": "^2.7.0",
2536 | "pirates": "^4.0.1",
2537 | "ts-interface-checker": "^0.1.9"
2538 | },
2539 | "bin": {
2540 | "sucrase": "bin/sucrase",
2541 | "sucrase-node": "bin/sucrase-node"
2542 | },
2543 | "engines": {
2544 | "node": ">=8"
2545 | }
2546 | },
2547 | "node_modules/sucrase/node_modules/brace-expansion": {
2548 | "version": "1.1.11",
2549 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
2550 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
2551 | "dev": true,
2552 | "dependencies": {
2553 | "balanced-match": "^1.0.0",
2554 | "concat-map": "0.0.1"
2555 | }
2556 | },
2557 | "node_modules/sucrase/node_modules/glob": {
2558 | "version": "7.1.6",
2559 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.1.6.tgz",
2560 | "integrity": "sha512-LwaxwyZ72Lk7vZINtNNrywX0ZuLyStrdDtabefZKAY5ZGJhVtgdznluResxNmPitE0SAO+O26sWTHeKSI2wMBA==",
2561 | "dev": true,
2562 | "dependencies": {
2563 | "fs.realpath": "^1.0.0",
2564 | "inflight": "^1.0.4",
2565 | "inherits": "2",
2566 | "minimatch": "^3.0.4",
2567 | "once": "^1.3.0",
2568 | "path-is-absolute": "^1.0.0"
2569 | },
2570 | "engines": {
2571 | "node": "*"
2572 | },
2573 | "funding": {
2574 | "url": "https://github.com/sponsors/isaacs"
2575 | }
2576 | },
2577 | "node_modules/sucrase/node_modules/minimatch": {
2578 | "version": "3.1.2",
2579 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2580 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2581 | "dev": true,
2582 | "dependencies": {
2583 | "brace-expansion": "^1.1.7"
2584 | },
2585 | "engines": {
2586 | "node": "*"
2587 | }
2588 | },
2589 | "node_modules/supports-color": {
2590 | "version": "7.2.0",
2591 | "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz",
2592 | "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==",
2593 | "dev": true,
2594 | "dependencies": {
2595 | "has-flag": "^4.0.0"
2596 | },
2597 | "engines": {
2598 | "node": ">=8"
2599 | }
2600 | },
2601 | "node_modules/test-exclude": {
2602 | "version": "6.0.0",
2603 | "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-6.0.0.tgz",
2604 | "integrity": "sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==",
2605 | "dev": true,
2606 | "dependencies": {
2607 | "@istanbuljs/schema": "^0.1.2",
2608 | "glob": "^7.1.4",
2609 | "minimatch": "^3.0.4"
2610 | },
2611 | "engines": {
2612 | "node": ">=8"
2613 | }
2614 | },
2615 | "node_modules/test-exclude/node_modules/brace-expansion": {
2616 | "version": "1.1.11",
2617 | "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz",
2618 | "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==",
2619 | "dev": true,
2620 | "dependencies": {
2621 | "balanced-match": "^1.0.0",
2622 | "concat-map": "0.0.1"
2623 | }
2624 | },
2625 | "node_modules/test-exclude/node_modules/glob": {
2626 | "version": "7.2.3",
2627 | "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz",
2628 | "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==",
2629 | "dev": true,
2630 | "dependencies": {
2631 | "fs.realpath": "^1.0.0",
2632 | "inflight": "^1.0.4",
2633 | "inherits": "2",
2634 | "minimatch": "^3.1.1",
2635 | "once": "^1.3.0",
2636 | "path-is-absolute": "^1.0.0"
2637 | },
2638 | "engines": {
2639 | "node": "*"
2640 | },
2641 | "funding": {
2642 | "url": "https://github.com/sponsors/isaacs"
2643 | }
2644 | },
2645 | "node_modules/test-exclude/node_modules/minimatch": {
2646 | "version": "3.1.2",
2647 | "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz",
2648 | "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==",
2649 | "dev": true,
2650 | "dependencies": {
2651 | "brace-expansion": "^1.1.7"
2652 | },
2653 | "engines": {
2654 | "node": "*"
2655 | }
2656 | },
2657 | "node_modules/thenify": {
2658 | "version": "3.3.1",
2659 | "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz",
2660 | "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==",
2661 | "dev": true,
2662 | "dependencies": {
2663 | "any-promise": "^1.0.0"
2664 | }
2665 | },
2666 | "node_modules/thenify-all": {
2667 | "version": "1.6.0",
2668 | "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz",
2669 | "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==",
2670 | "dev": true,
2671 | "dependencies": {
2672 | "thenify": ">= 3.1.0 < 4"
2673 | },
2674 | "engines": {
2675 | "node": ">=0.8"
2676 | }
2677 | },
2678 | "node_modules/tinybench": {
2679 | "version": "2.5.1",
2680 | "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.5.1.tgz",
2681 | "integrity": "sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==",
2682 | "dev": true
2683 | },
2684 | "node_modules/tinypool": {
2685 | "version": "0.8.1",
2686 | "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.8.1.tgz",
2687 | "integrity": "sha512-zBTCK0cCgRROxvs9c0CGK838sPkeokNGdQVUUwHAbynHFlmyJYj825f/oRs528HaIJ97lo0pLIlDUzwN+IorWg==",
2688 | "dev": true,
2689 | "engines": {
2690 | "node": ">=14.0.0"
2691 | }
2692 | },
2693 | "node_modules/tinyspy": {
2694 | "version": "2.2.0",
2695 | "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.0.tgz",
2696 | "integrity": "sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==",
2697 | "dev": true,
2698 | "engines": {
2699 | "node": ">=14.0.0"
2700 | }
2701 | },
2702 | "node_modules/to-fast-properties": {
2703 | "version": "2.0.0",
2704 | "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz",
2705 | "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==",
2706 | "dev": true,
2707 | "engines": {
2708 | "node": ">=4"
2709 | }
2710 | },
2711 | "node_modules/to-regex-range": {
2712 | "version": "5.0.1",
2713 | "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz",
2714 | "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==",
2715 | "dev": true,
2716 | "dependencies": {
2717 | "is-number": "^7.0.0"
2718 | },
2719 | "engines": {
2720 | "node": ">=8.0"
2721 | }
2722 | },
2723 | "node_modules/tr46": {
2724 | "version": "1.0.1",
2725 | "resolved": "https://registry.npmjs.org/tr46/-/tr46-1.0.1.tgz",
2726 | "integrity": "sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==",
2727 | "dev": true,
2728 | "dependencies": {
2729 | "punycode": "^2.1.0"
2730 | }
2731 | },
2732 | "node_modules/tree-kill": {
2733 | "version": "1.2.2",
2734 | "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz",
2735 | "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==",
2736 | "dev": true,
2737 | "bin": {
2738 | "tree-kill": "cli.js"
2739 | }
2740 | },
2741 | "node_modules/ts-interface-checker": {
2742 | "version": "0.1.13",
2743 | "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz",
2744 | "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==",
2745 | "dev": true
2746 | },
2747 | "node_modules/tsup": {
2748 | "version": "8.0.1",
2749 | "resolved": "https://registry.npmjs.org/tsup/-/tsup-8.0.1.tgz",
2750 | "integrity": "sha512-hvW7gUSG96j53ZTSlT4j/KL0q1Q2l6TqGBFc6/mu/L46IoNWqLLUzLRLP1R8Q7xrJTmkDxxDoojV5uCVs1sVOg==",
2751 | "dev": true,
2752 | "dependencies": {
2753 | "bundle-require": "^4.0.0",
2754 | "cac": "^6.7.12",
2755 | "chokidar": "^3.5.1",
2756 | "debug": "^4.3.1",
2757 | "esbuild": "^0.19.2",
2758 | "execa": "^5.0.0",
2759 | "globby": "^11.0.3",
2760 | "joycon": "^3.0.1",
2761 | "postcss-load-config": "^4.0.1",
2762 | "resolve-from": "^5.0.0",
2763 | "rollup": "^4.0.2",
2764 | "source-map": "0.8.0-beta.0",
2765 | "sucrase": "^3.20.3",
2766 | "tree-kill": "^1.2.2"
2767 | },
2768 | "bin": {
2769 | "tsup": "dist/cli-default.js",
2770 | "tsup-node": "dist/cli-node.js"
2771 | },
2772 | "engines": {
2773 | "node": ">=18"
2774 | },
2775 | "peerDependencies": {
2776 | "@microsoft/api-extractor": "^7.36.0",
2777 | "@swc/core": "^1",
2778 | "postcss": "^8.4.12",
2779 | "typescript": ">=4.5.0"
2780 | },
2781 | "peerDependenciesMeta": {
2782 | "@microsoft/api-extractor": {
2783 | "optional": true
2784 | },
2785 | "@swc/core": {
2786 | "optional": true
2787 | },
2788 | "postcss": {
2789 | "optional": true
2790 | },
2791 | "typescript": {
2792 | "optional": true
2793 | }
2794 | }
2795 | },
2796 | "node_modules/tsup/node_modules/source-map": {
2797 | "version": "0.8.0-beta.0",
2798 | "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.8.0-beta.0.tgz",
2799 | "integrity": "sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==",
2800 | "dev": true,
2801 | "dependencies": {
2802 | "whatwg-url": "^7.0.0"
2803 | },
2804 | "engines": {
2805 | "node": ">= 8"
2806 | }
2807 | },
2808 | "node_modules/type-detect": {
2809 | "version": "4.0.8",
2810 | "resolved": "https://registry.npmjs.org/type-detect/-/type-detect-4.0.8.tgz",
2811 | "integrity": "sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==",
2812 | "dev": true,
2813 | "engines": {
2814 | "node": ">=4"
2815 | }
2816 | },
2817 | "node_modules/typescript": {
2818 | "version": "5.3.3",
2819 | "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz",
2820 | "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==",
2821 | "dev": true,
2822 | "bin": {
2823 | "tsc": "bin/tsc",
2824 | "tsserver": "bin/tsserver"
2825 | },
2826 | "engines": {
2827 | "node": ">=14.17"
2828 | }
2829 | },
2830 | "node_modules/ufo": {
2831 | "version": "1.3.2",
2832 | "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz",
2833 | "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==",
2834 | "dev": true
2835 | },
2836 | "node_modules/undici-types": {
2837 | "version": "5.26.5",
2838 | "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz",
2839 | "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==",
2840 | "dev": true
2841 | },
2842 | "node_modules/v8-to-istanbul": {
2843 | "version": "9.2.0",
2844 | "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.2.0.tgz",
2845 | "integrity": "sha512-/EH/sDgxU2eGxajKdwLCDmQ4FWq+kpi3uCmBGpw1xJtnAxEjlD8j8PEiGWpCIMIs3ciNAgH0d3TTJiUkYzyZjA==",
2846 | "dev": true,
2847 | "dependencies": {
2848 | "@jridgewell/trace-mapping": "^0.3.12",
2849 | "@types/istanbul-lib-coverage": "^2.0.1",
2850 | "convert-source-map": "^2.0.0"
2851 | },
2852 | "engines": {
2853 | "node": ">=10.12.0"
2854 | }
2855 | },
2856 | "node_modules/vite": {
2857 | "version": "5.2.8",
2858 | "resolved": "https://registry.npmjs.org/vite/-/vite-5.2.8.tgz",
2859 | "integrity": "sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==",
2860 | "dev": true,
2861 | "dependencies": {
2862 | "esbuild": "^0.20.1",
2863 | "postcss": "^8.4.38",
2864 | "rollup": "^4.13.0"
2865 | },
2866 | "bin": {
2867 | "vite": "bin/vite.js"
2868 | },
2869 | "engines": {
2870 | "node": "^18.0.0 || >=20.0.0"
2871 | },
2872 | "funding": {
2873 | "url": "https://github.com/vitejs/vite?sponsor=1"
2874 | },
2875 | "optionalDependencies": {
2876 | "fsevents": "~2.3.3"
2877 | },
2878 | "peerDependencies": {
2879 | "@types/node": "^18.0.0 || >=20.0.0",
2880 | "less": "*",
2881 | "lightningcss": "^1.21.0",
2882 | "sass": "*",
2883 | "stylus": "*",
2884 | "sugarss": "*",
2885 | "terser": "^5.4.0"
2886 | },
2887 | "peerDependenciesMeta": {
2888 | "@types/node": {
2889 | "optional": true
2890 | },
2891 | "less": {
2892 | "optional": true
2893 | },
2894 | "lightningcss": {
2895 | "optional": true
2896 | },
2897 | "sass": {
2898 | "optional": true
2899 | },
2900 | "stylus": {
2901 | "optional": true
2902 | },
2903 | "sugarss": {
2904 | "optional": true
2905 | },
2906 | "terser": {
2907 | "optional": true
2908 | }
2909 | }
2910 | },
2911 | "node_modules/vite-node": {
2912 | "version": "1.1.0",
2913 | "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-1.1.0.tgz",
2914 | "integrity": "sha512-jV48DDUxGLEBdHCQvxL1mEh7+naVy+nhUUUaPAZLd3FJgXuxQiewHcfeZebbJ6onDqNGkP4r3MhQ342PRlG81Q==",
2915 | "dev": true,
2916 | "dependencies": {
2917 | "cac": "^6.7.14",
2918 | "debug": "^4.3.4",
2919 | "pathe": "^1.1.1",
2920 | "picocolors": "^1.0.0",
2921 | "vite": "^5.0.0"
2922 | },
2923 | "bin": {
2924 | "vite-node": "vite-node.mjs"
2925 | },
2926 | "engines": {
2927 | "node": "^18.0.0 || >=20.0.0"
2928 | },
2929 | "funding": {
2930 | "url": "https://opencollective.com/vitest"
2931 | }
2932 | },
2933 | "node_modules/vite/node_modules/@esbuild/aix-ppc64": {
2934 | "version": "0.20.2",
2935 | "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz",
2936 | "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==",
2937 | "cpu": [
2938 | "ppc64"
2939 | ],
2940 | "dev": true,
2941 | "optional": true,
2942 | "os": [
2943 | "aix"
2944 | ],
2945 | "engines": {
2946 | "node": ">=12"
2947 | }
2948 | },
2949 | "node_modules/vite/node_modules/@esbuild/android-arm": {
2950 | "version": "0.20.2",
2951 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz",
2952 | "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==",
2953 | "cpu": [
2954 | "arm"
2955 | ],
2956 | "dev": true,
2957 | "optional": true,
2958 | "os": [
2959 | "android"
2960 | ],
2961 | "engines": {
2962 | "node": ">=12"
2963 | }
2964 | },
2965 | "node_modules/vite/node_modules/@esbuild/android-arm64": {
2966 | "version": "0.20.2",
2967 | "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz",
2968 | "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==",
2969 | "cpu": [
2970 | "arm64"
2971 | ],
2972 | "dev": true,
2973 | "optional": true,
2974 | "os": [
2975 | "android"
2976 | ],
2977 | "engines": {
2978 | "node": ">=12"
2979 | }
2980 | },
2981 | "node_modules/vite/node_modules/@esbuild/android-x64": {
2982 | "version": "0.20.2",
2983 | "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz",
2984 | "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==",
2985 | "cpu": [
2986 | "x64"
2987 | ],
2988 | "dev": true,
2989 | "optional": true,
2990 | "os": [
2991 | "android"
2992 | ],
2993 | "engines": {
2994 | "node": ">=12"
2995 | }
2996 | },
2997 | "node_modules/vite/node_modules/@esbuild/darwin-arm64": {
2998 | "version": "0.20.2",
2999 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz",
3000 | "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==",
3001 | "cpu": [
3002 | "arm64"
3003 | ],
3004 | "dev": true,
3005 | "optional": true,
3006 | "os": [
3007 | "darwin"
3008 | ],
3009 | "engines": {
3010 | "node": ">=12"
3011 | }
3012 | },
3013 | "node_modules/vite/node_modules/@esbuild/darwin-x64": {
3014 | "version": "0.20.2",
3015 | "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz",
3016 | "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==",
3017 | "cpu": [
3018 | "x64"
3019 | ],
3020 | "dev": true,
3021 | "optional": true,
3022 | "os": [
3023 | "darwin"
3024 | ],
3025 | "engines": {
3026 | "node": ">=12"
3027 | }
3028 | },
3029 | "node_modules/vite/node_modules/@esbuild/freebsd-arm64": {
3030 | "version": "0.20.2",
3031 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz",
3032 | "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==",
3033 | "cpu": [
3034 | "arm64"
3035 | ],
3036 | "dev": true,
3037 | "optional": true,
3038 | "os": [
3039 | "freebsd"
3040 | ],
3041 | "engines": {
3042 | "node": ">=12"
3043 | }
3044 | },
3045 | "node_modules/vite/node_modules/@esbuild/freebsd-x64": {
3046 | "version": "0.20.2",
3047 | "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz",
3048 | "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==",
3049 | "cpu": [
3050 | "x64"
3051 | ],
3052 | "dev": true,
3053 | "optional": true,
3054 | "os": [
3055 | "freebsd"
3056 | ],
3057 | "engines": {
3058 | "node": ">=12"
3059 | }
3060 | },
3061 | "node_modules/vite/node_modules/@esbuild/linux-arm": {
3062 | "version": "0.20.2",
3063 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz",
3064 | "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==",
3065 | "cpu": [
3066 | "arm"
3067 | ],
3068 | "dev": true,
3069 | "optional": true,
3070 | "os": [
3071 | "linux"
3072 | ],
3073 | "engines": {
3074 | "node": ">=12"
3075 | }
3076 | },
3077 | "node_modules/vite/node_modules/@esbuild/linux-arm64": {
3078 | "version": "0.20.2",
3079 | "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz",
3080 | "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==",
3081 | "cpu": [
3082 | "arm64"
3083 | ],
3084 | "dev": true,
3085 | "optional": true,
3086 | "os": [
3087 | "linux"
3088 | ],
3089 | "engines": {
3090 | "node": ">=12"
3091 | }
3092 | },
3093 | "node_modules/vite/node_modules/@esbuild/linux-ia32": {
3094 | "version": "0.20.2",
3095 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz",
3096 | "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==",
3097 | "cpu": [
3098 | "ia32"
3099 | ],
3100 | "dev": true,
3101 | "optional": true,
3102 | "os": [
3103 | "linux"
3104 | ],
3105 | "engines": {
3106 | "node": ">=12"
3107 | }
3108 | },
3109 | "node_modules/vite/node_modules/@esbuild/linux-loong64": {
3110 | "version": "0.20.2",
3111 | "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz",
3112 | "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==",
3113 | "cpu": [
3114 | "loong64"
3115 | ],
3116 | "dev": true,
3117 | "optional": true,
3118 | "os": [
3119 | "linux"
3120 | ],
3121 | "engines": {
3122 | "node": ">=12"
3123 | }
3124 | },
3125 | "node_modules/vite/node_modules/@esbuild/linux-mips64el": {
3126 | "version": "0.20.2",
3127 | "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz",
3128 | "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==",
3129 | "cpu": [
3130 | "mips64el"
3131 | ],
3132 | "dev": true,
3133 | "optional": true,
3134 | "os": [
3135 | "linux"
3136 | ],
3137 | "engines": {
3138 | "node": ">=12"
3139 | }
3140 | },
3141 | "node_modules/vite/node_modules/@esbuild/linux-ppc64": {
3142 | "version": "0.20.2",
3143 | "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz",
3144 | "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==",
3145 | "cpu": [
3146 | "ppc64"
3147 | ],
3148 | "dev": true,
3149 | "optional": true,
3150 | "os": [
3151 | "linux"
3152 | ],
3153 | "engines": {
3154 | "node": ">=12"
3155 | }
3156 | },
3157 | "node_modules/vite/node_modules/@esbuild/linux-riscv64": {
3158 | "version": "0.20.2",
3159 | "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz",
3160 | "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==",
3161 | "cpu": [
3162 | "riscv64"
3163 | ],
3164 | "dev": true,
3165 | "optional": true,
3166 | "os": [
3167 | "linux"
3168 | ],
3169 | "engines": {
3170 | "node": ">=12"
3171 | }
3172 | },
3173 | "node_modules/vite/node_modules/@esbuild/linux-s390x": {
3174 | "version": "0.20.2",
3175 | "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz",
3176 | "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==",
3177 | "cpu": [
3178 | "s390x"
3179 | ],
3180 | "dev": true,
3181 | "optional": true,
3182 | "os": [
3183 | "linux"
3184 | ],
3185 | "engines": {
3186 | "node": ">=12"
3187 | }
3188 | },
3189 | "node_modules/vite/node_modules/@esbuild/linux-x64": {
3190 | "version": "0.20.2",
3191 | "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz",
3192 | "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==",
3193 | "cpu": [
3194 | "x64"
3195 | ],
3196 | "dev": true,
3197 | "optional": true,
3198 | "os": [
3199 | "linux"
3200 | ],
3201 | "engines": {
3202 | "node": ">=12"
3203 | }
3204 | },
3205 | "node_modules/vite/node_modules/@esbuild/netbsd-x64": {
3206 | "version": "0.20.2",
3207 | "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz",
3208 | "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==",
3209 | "cpu": [
3210 | "x64"
3211 | ],
3212 | "dev": true,
3213 | "optional": true,
3214 | "os": [
3215 | "netbsd"
3216 | ],
3217 | "engines": {
3218 | "node": ">=12"
3219 | }
3220 | },
3221 | "node_modules/vite/node_modules/@esbuild/openbsd-x64": {
3222 | "version": "0.20.2",
3223 | "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz",
3224 | "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==",
3225 | "cpu": [
3226 | "x64"
3227 | ],
3228 | "dev": true,
3229 | "optional": true,
3230 | "os": [
3231 | "openbsd"
3232 | ],
3233 | "engines": {
3234 | "node": ">=12"
3235 | }
3236 | },
3237 | "node_modules/vite/node_modules/@esbuild/sunos-x64": {
3238 | "version": "0.20.2",
3239 | "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz",
3240 | "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==",
3241 | "cpu": [
3242 | "x64"
3243 | ],
3244 | "dev": true,
3245 | "optional": true,
3246 | "os": [
3247 | "sunos"
3248 | ],
3249 | "engines": {
3250 | "node": ">=12"
3251 | }
3252 | },
3253 | "node_modules/vite/node_modules/@esbuild/win32-arm64": {
3254 | "version": "0.20.2",
3255 | "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz",
3256 | "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==",
3257 | "cpu": [
3258 | "arm64"
3259 | ],
3260 | "dev": true,
3261 | "optional": true,
3262 | "os": [
3263 | "win32"
3264 | ],
3265 | "engines": {
3266 | "node": ">=12"
3267 | }
3268 | },
3269 | "node_modules/vite/node_modules/@esbuild/win32-ia32": {
3270 | "version": "0.20.2",
3271 | "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz",
3272 | "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==",
3273 | "cpu": [
3274 | "ia32"
3275 | ],
3276 | "dev": true,
3277 | "optional": true,
3278 | "os": [
3279 | "win32"
3280 | ],
3281 | "engines": {
3282 | "node": ">=12"
3283 | }
3284 | },
3285 | "node_modules/vite/node_modules/@esbuild/win32-x64": {
3286 | "version": "0.20.2",
3287 | "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz",
3288 | "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==",
3289 | "cpu": [
3290 | "x64"
3291 | ],
3292 | "dev": true,
3293 | "optional": true,
3294 | "os": [
3295 | "win32"
3296 | ],
3297 | "engines": {
3298 | "node": ">=12"
3299 | }
3300 | },
3301 | "node_modules/vite/node_modules/esbuild": {
3302 | "version": "0.20.2",
3303 | "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz",
3304 | "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==",
3305 | "dev": true,
3306 | "hasInstallScript": true,
3307 | "bin": {
3308 | "esbuild": "bin/esbuild"
3309 | },
3310 | "engines": {
3311 | "node": ">=12"
3312 | },
3313 | "optionalDependencies": {
3314 | "@esbuild/aix-ppc64": "0.20.2",
3315 | "@esbuild/android-arm": "0.20.2",
3316 | "@esbuild/android-arm64": "0.20.2",
3317 | "@esbuild/android-x64": "0.20.2",
3318 | "@esbuild/darwin-arm64": "0.20.2",
3319 | "@esbuild/darwin-x64": "0.20.2",
3320 | "@esbuild/freebsd-arm64": "0.20.2",
3321 | "@esbuild/freebsd-x64": "0.20.2",
3322 | "@esbuild/linux-arm": "0.20.2",
3323 | "@esbuild/linux-arm64": "0.20.2",
3324 | "@esbuild/linux-ia32": "0.20.2",
3325 | "@esbuild/linux-loong64": "0.20.2",
3326 | "@esbuild/linux-mips64el": "0.20.2",
3327 | "@esbuild/linux-ppc64": "0.20.2",
3328 | "@esbuild/linux-riscv64": "0.20.2",
3329 | "@esbuild/linux-s390x": "0.20.2",
3330 | "@esbuild/linux-x64": "0.20.2",
3331 | "@esbuild/netbsd-x64": "0.20.2",
3332 | "@esbuild/openbsd-x64": "0.20.2",
3333 | "@esbuild/sunos-x64": "0.20.2",
3334 | "@esbuild/win32-arm64": "0.20.2",
3335 | "@esbuild/win32-ia32": "0.20.2",
3336 | "@esbuild/win32-x64": "0.20.2"
3337 | }
3338 | },
3339 | "node_modules/vitest": {
3340 | "version": "1.1.0",
3341 | "resolved": "https://registry.npmjs.org/vitest/-/vitest-1.1.0.tgz",
3342 | "integrity": "sha512-oDFiCrw7dd3Jf06HoMtSRARivvyjHJaTxikFxuqJjO76U436PqlVw1uLn7a8OSPrhSfMGVaRakKpA2lePdw79A==",
3343 | "dev": true,
3344 | "dependencies": {
3345 | "@vitest/expect": "1.1.0",
3346 | "@vitest/runner": "1.1.0",
3347 | "@vitest/snapshot": "1.1.0",
3348 | "@vitest/spy": "1.1.0",
3349 | "@vitest/utils": "1.1.0",
3350 | "acorn-walk": "^8.3.0",
3351 | "cac": "^6.7.14",
3352 | "chai": "^4.3.10",
3353 | "debug": "^4.3.4",
3354 | "execa": "^8.0.1",
3355 | "local-pkg": "^0.5.0",
3356 | "magic-string": "^0.30.5",
3357 | "pathe": "^1.1.1",
3358 | "picocolors": "^1.0.0",
3359 | "std-env": "^3.5.0",
3360 | "strip-literal": "^1.3.0",
3361 | "tinybench": "^2.5.1",
3362 | "tinypool": "^0.8.1",
3363 | "vite": "^5.0.0",
3364 | "vite-node": "1.1.0",
3365 | "why-is-node-running": "^2.2.2"
3366 | },
3367 | "bin": {
3368 | "vitest": "vitest.mjs"
3369 | },
3370 | "engines": {
3371 | "node": "^18.0.0 || >=20.0.0"
3372 | },
3373 | "funding": {
3374 | "url": "https://opencollective.com/vitest"
3375 | },
3376 | "peerDependencies": {
3377 | "@edge-runtime/vm": "*",
3378 | "@types/node": "^18.0.0 || >=20.0.0",
3379 | "@vitest/browser": "^1.0.0",
3380 | "@vitest/ui": "^1.0.0",
3381 | "happy-dom": "*",
3382 | "jsdom": "*"
3383 | },
3384 | "peerDependenciesMeta": {
3385 | "@edge-runtime/vm": {
3386 | "optional": true
3387 | },
3388 | "@types/node": {
3389 | "optional": true
3390 | },
3391 | "@vitest/browser": {
3392 | "optional": true
3393 | },
3394 | "@vitest/ui": {
3395 | "optional": true
3396 | },
3397 | "happy-dom": {
3398 | "optional": true
3399 | },
3400 | "jsdom": {
3401 | "optional": true
3402 | }
3403 | }
3404 | },
3405 | "node_modules/vitest/node_modules/execa": {
3406 | "version": "8.0.1",
3407 | "resolved": "https://registry.npmjs.org/execa/-/execa-8.0.1.tgz",
3408 | "integrity": "sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==",
3409 | "dev": true,
3410 | "dependencies": {
3411 | "cross-spawn": "^7.0.3",
3412 | "get-stream": "^8.0.1",
3413 | "human-signals": "^5.0.0",
3414 | "is-stream": "^3.0.0",
3415 | "merge-stream": "^2.0.0",
3416 | "npm-run-path": "^5.1.0",
3417 | "onetime": "^6.0.0",
3418 | "signal-exit": "^4.1.0",
3419 | "strip-final-newline": "^3.0.0"
3420 | },
3421 | "engines": {
3422 | "node": ">=16.17"
3423 | },
3424 | "funding": {
3425 | "url": "https://github.com/sindresorhus/execa?sponsor=1"
3426 | }
3427 | },
3428 | "node_modules/vitest/node_modules/get-stream": {
3429 | "version": "8.0.1",
3430 | "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-8.0.1.tgz",
3431 | "integrity": "sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==",
3432 | "dev": true,
3433 | "engines": {
3434 | "node": ">=16"
3435 | },
3436 | "funding": {
3437 | "url": "https://github.com/sponsors/sindresorhus"
3438 | }
3439 | },
3440 | "node_modules/vitest/node_modules/human-signals": {
3441 | "version": "5.0.0",
3442 | "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-5.0.0.tgz",
3443 | "integrity": "sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==",
3444 | "dev": true,
3445 | "engines": {
3446 | "node": ">=16.17.0"
3447 | }
3448 | },
3449 | "node_modules/vitest/node_modules/is-stream": {
3450 | "version": "3.0.0",
3451 | "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz",
3452 | "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==",
3453 | "dev": true,
3454 | "engines": {
3455 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
3456 | },
3457 | "funding": {
3458 | "url": "https://github.com/sponsors/sindresorhus"
3459 | }
3460 | },
3461 | "node_modules/vitest/node_modules/mimic-fn": {
3462 | "version": "4.0.0",
3463 | "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz",
3464 | "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==",
3465 | "dev": true,
3466 | "engines": {
3467 | "node": ">=12"
3468 | },
3469 | "funding": {
3470 | "url": "https://github.com/sponsors/sindresorhus"
3471 | }
3472 | },
3473 | "node_modules/vitest/node_modules/npm-run-path": {
3474 | "version": "5.1.0",
3475 | "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz",
3476 | "integrity": "sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==",
3477 | "dev": true,
3478 | "dependencies": {
3479 | "path-key": "^4.0.0"
3480 | },
3481 | "engines": {
3482 | "node": "^12.20.0 || ^14.13.1 || >=16.0.0"
3483 | },
3484 | "funding": {
3485 | "url": "https://github.com/sponsors/sindresorhus"
3486 | }
3487 | },
3488 | "node_modules/vitest/node_modules/onetime": {
3489 | "version": "6.0.0",
3490 | "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz",
3491 | "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==",
3492 | "dev": true,
3493 | "dependencies": {
3494 | "mimic-fn": "^4.0.0"
3495 | },
3496 | "engines": {
3497 | "node": ">=12"
3498 | },
3499 | "funding": {
3500 | "url": "https://github.com/sponsors/sindresorhus"
3501 | }
3502 | },
3503 | "node_modules/vitest/node_modules/path-key": {
3504 | "version": "4.0.0",
3505 | "resolved": "https://registry.npmjs.org/path-key/-/path-key-4.0.0.tgz",
3506 | "integrity": "sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==",
3507 | "dev": true,
3508 | "engines": {
3509 | "node": ">=12"
3510 | },
3511 | "funding": {
3512 | "url": "https://github.com/sponsors/sindresorhus"
3513 | }
3514 | },
3515 | "node_modules/vitest/node_modules/strip-final-newline": {
3516 | "version": "3.0.0",
3517 | "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz",
3518 | "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==",
3519 | "dev": true,
3520 | "engines": {
3521 | "node": ">=12"
3522 | },
3523 | "funding": {
3524 | "url": "https://github.com/sponsors/sindresorhus"
3525 | }
3526 | },
3527 | "node_modules/vue": {
3528 | "version": "3.4.27",
3529 | "resolved": "https://registry.npmjs.org/vue/-/vue-3.4.27.tgz",
3530 | "integrity": "sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==",
3531 | "dev": true,
3532 | "dependencies": {
3533 | "@vue/compiler-dom": "3.4.27",
3534 | "@vue/compiler-sfc": "3.4.27",
3535 | "@vue/runtime-dom": "3.4.27",
3536 | "@vue/server-renderer": "3.4.27",
3537 | "@vue/shared": "3.4.27"
3538 | },
3539 | "peerDependencies": {
3540 | "typescript": "*"
3541 | },
3542 | "peerDependenciesMeta": {
3543 | "typescript": {
3544 | "optional": true
3545 | }
3546 | }
3547 | },
3548 | "node_modules/webidl-conversions": {
3549 | "version": "4.0.2",
3550 | "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-4.0.2.tgz",
3551 | "integrity": "sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==",
3552 | "dev": true
3553 | },
3554 | "node_modules/whatwg-url": {
3555 | "version": "7.1.0",
3556 | "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-7.1.0.tgz",
3557 | "integrity": "sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==",
3558 | "dev": true,
3559 | "dependencies": {
3560 | "lodash.sortby": "^4.7.0",
3561 | "tr46": "^1.0.1",
3562 | "webidl-conversions": "^4.0.2"
3563 | }
3564 | },
3565 | "node_modules/which": {
3566 | "version": "2.0.2",
3567 | "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz",
3568 | "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==",
3569 | "dependencies": {
3570 | "isexe": "^2.0.0"
3571 | },
3572 | "bin": {
3573 | "node-which": "bin/node-which"
3574 | },
3575 | "engines": {
3576 | "node": ">= 8"
3577 | }
3578 | },
3579 | "node_modules/why-is-node-running": {
3580 | "version": "2.2.2",
3581 | "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz",
3582 | "integrity": "sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==",
3583 | "dev": true,
3584 | "dependencies": {
3585 | "siginfo": "^2.0.0",
3586 | "stackback": "0.0.2"
3587 | },
3588 | "bin": {
3589 | "why-is-node-running": "cli.js"
3590 | },
3591 | "engines": {
3592 | "node": ">=8"
3593 | }
3594 | },
3595 | "node_modules/wrap-ansi": {
3596 | "version": "8.1.0",
3597 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
3598 | "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==",
3599 | "dependencies": {
3600 | "ansi-styles": "^6.1.0",
3601 | "string-width": "^5.0.1",
3602 | "strip-ansi": "^7.0.1"
3603 | },
3604 | "engines": {
3605 | "node": ">=12"
3606 | },
3607 | "funding": {
3608 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
3609 | }
3610 | },
3611 | "node_modules/wrap-ansi-cjs": {
3612 | "name": "wrap-ansi",
3613 | "version": "7.0.0",
3614 | "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz",
3615 | "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==",
3616 | "dependencies": {
3617 | "ansi-styles": "^4.0.0",
3618 | "string-width": "^4.1.0",
3619 | "strip-ansi": "^6.0.0"
3620 | },
3621 | "engines": {
3622 | "node": ">=10"
3623 | },
3624 | "funding": {
3625 | "url": "https://github.com/chalk/wrap-ansi?sponsor=1"
3626 | }
3627 | },
3628 | "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": {
3629 | "version": "5.0.1",
3630 | "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz",
3631 | "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==",
3632 | "engines": {
3633 | "node": ">=8"
3634 | }
3635 | },
3636 | "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": {
3637 | "version": "4.3.0",
3638 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz",
3639 | "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==",
3640 | "dependencies": {
3641 | "color-convert": "^2.0.1"
3642 | },
3643 | "engines": {
3644 | "node": ">=8"
3645 | },
3646 | "funding": {
3647 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
3648 | }
3649 | },
3650 | "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": {
3651 | "version": "8.0.0",
3652 | "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz",
3653 | "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A=="
3654 | },
3655 | "node_modules/wrap-ansi-cjs/node_modules/string-width": {
3656 | "version": "4.2.3",
3657 | "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz",
3658 | "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==",
3659 | "dependencies": {
3660 | "emoji-regex": "^8.0.0",
3661 | "is-fullwidth-code-point": "^3.0.0",
3662 | "strip-ansi": "^6.0.1"
3663 | },
3664 | "engines": {
3665 | "node": ">=8"
3666 | }
3667 | },
3668 | "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": {
3669 | "version": "6.0.1",
3670 | "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz",
3671 | "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==",
3672 | "dependencies": {
3673 | "ansi-regex": "^5.0.1"
3674 | },
3675 | "engines": {
3676 | "node": ">=8"
3677 | }
3678 | },
3679 | "node_modules/wrap-ansi/node_modules/ansi-styles": {
3680 | "version": "6.2.1",
3681 | "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz",
3682 | "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==",
3683 | "engines": {
3684 | "node": ">=12"
3685 | },
3686 | "funding": {
3687 | "url": "https://github.com/chalk/ansi-styles?sponsor=1"
3688 | }
3689 | },
3690 | "node_modules/wrappy": {
3691 | "version": "1.0.2",
3692 | "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz",
3693 | "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==",
3694 | "dev": true
3695 | },
3696 | "node_modules/yallist": {
3697 | "version": "4.0.0",
3698 | "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
3699 | "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
3700 | "dev": true
3701 | },
3702 | "node_modules/yaml": {
3703 | "version": "2.3.4",
3704 | "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz",
3705 | "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==",
3706 | "dev": true,
3707 | "engines": {
3708 | "node": ">= 14"
3709 | }
3710 | },
3711 | "node_modules/yocto-queue": {
3712 | "version": "1.0.0",
3713 | "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-1.0.0.tgz",
3714 | "integrity": "sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==",
3715 | "dev": true,
3716 | "engines": {
3717 | "node": ">=12.20"
3718 | },
3719 | "funding": {
3720 | "url": "https://github.com/sponsors/sindresorhus"
3721 | }
3722 | }
3723 | }
3724 | }
3725 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "laravel-translator",
3 | "type": "module",
4 | "version": "1.1.1",
5 | "description": "Laravel localization bridge for your frontend.",
6 | "main": "dist/index.cjs",
7 | "module": "dist/index.js",
8 | "types": "dist/index.d.ts",
9 | "files": [
10 | "dist/"
11 | ],
12 | "exports": {
13 | ".": {
14 | "types": "./dist/index.d.ts",
15 | "import": "./dist/index.js",
16 | "require": "./dist/index.cjs"
17 | },
18 | "./*": {
19 | "types": "./dist/*.d.ts",
20 | "import": "./dist/*.js",
21 | "require": "./dist/*.cjs"
22 | }
23 | },
24 | "typesVersions": {
25 | "*": {
26 | "*": [
27 | "dist/index.d.ts"
28 | ],
29 | "vite": [
30 | "dist/vite.d.ts"
31 | ]
32 | }
33 | },
34 | "scripts": {
35 | "tests": "vitest --run",
36 | "prepublishOnly": "tsup ./src --external virtual-laravel-translations,vue --format cjs,esm --dts"
37 | },
38 | "repository": {
39 | "type": "git",
40 | "url": "https://github.com/sergix44/laravel-translator-js.git"
41 | },
42 | "author": "Sergio Brighenti",
43 | "license": "MIT",
44 | "bugs": {
45 | "url": "https://github.com/sergix44/laravel-translator-js/issues"
46 | },
47 | "homepage": "https://github.com/sergix44/laravel-translator-js#readme",
48 | "devDependencies": {
49 | "@types/node": "^20.10.4",
50 | "@vitest/coverage-v8": "^1.0.4",
51 | "tsup": "^8.0.1",
52 | "typescript": "^5.3.3",
53 | "vite": "^5.2.8",
54 | "vitest": "^1.0.0",
55 | "vue": "^3.4.27"
56 | },
57 | "dependencies": {
58 | "glob": "^10.3.10",
59 | "php-parser": "^3.1.5"
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/src/exporter.ts:
--------------------------------------------------------------------------------
1 | import {glob} from "glob";
2 | import {basename, sep, join} from "path";
3 | import {Engine, Return} from 'php-parser'
4 | import {writeFileSync, readFileSync} from "fs";
5 |
6 | interface CandidateTranslation {
7 | type: 'php' | 'json'
8 | basePath: string
9 | path: string
10 | name: string | null
11 | nesting: string[]
12 | locale: string
13 | }
14 |
15 | const engine = new Engine({})
16 |
17 | export const exportTranslations = (...paths: string[]) => {
18 | const translationFiles: CandidateTranslation[] = []
19 |
20 | paths.forEach((path) => {
21 | translationFiles.push(...getTranslationCandidates(`./**/*.php`, path, 'php'))
22 | translationFiles.push(...getTranslationCandidates(`*.json`, path, 'json'))
23 | })
24 |
25 | const translations = {}
26 |
27 | translationFiles.forEach((candidate) => {
28 | let content: null | object
29 | if (candidate.type === 'php') {
30 | content = importPhpFile(candidate.basePath, candidate);
31 | } else {
32 | content = importJsonFile(candidate.basePath, candidate);
33 | }
34 |
35 | if (!content) {
36 | return
37 | }
38 |
39 | if (!translations[candidate.locale]) {
40 | translations[candidate.locale] = {}
41 | }
42 |
43 | if (!translations[candidate.locale][candidate.type]) {
44 | translations[candidate.locale][candidate.type] = {}
45 | }
46 |
47 | let current = translations[candidate.locale][candidate.type]
48 | candidate.nesting.forEach((nest) => {
49 | if (!current[nest]) {
50 | current[nest] = {}
51 | }
52 |
53 | current = current[nest]
54 | })
55 |
56 | if (candidate.name) {
57 | current[candidate.name] = content
58 | } else {
59 | translations[candidate.locale][candidate.type] = {...current, ...content}
60 | }
61 | })
62 |
63 | return translations
64 | }
65 |
66 | const getTranslationCandidates = (pattern: string, path: string, type: 'php' | 'json'): CandidateTranslation[] => {
67 | return glob.sync(pattern, {cwd: path}).map((transPath) => {
68 | const withoutExtension = transPath.split('.').shift()
69 | const name = type === 'php' ? basename(withoutExtension).toLocaleLowerCase() : null
70 | const locale = withoutExtension.split(sep).shift().toLocaleLowerCase()
71 | const nesting = withoutExtension.split(sep).slice(1, -1)
72 | return {
73 | type,
74 | basePath: path,
75 | path: transPath,
76 | name,
77 | nesting,
78 | locale,
79 | }
80 | })
81 | }
82 |
83 | const importJsonFile = (basePath: string, file: CandidateTranslation): object => {
84 | const content = readFileSync(join(basePath, file.path)).toString()
85 | return JSON.parse(content)
86 | }
87 |
88 | const importPhpFile = (basePath: string, file: CandidateTranslation): object | null => {
89 | const content = readFileSync(join(basePath, file.path)).toString()
90 | const phpArray = engine.parseCode(content, basename(file.path))
91 | .children.filter((child) => child.kind === 'return')[0] as Return
92 |
93 | if (phpArray?.expr?.kind !== 'array') {
94 | return null
95 | }
96 |
97 | return parseExpr(phpArray.expr)
98 | }
99 |
100 | const parseExpr = (expr) => {
101 | if (expr.kind === 'string') {
102 | return expr.value
103 | }
104 |
105 | if (expr.kind === 'array') {
106 | let items = expr.items.map((item) => parseExpr(item))
107 |
108 | if (expr.items.every((item) => item.key !== null)) {
109 | items = items.reduce((acc, val) => Object.assign({}, acc, val), {})
110 | }
111 |
112 | return items
113 | }
114 |
115 | if (expr.kind === 'bin') {
116 | return parseExpr(expr.left) + parseExpr(expr.right)
117 | }
118 |
119 | if (expr.key) {
120 | return {[expr.key.value]: parseExpr(expr.value)}
121 | }
122 |
123 | return parseExpr(expr.value)
124 | }
125 |
126 | export const saveJsonFile = (path: string, content: object) => {
127 | writeFileSync(join(path, 'translations.json'), JSON.stringify(content))
128 | }
--------------------------------------------------------------------------------
/src/index.ts:
--------------------------------------------------------------------------------
1 | import {Config, translator} from './translator'
2 | // @ts-ignore
3 | import translations from 'virtual-laravel-translations'
4 |
5 | declare global {
6 | interface Window {
7 | locale?: string;
8 | fallbackLocale?: string;
9 | }
10 | }
11 |
12 | const isServer = typeof window === 'undefined'
13 |
14 | const defaultConfig: Config = {
15 | locale: !isServer && document.documentElement.lang ? document.documentElement.lang.replace('-', '_') : 'en',
16 | fallbackLocale: !isServer && window ? window?.fallbackLocale?.replace('-', '_') : null,
17 | translations: translations,
18 | }
19 |
20 | const trans = (key: string, replace: object = {}, locale: string = null, config: Config = null) => {
21 | if (locale) {
22 | if (!config) {
23 | config = {...defaultConfig}
24 | }
25 | config.locale = locale
26 | }
27 |
28 | return translator(key, replace, false, config ?? defaultConfig)
29 | }
30 |
31 | const transChoice = (key: string, number: number, replace: Object = {}, locale: string = null, config: Config = null) => {
32 | if (locale) {
33 | if (!config) {
34 | config = {...defaultConfig}
35 | }
36 | config.locale = locale
37 | }
38 |
39 | return translator(key, {...replace, count: number}, true, config ?? defaultConfig)
40 | }
41 |
42 | const setLocale = (locale: string, fallbackLocale: string | null = null) => {
43 | defaultConfig.locale = locale?.replace('-', '_') ?? 'en'
44 | defaultConfig.fallbackLocale = fallbackLocale?.replace('-', '_') ?? null
45 | }
46 |
47 | const __ = trans;
48 | const t = trans;
49 | const trans_choice = transChoice;
50 |
51 | export {trans, __, t, transChoice, trans_choice, setLocale}
--------------------------------------------------------------------------------
/src/pluralizer.ts:
--------------------------------------------------------------------------------
1 | export function choose(message: string, number: number, lang: string): string {
2 | let segments = message.split('|')
3 | const extracted = extract(segments, number)
4 |
5 | if (extracted !== null) {
6 | return extracted.trim()
7 | }
8 |
9 | segments = stripConditions(segments)
10 | const pluralIndex = getPluralIndex(lang, number)
11 |
12 | if (segments.length === 1 || !segments[pluralIndex]) {
13 | return segments[0]
14 | }
15 |
16 | return segments[pluralIndex]
17 | }
18 |
19 | /**
20 | * Extract a translation string using inline conditions.
21 | */
22 | function extract(segments: string[], number: number): string | null {
23 | for (const part of segments) {
24 | let line = extractFromString(part, number)
25 |
26 | if (line !== null) {
27 | return line
28 | }
29 | }
30 |
31 | return null
32 | }
33 |
34 | /**
35 | * Get the translation string if the condition matches.
36 | */
37 | function extractFromString(part: string, number: number): string | null {
38 | const matches = part.match(/^[\{\[]([^\[\]\{\}]*)[\}\]](.*)/s) || []
39 | if (matches.length !== 3) {
40 | return null
41 | }
42 |
43 | const condition = matches[1]
44 | const value = matches[2]
45 |
46 | if (condition.includes(',')) {
47 | let [from, to] = condition.split(',')
48 |
49 | if (to === '*' && number >= parseFloat(from)) {
50 | return value
51 | } else if (from === '*' && number <= parseFloat(to)) {
52 | return value
53 | } else if (number >= parseFloat(from) && number <= parseFloat(to)) {
54 | return value
55 | }
56 | }
57 |
58 | return parseFloat(condition) === number ? value : null
59 | }
60 |
61 | /**
62 | * Strip the inline conditions from each segment, just leaving the text.
63 | */
64 | function stripConditions(segments: string[]): string[] {
65 | return segments.map((part) => part.replace(/^[\{\[]([^\[\]\{\}]*)[\}\]]/, ''))
66 | }
67 |
68 | function getPluralIndex(lang: string, number: number): number {
69 | switch (lang.replace('_', '-')) {
70 | case 'af':
71 | case 'af-ZA':
72 | case 'bn':
73 | case 'bn-BD':
74 | case 'bn-IN':
75 | case 'bg':
76 | case 'bg-BG':
77 | case 'ca':
78 | case 'ca-AD':
79 | case 'ca-ES':
80 | case 'ca-FR':
81 | case 'ca-IT':
82 | case 'da':
83 | case 'da-DK':
84 | case 'de':
85 | case 'de-AT':
86 | case 'de-BE':
87 | case 'de-CH':
88 | case 'de-DE':
89 | case 'de-LI':
90 | case 'de-LU':
91 | case 'el':
92 | case 'el-CY':
93 | case 'el-GR':
94 | case 'en':
95 | case 'en-AG':
96 | case 'en-AU':
97 | case 'en-BW':
98 | case 'en-CA':
99 | case 'en-DK':
100 | case 'en-GB':
101 | case 'en-HK':
102 | case 'en-IE':
103 | case 'en-IN':
104 | case 'en-NG':
105 | case 'en-NZ':
106 | case 'en-PH':
107 | case 'en-SG':
108 | case 'en-US':
109 | case 'en-ZA':
110 | case 'en-ZM':
111 | case 'en-ZW':
112 | case 'eo':
113 | case 'eo-US':
114 | case 'es':
115 | case 'es-AR':
116 | case 'es-BO':
117 | case 'es-CL':
118 | case 'es-CO':
119 | case 'es-CR':
120 | case 'es-CU':
121 | case 'es-DO':
122 | case 'es-EC':
123 | case 'es-ES':
124 | case 'es-GT':
125 | case 'es-HN':
126 | case 'es-MX':
127 | case 'es-NI':
128 | case 'es-PA':
129 | case 'es-PE':
130 | case 'es-PR':
131 | case 'es-PY':
132 | case 'es-SV':
133 | case 'es-US':
134 | case 'es-UY':
135 | case 'es-VE':
136 | case 'et':
137 | case 'et-EE':
138 | case 'eu':
139 | case 'eu-ES':
140 | case 'eu-FR':
141 | case 'fa':
142 | case 'fa-IR':
143 | case 'fi':
144 | case 'fi-FI':
145 | case 'fo':
146 | case 'fo-FO':
147 | case 'fur':
148 | case 'fur-IT':
149 | case 'fy':
150 | case 'fy-DE':
151 | case 'fy-NL':
152 | case 'gl':
153 | case 'gl-ES':
154 | case 'gu':
155 | case 'gu-IN':
156 | case 'ha':
157 | case 'ha-NG':
158 | case 'he':
159 | case 'he-IL':
160 | case 'hu':
161 | case 'hu-HU':
162 | case 'is':
163 | case 'is-IS':
164 | case 'it':
165 | case 'it-CH':
166 | case 'it-IT':
167 | case 'ku':
168 | case 'ku-TR':
169 | case 'lb':
170 | case 'lb-LU':
171 | case 'ml':
172 | case 'ml-IN':
173 | case 'mn':
174 | case 'mn-MN':
175 | case 'mr':
176 | case 'mr-IN':
177 | case 'nah':
178 | case 'nb':
179 | case 'nb-NO':
180 | case 'ne':
181 | case 'ne-NP':
182 | case 'nl':
183 | case 'nl-AW':
184 | case 'nl-BE':
185 | case 'nl-NL':
186 | case 'nn':
187 | case 'nn-NO':
188 | case 'no':
189 | case 'om':
190 | case 'om-ET':
191 | case 'om-KE':
192 | case 'or':
193 | case 'or-IN':
194 | case 'pa':
195 | case 'pa-IN':
196 | case 'pa-PK':
197 | case 'pap':
198 | case 'pap-AN':
199 | case 'pap-AW':
200 | case 'pap-CW':
201 | case 'ps':
202 | case 'ps-AF':
203 | case 'pt':
204 | case 'pt-BR':
205 | case 'pt-PT':
206 | case 'so':
207 | case 'so-DJ':
208 | case 'so-ET':
209 | case 'so-KE':
210 | case 'so-SO':
211 | case 'sq':
212 | case 'sq-AL':
213 | case 'sq-MK':
214 | case 'sv':
215 | case 'sv-FI':
216 | case 'sv-SE':
217 | case 'sw':
218 | case 'sw-KE':
219 | case 'sw-TZ':
220 | case 'ta':
221 | case 'ta-IN':
222 | case 'ta-LK':
223 | case 'te':
224 | case 'te-IN':
225 | case 'tk':
226 | case 'tk-TM':
227 | case 'ur':
228 | case 'ur-IN':
229 | case 'ur-PK':
230 | case 'zu':
231 | case 'zu-ZA':
232 | return number === 1 ? 0 : 1
233 | case 'am':
234 | case 'am-ET':
235 | case 'bh':
236 | case 'fil':
237 | case 'fil-PH':
238 | case 'fr':
239 | case 'fr-BE':
240 | case 'fr-CA':
241 | case 'fr-CH':
242 | case 'fr-FR':
243 | case 'fr-LU':
244 | case 'gun':
245 | case 'hi':
246 | case 'hi-IN':
247 | case 'hy':
248 | case 'hy-AM':
249 | case 'ln':
250 | case 'ln-CD':
251 | case 'mg':
252 | case 'mg-MG':
253 | case 'nso':
254 | case 'nso-ZA':
255 | case 'ti':
256 | case 'ti-ER':
257 | case 'ti-ET':
258 | case 'wa':
259 | case 'wa-BE':
260 | case 'xbr':
261 | return number === 0 || number === 1 ? 0 : 1
262 | case 'be':
263 | case 'be-BY':
264 | case 'bs':
265 | case 'bs-BA':
266 | case 'hr':
267 | case 'hr-HR':
268 | case 'ru':
269 | case 'ru-RU':
270 | case 'ru-UA':
271 | case 'sr':
272 | case 'sr-ME':
273 | case 'sr-RS':
274 | case 'uk':
275 | case 'uk-UA':
276 | return number % 10 == 1 && number % 100 != 11
277 | ? 0
278 | : number % 10 >= 2 && number % 10 <= 4 && (number % 100 < 10 || number % 100 >= 20)
279 | ? 1
280 | : 2
281 | case 'cs':
282 | case 'cs-CZ':
283 | case 'sk':
284 | case 'sk-SK':
285 | return number == 1 ? 0 : number >= 2 && number <= 4 ? 1 : 2
286 | case 'ga':
287 | case 'ga-IE':
288 | return number == 1 ? 0 : number == 2 ? 1 : 2
289 | case 'lt':
290 | case 'lt-LT':
291 | return number % 10 == 1 && number % 100 != 11
292 | ? 0
293 | : number % 10 >= 2 && (number % 100 < 10 || number % 100 >= 20)
294 | ? 1
295 | : 2
296 | case 'sl':
297 | case 'sl-SI':
298 | return number % 100 == 1 ? 0 : number % 100 == 2 ? 1 : number % 100 == 3 || number % 100 == 4 ? 2 : 3
299 | case 'mk':
300 | case 'mk-MK':
301 | return number % 10 == 1 ? 0 : 1
302 | case 'mt':
303 | case 'mt-MT':
304 | return number == 1
305 | ? 0
306 | : number == 0 || (number % 100 > 1 && number % 100 < 11)
307 | ? 1
308 | : number % 100 > 10 && number % 100 < 20
309 | ? 2
310 | : 3
311 | case 'lv':
312 | case 'lv-LV':
313 | return number == 0 ? 0 : number % 10 == 1 && number % 100 != 11 ? 1 : 2
314 | case 'pl':
315 | case 'pl-PL':
316 | return number == 1 ? 0 : number % 10 >= 2 && number % 10 <= 4 && (number % 100 < 12 || number % 100 > 14) ? 1 : 2
317 | case 'cy':
318 | case 'cy-GB':
319 | return number == 1 ? 0 : number == 2 ? 1 : number == 8 || number == 11 ? 2 : 3
320 | case 'ro':
321 | case 'ro-RO':
322 | return number == 1 ? 0 : number == 0 || (number % 100 > 0 && number % 100 < 20) ? 1 : 2
323 | case 'ar':
324 | case 'ar-AE':
325 | case 'ar-BH':
326 | case 'ar-DZ':
327 | case 'ar-EG':
328 | case 'ar-IN':
329 | case 'ar-IQ':
330 | case 'ar-JO':
331 | case 'ar-KW':
332 | case 'ar-LB':
333 | case 'ar-LY':
334 | case 'ar-MA':
335 | case 'ar-OM':
336 | case 'ar-QA':
337 | case 'ar-SA':
338 | case 'ar-SD':
339 | case 'ar-SS':
340 | case 'ar-SY':
341 | case 'ar-TN':
342 | case 'ar-YE':
343 | return number == 0
344 | ? 0
345 | : number == 1
346 | ? 1
347 | : number == 2
348 | ? 2
349 | : number % 100 >= 3 && number % 100 <= 10
350 | ? 3
351 | : number % 100 >= 11 && number % 100 <= 99
352 | ? 4
353 | : 5
354 | default:
355 | return 0
356 | }
357 | }
--------------------------------------------------------------------------------
/src/translator.ts:
--------------------------------------------------------------------------------
1 | import {choose} from "./pluralizer";
2 |
3 | export interface Config {
4 | locale: string
5 | fallbackLocale: string
6 | translations: object
7 | }
8 |
9 | export const translator = (key: string, replace: object, pluralize: boolean, config: Config) => {
10 | const locale = config?.locale?.toLowerCase() ?? 'en'
11 | const fallbackLocale = config?.fallbackLocale?.toLowerCase()
12 |
13 | // Check if the key is a translation key
14 | let translation = getTranslation(key, locale, config.translations)
15 |
16 | // If not, check if the key is a translation key in the fallback locale
17 | if (!translation && fallbackLocale) {
18 | translation = getTranslation(key, fallbackLocale, config.translations)
19 | }
20 |
21 | return translate(translation ?? key, replace, locale, pluralize) as string
22 | }
23 |
24 | const getTranslation = (key: string, locale: string, translations: object) => {
25 | let translation = null
26 |
27 | // Try to get the translation from the php array
28 | try {
29 | translation = key
30 | .split('.')
31 | .reduce((t, i) => t[i] || null, translations[locale].php)
32 | } catch (e) {
33 | }
34 |
35 | if (translation) {
36 | return translation
37 | }
38 |
39 | // Try to get the translation from the json array
40 | try {
41 | return key
42 | .split('.')
43 | .reduce((t, i) => t[i] || null, translations[locale].json)
44 | } catch (e) {
45 | }
46 |
47 | return translation
48 | }
49 |
50 | const translate = (translation: string | object, replace: object = {}, locale: string, shouldPluralize: boolean = false) => {
51 | if (shouldPluralize && typeof translation === 'string') {
52 | translation = choose(translation, replace['count'], locale);
53 | }
54 |
55 | Object.keys(replace).forEach(key => {
56 | const value = replace[key]?.toString()
57 |
58 | translation = translation.toString()
59 | .replace(':' + key, value)
60 | .replace(':' + key.charAt(0).toUpperCase() + key.slice(1), value.charAt(0).toUpperCase() + value.slice(1))
61 | .replace(':' + key.toUpperCase(), value.toUpperCase())
62 | })
63 |
64 | return translation
65 | }
66 |
--------------------------------------------------------------------------------
/src/vite.ts:
--------------------------------------------------------------------------------
1 | import * as path from 'path'
2 | import {Plugin} from 'vite'
3 | import {exportTranslations} from "./exporter";
4 |
5 | export interface VitePluginOptionsInterface {
6 | langPath?: string
7 | additionalLangPaths?: string[]
8 | }
9 |
10 | export default function laravelTranslator(options: string | VitePluginOptionsInterface = 'lang'): Plugin {
11 | let langPath = typeof options === 'string' ? options : options.langPath ?? 'lang'
12 | langPath = langPath.replace(/[\\/]$/, '') + path.sep
13 | const additionalLangPaths = typeof options === 'string' ? [] : options.additionalLangPaths ?? []
14 | const frameworkLangPath = 'vendor/laravel/framework/src/Illuminate/Translation/lang/'.replace('/', path.sep)
15 |
16 | const virtualModuleId = 'virtual-laravel-translations'
17 | const resolvedVirtualModuleId = '\0' + virtualModuleId
18 |
19 | const paths = [frameworkLangPath, langPath, ...additionalLangPaths]
20 | return {
21 | name: 'laravel-translator',
22 | config: () => ({
23 | optimizeDeps: {
24 | exclude: [virtualModuleId]
25 | },
26 | ssr: {
27 | noExternal: ['laravel-translator']
28 | },
29 | }),
30 | resolveId(id) {
31 | if (id === virtualModuleId) {
32 | return resolvedVirtualModuleId
33 | }
34 | return null
35 | },
36 | load(id) {
37 | if (id === resolvedVirtualModuleId) {
38 | return `export default ${JSON.stringify(exportTranslations(...paths))}`
39 | }
40 | return null
41 | },
42 | handleHotUpdate(ctx) {
43 | for (const lp of paths) {
44 | const relative = path.relative(lp, ctx.file);
45 | const isSub = relative && !relative.startsWith('..') && !path.isAbsolute(relative);
46 | if (isSub) {
47 | const virtualModule = ctx.server.moduleGraph.getModuleById(resolvedVirtualModuleId)!;
48 | ctx.server.moduleGraph.invalidateModule(virtualModule)
49 | ctx.server.ws.send({
50 | type: 'full-reload',
51 | path: '*'
52 | });
53 | return
54 | }
55 | }
56 | }
57 | }
58 | }
--------------------------------------------------------------------------------
/src/vue.ts:
--------------------------------------------------------------------------------
1 | import {trans, trans_choice} from "./index";
2 | import {App, computed, Ref} from "vue";
3 | import {Config} from "./translator";
4 |
5 | // @ts-ignore
6 | import translations from 'virtual-laravel-translations';
7 |
8 | export const LaravelTranslatorVue = {
9 | install: (app: App, options: ConfigVue) => {
10 | const locale = options.locale || '';
11 | const fallbackLocale = options.fallbackLocale || '';
12 |
13 | const configuration = computed(() => ({
14 | locale: (typeof locale === 'string') ? locale : locale?.value,
15 | fallbackLocale: (typeof fallbackLocale === 'string') ? fallbackLocale : fallbackLocale?.value,
16 | translations: translations,
17 | }));
18 |
19 | const translationCallback = (key: string, replace?: object, locale?: string) => trans(key, replace, undefined, {
20 | locale: locale || configuration.value.locale,
21 | fallbackLocale: configuration.value.fallbackLocale,
22 | translations: configuration.value.translations,
23 | });
24 |
25 | const translationWithPluralizationCallback = (key: string, number: number, replace?: Object, locale?: string) => trans_choice(key, number, replace, undefined, {
26 | locale: locale || configuration.value.locale,
27 | fallbackLocale: configuration.value.fallbackLocale,
28 | translations: configuration.value.translations,
29 | });
30 |
31 | if (parseInt(app.version) > 2) {
32 | app.provide('__', translationCallback);
33 | app.provide('t', translationCallback);
34 | app.provide('trans', translationCallback);
35 | app.provide('trans_choice', translationWithPluralizationCallback);
36 | app.provide('transChoice', translationWithPluralizationCallback);
37 |
38 | app.config.globalProperties.__ = translationCallback;
39 | app.config.globalProperties.t = translationCallback;
40 | app.config.globalProperties.trans = translationCallback;
41 | app.config.globalProperties.trans_choice = translationWithPluralizationCallback;
42 | app.config.globalProperties.transChoice = translationWithPluralizationCallback;
43 | } else {
44 | app.mixin({
45 | methods: {
46 | __: translationCallback,
47 | t: translationCallback,
48 | trans: translationCallback,
49 | trans_choice: translationWithPluralizationCallback,
50 | transChoice: translationWithPluralizationCallback,
51 | },
52 | });
53 | }
54 |
55 | return app;
56 | }
57 | };
58 |
59 | declare module '@vue/runtime-core' {
60 | export interface ComponentCustomProperties {
61 | trans: (key: string, replace?: object, locale?: string, config?: Config) => string;
62 | transChoice: (key: string, number: number, replace?: Object, locale?: string, config?: Config) => string;
63 | __: (key: string, replace?: object, locale?: string, config?: Config) => string;
64 | t: (key: string, replace?: object, locale?: string, config?: Config) => string;
65 | trans_choice: (key: string, number: number, replace?: Object, locale?: string, config?: Config) => string;
66 | }
67 | }
68 |
69 | interface ConfigVue {
70 | locale: string | Ref;
71 | fallbackLocale?: string | Ref;
72 | }
73 |
--------------------------------------------------------------------------------
/tests/exporter.test.ts:
--------------------------------------------------------------------------------
1 | import {expect, test} from "vitest";
2 | import {exportTranslations} from "../src/exporter";
3 |
4 |
5 | test('exports simple locale', async () => {
6 | const trans = exportTranslations('./tests/fixtures/locales')
7 |
8 | expect(trans).toEqual({
9 | "en": {
10 | "php": {
11 | "auth": {
12 | "failed": "These credentials are incorrect.",
13 | "throttle": "Too many login attempts. Please try again in :seconds seconds."
14 | }, "domain": {"user": {"sub_dir_support_is_amazing": "Subdirectory override is amazing"}}
15 | }
16 | }
17 | })
18 | })
19 |
20 | test('exports complex locale', async () => {
21 | const trans = exportTranslations('./tests/fixtures/lang')
22 |
23 | expect(trans).toEqual({
24 | "pt": {
25 | "php": {
26 | "auth": {
27 | "failed": "As credenciais indicadas não coincidem com as registadas no sistema.",
28 | "password": "A palavra-passe indicada está incorreta.",
29 | "foo": {"level1": {"level2": "barpt"}}
30 | }, "nested": {"cars": {"car": {"is_electric": "É elétrico?", "foo": {"level1": {"level2": "barpt"}}}}}
31 | },
32 | "json": {
33 | "Welcome!": "Bem-vindo!",
34 | "Welcome, :name!": "Bem-vindo, :name!",
35 | "hi :name, hi :name": "olá :name, olá :name",
36 | "{1} :count minute ago|[2,*] :count minutes ago": "{1} há :count minuto|[2,*] há :count minutos",
37 | "foo.bar": "baz",
38 | "Start/end": "Início/Fim",
39 | "Get started.": "Comece.",
40 | "Welcome
": "Bem-vindo
"
41 |
42 | }
43 | },
44 | "fr": {"php": {"auth": {"failed": "Ces identifiants ne correspondent pas à nos enregistrements."}}},
45 | "en": {
46 | "php": {
47 | "auth": {
48 | "failed": "These credentials do not match our records.",
49 | "password": "The provided password is incorrect.",
50 | "foo": {"level1": {"level2": "baren"}},
51 | "arr": ["foo", "bar"],
52 | "multiline": "Lorem ipsum dolor sit amet.",
53 | "accepted_1": "The :attribute must be accepted.",
54 | "accepted_2": "The :Attribute must be accepted.",
55 | "accepted_3": "The :ATTRIBUTE must be accepted.",
56 | },
57 | "nested": {"cars": {"car": {"is_electric": "Electric", "foo": {"level1": {"level2": "barpt"}}}}},
58 | "domain": {
59 | "user": {
60 | "user": "User|Users",
61 | "first_name": "First name",
62 | "sub_dir_support_is_amazing": "Subdirectory support is amazing"
63 | },
64 | "car": {
65 | "car": "Car|Cars",
66 | "is_electric": "Electric",
67 | "charge_speed": "Charge speed",
68 | "foo": {"level1": {"level2": "barpt"}}
69 | }
70 | }
71 | },
72 | "json": {
73 | "Welcome!": "Wecome!",
74 | "Welcome, :name!": "Welcome, :name!",
75 | "Only Available on EN": "Only Available on EN",
76 | "{1} :count minute ago|[2,*] :count minutes ago": "{1} :count minute ago|[2,*] :count minutes ago",
77 | "Start/end": "Start/End",
78 | "Get started.": "Get started.",
79 | "English only.": "English only."
80 |
81 | }
82 | },
83 | "zh_tw": {"json": {"Welcome!": "歡迎"}},
84 | "es": {"json": {"Welcome!": "Bienvenido!"}},
85 | "de": {"json": {"auth.arr.0": "foo", "auth.arr.1": "bar"}}
86 | }
87 | )
88 | })
--------------------------------------------------------------------------------
/tests/fixtures/lang/de.json:
--------------------------------------------------------------------------------
1 | {
2 | "auth.arr.0": "foo",
3 | "auth.arr.1": "bar"
4 | }
5 |
--------------------------------------------------------------------------------
/tests/fixtures/lang/en.json:
--------------------------------------------------------------------------------
1 | {
2 | "Welcome!": "Wecome!",
3 | "Welcome, :name!": "Welcome, :name!",
4 | "Only Available on EN": "Only Available on EN",
5 | "{1} :count minute ago|[2,*] :count minutes ago": "{1} :count minute ago|[2,*] :count minutes ago",
6 | "Start/end": "Start/End",
7 | "Get started.": "Get started.",
8 | "English only.": "English only."
9 | }
10 |
--------------------------------------------------------------------------------
/tests/fixtures/lang/en/auth.php:
--------------------------------------------------------------------------------
1 | 'These credentials do not match our records.',
5 | 'password' => 'The provided password is incorrect.',
6 | 'foo' => [
7 | 'level1' => [
8 | 'level2' => 'baren',
9 | ],
10 | ],
11 | 'arr' => ['foo', 'bar'],
12 | 'multiline' => 'Lorem '.
13 | 'ipsum '.
14 | 'dolor '.
15 | 'sit '.
16 | 'amet.',
17 | 'accepted_1' => 'The :attribute must be accepted.',
18 | 'accepted_2' => 'The :Attribute must be accepted.',
19 | 'accepted_3' => 'The :ATTRIBUTE must be accepted.',
20 | ];
21 |
--------------------------------------------------------------------------------
/tests/fixtures/lang/en/domain/car.php:
--------------------------------------------------------------------------------
1 | 'Car|Cars',
5 | 'is_electric' => 'Electric',
6 | 'charge_speed' => 'Charge speed',
7 | 'foo' => [
8 | 'level1' => [
9 | 'level2' => 'barpt'
10 | ]
11 | ],
12 | ];
13 |
--------------------------------------------------------------------------------
/tests/fixtures/lang/en/domain/user.php:
--------------------------------------------------------------------------------
1 | 'User|Users',
5 | 'first_name' => 'First name',
6 | 'sub_dir_support_is_amazing' => 'Subdirectory support is amazing',
7 | ];
8 |
--------------------------------------------------------------------------------
/tests/fixtures/lang/en/nested/cars/car.php:
--------------------------------------------------------------------------------
1 | 'Electric',
5 | 'foo' => [
6 | 'level1' => [
7 | 'level2' => 'barpt',
8 | ]
9 | ]
10 | ];
--------------------------------------------------------------------------------
/tests/fixtures/lang/es.json:
--------------------------------------------------------------------------------
1 | {
2 | "Welcome!": "Bienvenido!"
3 | }
4 |
--------------------------------------------------------------------------------
/tests/fixtures/lang/fr/auth.php:
--------------------------------------------------------------------------------
1 | 'Ces identifiants ne correspondent pas à nos enregistrements.',
5 | ];
6 |
--------------------------------------------------------------------------------
/tests/fixtures/lang/pt.json:
--------------------------------------------------------------------------------
1 | {
2 | "Welcome!": "Bem-vindo!",
3 | "Welcome, :name!": "Bem-vindo, :name!",
4 | "hi :name, hi :name": "olá :name, olá :name",
5 | "{1} :count minute ago|[2,*] :count minutes ago": "{1} há :count minuto|[2,*] há :count minutos",
6 | "foo.bar": "baz",
7 | "Start/end": "Início/Fim",
8 | "Get started.": "Comece.",
9 | "Welcome
": "Bem-vindo
"
10 | }
11 |
--------------------------------------------------------------------------------
/tests/fixtures/lang/pt/auth.php:
--------------------------------------------------------------------------------
1 | 'As credenciais indicadas não coincidem com as registadas no sistema.',
5 | 'password' => 'A palavra-passe indicada está incorreta.',
6 | 'foo' => [
7 | 'level1' => [
8 | 'level2' => 'barpt'
9 | ]
10 | ],
11 | ];
12 |
--------------------------------------------------------------------------------
/tests/fixtures/lang/pt/nested/cars/car.php:
--------------------------------------------------------------------------------
1 | 'É elétrico?',
5 | 'foo' => [
6 | 'level1' => [
7 | 'level2' => 'barpt',
8 | ]
9 | ]
10 | ];
--------------------------------------------------------------------------------
/tests/fixtures/lang/wrongfolder/random.php:
--------------------------------------------------------------------------------
1 | 'These credentials are incorrect.',
5 | 'throttle' => 'Too many login attempts. Please try again in :seconds seconds.'
6 | ];
--------------------------------------------------------------------------------
/tests/fixtures/locales/en/domain/user.php:
--------------------------------------------------------------------------------
1 | 'Subdirectory override is amazing',
5 | ];
6 |
--------------------------------------------------------------------------------
/tests/trans.test.ts:
--------------------------------------------------------------------------------
1 | import {beforeEach, expect, test} from "vitest";
2 | import {setLocale, trans, trans_choice} from "../src";
3 |
4 | beforeEach(() => {
5 | setLocale('en', null)
6 | });
7 |
8 | test('trans works with random key', async () => {
9 | const r = trans('random.key')
10 |
11 | expect(r).toBe('random.key')
12 | })
13 |
14 | test('trans works with a key that exists', async () => {
15 | const r = trans('auth.failed')
16 |
17 | expect(r).toBe('These credentials do not match our records.')
18 | })
19 |
20 | test('trans works with a key that exists nested', async () => {
21 | const r = trans('domain.car.is_electric')
22 |
23 | expect(r).toBe('Electric')
24 | })
25 |
26 | test('trans works with parameters', async () => {
27 | const r = trans('Welcome, :name!', {name: 'John'})
28 |
29 | expect(r).toBe('Welcome, John!')
30 | })
31 |
32 | test('trans works specifying locale', async () => {
33 | const r = trans('Welcome, :name!', {name: 'John'}, 'pt')
34 |
35 | expect(r).toBe('Bem-vindo, John!')
36 | })
37 |
38 | test('trans choice works with solo', async () => {
39 | const r = trans_choice('domain.car.car', 1)
40 |
41 | expect(r).toBe('Car')
42 | })
43 |
44 | test('trans choice works with multi', async () => {
45 | const r = trans_choice('domain.car.car', 2)
46 |
47 | expect(r).toBe('Cars')
48 | })
49 |
50 | test('setLocale works', async () => {
51 | setLocale('pt')
52 |
53 | expect(trans('Welcome, :name!', {name: 'John'})).toBe('Bem-vindo, John!')
54 | expect(trans('nested.cars.car.is_electric')).toBe('É elétrico?')
55 | })
56 |
57 | test('setLocale with fallback works', async () => {
58 | setLocale('fr', 'pt')
59 |
60 | expect(trans('auth.failed')).toBe('Ces identifiants ne correspondent pas à nos enregistrements.')
61 | expect(trans('nested.cars.car.is_electric')).toBe('É elétrico?')
62 | })
63 |
64 | test('specifying locale works', async () => {
65 | expect(trans('auth.failed', {}, 'fr')).toBe('Ces identifiants ne correspondent pas à nos enregistrements.')
66 | expect(trans('auth.failed', {}, 'en')).toBe('These credentials do not match our records.')
67 | expect(trans('auth.failed', {}, 'pt')).toBe('As credenciais indicadas não coincidem com as registadas no sistema.')
68 | })
69 |
70 | test('trans return object for partial translation paths', async () => {
71 | const r = trans('domain.car.foo.level1') as Object
72 |
73 | expect(r).toEqual({level2: 'barpt'})
74 | })
75 |
76 | test('trans works with capitalization lowercase', async () => {
77 | const r = trans('auth.accepted_1', {'attribute': 'email'})
78 |
79 | expect(r).toBe('The email must be accepted.')
80 | })
81 |
82 | test('trans works with capitalization ucfirst', async () => {
83 | const r = trans('auth.accepted_2', {'attribute': 'email'})
84 |
85 | expect(r).toBe('The Email must be accepted.')
86 | })
87 |
88 | test('trans works with capitalization uppercase', async () => {
89 | const r = trans('auth.accepted_3', {'attribute': 'email'})
90 |
91 | expect(r).toBe('The EMAIL must be accepted.')
92 | })
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "target": "ES2020",
4 | "module": "commonjs",
5 | "outDir": "dist",
6 | "declaration": true,
7 | "esModuleInterop": true,
8 | "sourceMap": true
9 | },
10 | "include": [
11 | "src/**/*.ts"
12 | ],
13 | "exclude": [
14 | "node_modules",
15 | "tests"
16 | ]
17 | }
--------------------------------------------------------------------------------
/vite.config.ts:
--------------------------------------------------------------------------------
1 | ///
2 | import {defineConfig} from 'vite'
3 | import laravelTranslator from "./src/vite";
4 |
5 | export default defineConfig({
6 | plugins: [laravelTranslator({
7 | langPath: 'tests/fixtures/lang',
8 | })],
9 | test: {
10 | coverage: {
11 | provider: 'v8',
12 | },
13 | },
14 | })
--------------------------------------------------------------------------------