├── .eslintrc.json
├── .github
└── workflows
│ ├── autofix.yml
│ └── integration.yml
├── .gitignore
├── .prettierignore
├── .vscode
├── launch.json
└── tasks.json
├── .vscodeignore
├── CHANGELOG.md
├── LICENSE
├── README.md
├── assets
└── icon.png
├── esbuild.config.mjs
├── package.json
├── pnpm-lock.yaml
├── src
├── extension.ts
├── libs
│ ├── ast.ts
│ ├── config.ts
│ ├── content.ts
│ ├── git.ts
│ ├── translation.ts
│ └── vsc.ts
└── vscode.git.d.ts
├── tests
└── ast.test.ts
└── tsconfig.json
/.eslintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["@hideoo"]
3 | }
4 |
--------------------------------------------------------------------------------
/.github/workflows/autofix.yml:
--------------------------------------------------------------------------------
1 | name: autofix.ci
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | pull_request:
8 | branches:
9 | - main
10 | workflow_call:
11 |
12 | permissions:
13 | contents: read
14 |
15 | concurrency:
16 | cancel-in-progress: true
17 | group: ${{ github.workflow }}-${{ github.event_name == 'pull_request_target' && github.head_ref || github.ref }}
18 |
19 | jobs:
20 | autofix:
21 | name: Format code
22 | runs-on: ubuntu-latest
23 | steps:
24 | - name: Checkout
25 | uses: actions/checkout@v4
26 |
27 | - name: Install pnpm
28 | uses: pnpm/action-setup@v4
29 | with:
30 | version: 8.7.5
31 |
32 | - name: Install Node.js
33 | uses: actions/setup-node@v4
34 | with:
35 | cache: pnpm
36 | node-version: 18
37 |
38 | - name: Install dependencies
39 | run: pnpm install
40 |
41 | - name: Format code
42 | run: pnpm format
43 |
44 | - name: Run autofix
45 | uses: autofix-ci/action@ff86a557419858bb967097bfc916833f5647fa8c
46 | with:
47 | fail-fast: false
48 |
--------------------------------------------------------------------------------
/.github/workflows/integration.yml:
--------------------------------------------------------------------------------
1 | name: integration
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | pull_request:
8 | branches:
9 | - main
10 | workflow_call:
11 |
12 | concurrency:
13 | cancel-in-progress: true
14 | group: ${{ github.workflow }}-${{ github.event_name == 'pull_request_target' && github.head_ref || github.ref }}
15 |
16 | jobs:
17 | lint:
18 | name: Lint
19 | runs-on: ubuntu-latest
20 | steps:
21 | - name: Checkout
22 | uses: actions/checkout@v4
23 |
24 | - name: Install pnpm
25 | uses: pnpm/action-setup@v4
26 | with:
27 | version: 8.7.5
28 |
29 | - name: Install Node.js
30 | uses: actions/setup-node@v4
31 | with:
32 | cache: pnpm
33 | node-version: 18
34 |
35 | - name: Install dependencies
36 | run: pnpm install
37 |
38 | - name: Lint
39 | run: pnpm lint
40 |
41 | - name: Test
42 | run: pnpm test
43 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | .astro
2 | .DS_Store
3 | .eslintcache
4 | .idea
5 | .next
6 | .turbo
7 | .vercel
8 | .vscode/*
9 | !.vscode/extensions.json
10 | !.vscode/launch.json
11 | !.vscode/settings.json
12 | !.vscode/tasks.json
13 | .vscode-test
14 | .vscode-test-web
15 | *.local
16 | *.log
17 | *.pem
18 | *.tsbuildinfo
19 | build
20 | coverage
21 | dist
22 | dist-ssr
23 | lerna-debug.log*
24 | logs
25 | next-env.d.ts
26 | node_modules
27 | npm-debug.log*
28 | out
29 | pnpm-debug.log*
30 | releases
31 | starlight-i18n-**.vsix
32 | test-results
33 | yarn-debug.log*
34 | yarn-error.log*
35 |
--------------------------------------------------------------------------------
/.prettierignore:
--------------------------------------------------------------------------------
1 | .astro
2 | .github/blocks
3 | .next
4 | .vercel
5 | .vscode-test
6 | .vscode-test-web
7 | build
8 | coverage
9 | dist
10 | dist-ssr
11 | out
12 | pnpm-lock.yaml
13 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | // https://code.visualstudio.com/docs/editor/debugging#_launch-configurations
2 | {
3 | "version": "0.2.0",
4 | "configurations": [
5 | {
6 | "name": "Run Extension",
7 | "type": "extensionHost",
8 | "request": "launch",
9 | "args": ["--disable-extensions", "--extensionDevelopmentPath=${workspaceFolder}"],
10 | "outFiles": ["${workspaceFolder}/dist/**/*.js"],
11 | "preLaunchTask": "${defaultBuildTask}"
12 | }
13 | ]
14 | }
15 |
--------------------------------------------------------------------------------
/.vscode/tasks.json:
--------------------------------------------------------------------------------
1 | // https://code.visualstudio.com/docs/editor/tasks#_custom-tasks
2 | {
3 | "version": "2.0.0",
4 | "tasks": [
5 | {
6 | "type": "npm",
7 | "script": "build\" -- --dev\"",
8 | "problemMatcher": "$esbuild",
9 | "group": {
10 | "kind": "build",
11 | "isDefault": true
12 | },
13 | "presentation": {
14 | "reveal": "never"
15 | }
16 | }
17 | ]
18 | }
19 |
--------------------------------------------------------------------------------
/.vscodeignore:
--------------------------------------------------------------------------------
1 | .eslintcache
2 | .github
3 | .gitignore
4 | .husky
5 | .prettierignore
6 | .vscode
7 | esbuild.config.mjs
8 | pnpm-lock.yaml
9 | src
10 | starlight-i18n-**.vsix
11 | tests
12 | tsconfig.json
13 | tsconfig.tsbuildinfo
14 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # Changelog
2 |
3 | All notable changes to this project will be documented in this file.
4 |
5 | ## v0.2.0
6 |
7 | ### 🚀 Features
8 |
9 | - Support reading locales configuration from an imported relative JSON file.
10 |
11 | ### 🐞 Bug Fixes
12 |
13 | - Fix path issue when no root locale is defined.
14 | - Fix issue with some commit being incorrectly ignored.
15 | - Clear quick pick input after selecting a locale.
16 |
17 | ## v0.1.1
18 |
19 | ### 🏎 Performance
20 |
21 | - Improve configuration parsing performance.
22 |
23 | ## v0.1.0
24 |
25 | ### 🚀 Features
26 |
27 | - Initial public release.
28 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2023-present, HiDeoo
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 |
Starlight i18n
4 |
5 |
6 |
22 |
23 | ## Features
24 |
25 | Visual Studio Code extension to easily translate [Starlight](https://starlight.astro.build/) documentation pages using the built-in [support for multilingual sites](https://starlight.astro.build/guides/i18n/) and [git](https://git-scm.com/).
26 |
27 | - Collect supported languages from a Starlight configuration in a workspace repo or monorepo.
28 | - Pick a language and a page to translate.
29 | - Open side-by-side editors with the missing changes and the translated page for out-of-date pages.
30 | - Open side-by-side editors with the source page and a newly created page for missing translated pages.
31 | - Configurable Starlight configuration directories.
32 |
33 | ## Usage
34 |
35 | 1. Open a repository or monorepo containing a Starlight documentation website.
36 | 2. Open the Visual Studio Code [Command Palette](https://code.visualstudio.com/docs/getstarted/userinterface#_command-palette) (`Ctrl+Shift+P` or `Cmd+Shift+P` on macOS)
37 | 3. Run the `Starlight i18n` command
38 |
39 | ## Configuration
40 |
41 | By default, the Starlight i18n extension will look for a Starlight configuration in an [Astro configuration file](https://docs.astro.build/en/guides/configuring-astro/#supported-config-file-types) located either at the root of the workspace or in a `docs/` subdirectory.
42 |
43 | You can customize the directories where the extension will look for a Starlight configuration in your Visual Studio Code [User](https://code.visualstudio.com/docs/getstarted/settings#_settings-editor) or [Workspace](https://code.visualstudio.com/docs/getstarted/settings#_workspace-settings) settings.
44 |
45 | ```json
46 | {
47 | "starlight-i18n.configDirectories": [".", "./docs", "./app", "./packages/docs"]
48 | }
49 | ```
50 |
51 | ## More extensions
52 |
53 | - [Toggler](https://marketplace.visualstudio.com/items?itemName=hideoo.toggler) - Toggle words and symbols.
54 | - [Create](https://marketplace.visualstudio.com/items?itemName=hideoo.create) - Quickly create new File(s) & Folder(s).
55 | - [Trailing](https://marketplace.visualstudio.com/items?itemName=hideoo.trailing) - Toggle trailing symbols: commas, semicolons and colons.
56 |
57 | ## License
58 |
59 | Licensed under the MIT License, Copyright © HiDeoo.
60 |
61 | See [LICENSE](https://github.com/HiDeoo/starlight-i18n/blob/main/LICENSE) for more information.
62 |
--------------------------------------------------------------------------------
/assets/icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/HiDeoo/starlight-i18n/797dc5c70f0c5048c687bc9295b90d0dc2ce447e/assets/icon.png
--------------------------------------------------------------------------------
/esbuild.config.mjs:
--------------------------------------------------------------------------------
1 | import esbuild from 'esbuild'
2 |
3 | const args = process.argv.slice(2)
4 | const dev = args.includes('--dev')
5 |
6 | esbuild.buildSync({
7 | bundle: true,
8 | entryPoints: ['./src/extension.ts'],
9 | external: ['vscode'],
10 | format: 'cjs',
11 | minify: !dev,
12 | outfile: 'dist/extension.js',
13 | platform: 'node',
14 | sourcemap: dev,
15 | })
16 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "starlight-i18n",
3 | "version": "0.2.0",
4 | "license": "MIT",
5 | "description": "Easily translate Starlight documentation pages.",
6 | "author": "HiDeoo (https://hideoo.dev)",
7 | "main": "dist/extension.js",
8 | "scripts": {
9 | "build": "pnpm clean && node esbuild.config.mjs",
10 | "test": "vitest",
11 | "lint": "eslint . --cache --max-warnings=0 && tsc --noEmit",
12 | "format": "prettier -w --cache --ignore-unknown .",
13 | "clean": "rimraf dist",
14 | "vscode:ls": "pnpx vsce ls --no-dependencies",
15 | "vscode:package": "pnpx vsce package --no-dependencies",
16 | "vscode:publish": "pnpx vsce publish --no-dependencies",
17 | "vscode:prepublish": "pnpm build"
18 | },
19 | "dependencies": {
20 | "@babel/parser": "7.22.16",
21 | "@babel/traverse": "7.22.20",
22 | "@babel/types": "7.22.19"
23 | },
24 | "devDependencies": {
25 | "@hideoo/eslint-config": "2.0.1",
26 | "@hideoo/prettier-config": "2.0.0",
27 | "@hideoo/tsconfig": "2.0.1",
28 | "@types/babel__traverse": "7.20.2",
29 | "@types/node": "18.17.15",
30 | "@types/vscode": "1.81.0",
31 | "esbuild": "0.19.2",
32 | "eslint": "8.49.0",
33 | "prettier": "3.0.3",
34 | "rimraf": "5.0.1",
35 | "typescript": "5.2.2",
36 | "vitest": "0.34.4"
37 | },
38 | "engines": {
39 | "vscode": "^1.81.0"
40 | },
41 | "packageManager": "pnpm@8.7.5",
42 | "private": true,
43 | "sideEffects": false,
44 | "keywords": [
45 | "starlight",
46 | "documentation",
47 | "internationalization",
48 | "i18n",
49 | "translation"
50 | ],
51 | "homepage": "https://github.com/HiDeoo/starlight-i18n",
52 | "repository": {
53 | "type": "git",
54 | "url": "https://github.com/HiDeoo/starlight-i18n.git"
55 | },
56 | "bugs": "https://github.com/HiDeoo/starlight-i18n/issues",
57 | "activationEvents": [
58 | "onCommand:starlight-i18n.start"
59 | ],
60 | "contributes": {
61 | "commands": [
62 | {
63 | "command": "starlight-i18n.start",
64 | "title": "Starlight i18n"
65 | }
66 | ],
67 | "configuration": {
68 | "title": "Starlight i18n",
69 | "properties": {
70 | "starlight-i18n.configDirectories": {
71 | "default": [
72 | ".",
73 | "./docs"
74 | ],
75 | "description": "The directories to look for Starlight configuration files in (relative to the workspace root).",
76 | "type": "array"
77 | }
78 | }
79 | }
80 | },
81 | "capabilities": {
82 | "untrustedWorkspaces": {
83 | "supported": true
84 | }
85 | },
86 | "extensionKind": [
87 | "workspace"
88 | ],
89 | "extensionDependencies": [
90 | "vscode.git"
91 | ],
92 | "displayName": "Starlight i18n",
93 | "publisher": "hideoo",
94 | "categories": [
95 | "Other"
96 | ],
97 | "preview": true,
98 | "icon": "assets/icon.png",
99 | "galleryBanner": {
100 | "color": "#7a8194",
101 | "theme": "dark"
102 | },
103 | "badges": [
104 | {
105 | "url": "https://github.com/HiDeoo/starlight-i18n/actions/workflows/integration.yml/badge.svg",
106 | "href": "https://github.com/HiDeoo/starlight-i18n/actions/workflows/integration.yml",
107 | "description": "Integration Status"
108 | },
109 | {
110 | "url": "https://badgen.net/github/license/hideoo/starlight-i18n",
111 | "href": "https://github.com/HiDeoo/starlight-i18n/blob/main/LICENSE",
112 | "description": "License"
113 | }
114 | ],
115 | "prettier": "@hideoo/prettier-config"
116 | }
117 |
--------------------------------------------------------------------------------
/pnpm-lock.yaml:
--------------------------------------------------------------------------------
1 | lockfileVersion: '6.0'
2 |
3 | settings:
4 | autoInstallPeers: true
5 | excludeLinksFromLockfile: false
6 |
7 | dependencies:
8 | '@babel/parser':
9 | specifier: 7.22.16
10 | version: 7.22.16
11 | '@babel/traverse':
12 | specifier: 7.22.20
13 | version: 7.22.20
14 | '@babel/types':
15 | specifier: 7.22.19
16 | version: 7.22.19
17 |
18 | devDependencies:
19 | '@hideoo/eslint-config':
20 | specifier: 2.0.1
21 | version: 2.0.1(eslint@8.49.0)(typescript@5.2.2)
22 | '@hideoo/prettier-config':
23 | specifier: 2.0.0
24 | version: 2.0.0
25 | '@hideoo/tsconfig':
26 | specifier: 2.0.1
27 | version: 2.0.1
28 | '@types/babel__traverse':
29 | specifier: 7.20.2
30 | version: 7.20.2
31 | '@types/node':
32 | specifier: 18.17.15
33 | version: 18.17.15
34 | '@types/vscode':
35 | specifier: 1.81.0
36 | version: 1.81.0
37 | esbuild:
38 | specifier: 0.19.2
39 | version: 0.19.2
40 | eslint:
41 | specifier: 8.49.0
42 | version: 8.49.0
43 | prettier:
44 | specifier: 3.0.3
45 | version: 3.0.3
46 | rimraf:
47 | specifier: 5.0.1
48 | version: 5.0.1
49 | typescript:
50 | specifier: 5.2.2
51 | version: 5.2.2
52 | vitest:
53 | specifier: 0.34.4
54 | version: 0.34.4
55 |
56 | packages:
57 |
58 | /@aashutoshrathi/word-wrap@1.2.6:
59 | resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==}
60 | engines: {node: '>=0.10.0'}
61 | dev: true
62 |
63 | /@astrojs/compiler@2.1.0:
64 | resolution: {integrity: sha512-Mp+qrNhly+27bL/Zq8lGeUY+YrdoU0eDfIlAeGIPrzt0PnI/jGpvPUdCaugv4zbCrDkOUScFfcbeEiYumrdJnw==}
65 | dev: true
66 |
67 | /@babel/code-frame@7.22.13:
68 | resolution: {integrity: sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w==}
69 | engines: {node: '>=6.9.0'}
70 | dependencies:
71 | '@babel/highlight': 7.22.13
72 | chalk: 2.4.2
73 |
74 | /@babel/generator@7.22.15:
75 | resolution: {integrity: sha512-Zu9oWARBqeVOW0dZOjXc3JObrzuqothQ3y/n1kUtrjCoCPLkXUwMvOo/F/TCfoHMbWIFlWwpZtkZVb9ga4U2pA==}
76 | engines: {node: '>=6.9.0'}
77 | dependencies:
78 | '@babel/types': 7.22.19
79 | '@jridgewell/gen-mapping': 0.3.3
80 | '@jridgewell/trace-mapping': 0.3.19
81 | jsesc: 2.5.2
82 | dev: false
83 |
84 | /@babel/helper-environment-visitor@7.22.20:
85 | resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==}
86 | engines: {node: '>=6.9.0'}
87 | dev: false
88 |
89 | /@babel/helper-function-name@7.22.5:
90 | resolution: {integrity: sha512-wtHSq6jMRE3uF2otvfuD3DIvVhOsSNshQl0Qrd7qC9oQJzHvOL4qQXlQn2916+CXGywIjpGuIkoyZRRxHPiNQQ==}
91 | engines: {node: '>=6.9.0'}
92 | dependencies:
93 | '@babel/template': 7.22.15
94 | '@babel/types': 7.22.19
95 | dev: false
96 |
97 | /@babel/helper-hoist-variables@7.22.5:
98 | resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==}
99 | engines: {node: '>=6.9.0'}
100 | dependencies:
101 | '@babel/types': 7.22.19
102 | dev: false
103 |
104 | /@babel/helper-split-export-declaration@7.22.6:
105 | resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==}
106 | engines: {node: '>=6.9.0'}
107 | dependencies:
108 | '@babel/types': 7.22.19
109 | dev: false
110 |
111 | /@babel/helper-string-parser@7.22.5:
112 | resolution: {integrity: sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw==}
113 | engines: {node: '>=6.9.0'}
114 |
115 | /@babel/helper-validator-identifier@7.22.15:
116 | resolution: {integrity: sha512-4E/F9IIEi8WR94324mbDUMo074YTheJmd7eZF5vITTeYchqAi6sYXRLHUVsmkdmY4QjfKTcB2jB7dVP3NaBElQ==}
117 | engines: {node: '>=6.9.0'}
118 |
119 | /@babel/helper-validator-identifier@7.22.20:
120 | resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==}
121 | engines: {node: '>=6.9.0'}
122 |
123 | /@babel/highlight@7.22.13:
124 | resolution: {integrity: sha512-C/BaXcnnvBCmHTpz/VGZ8jgtE2aYlW4hxDhseJAWZb7gqGM/qtCK6iZUb0TyKFf7BOUsBH7Q7fkRsDRhg1XklQ==}
125 | engines: {node: '>=6.9.0'}
126 | dependencies:
127 | '@babel/helper-validator-identifier': 7.22.15
128 | chalk: 2.4.2
129 | js-tokens: 4.0.0
130 |
131 | /@babel/parser@7.22.16:
132 | resolution: {integrity: sha512-+gPfKv8UWeKKeJTUxe59+OobVcrYHETCsORl61EmSkmgymguYk/X5bp7GuUIXaFsc6y++v8ZxPsLSSuujqDphA==}
133 | engines: {node: '>=6.0.0'}
134 | hasBin: true
135 | dependencies:
136 | '@babel/types': 7.22.19
137 | dev: false
138 |
139 | /@babel/runtime@7.22.15:
140 | resolution: {integrity: sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA==}
141 | engines: {node: '>=6.9.0'}
142 | dependencies:
143 | regenerator-runtime: 0.14.0
144 | dev: true
145 |
146 | /@babel/template@7.22.15:
147 | resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==}
148 | engines: {node: '>=6.9.0'}
149 | dependencies:
150 | '@babel/code-frame': 7.22.13
151 | '@babel/parser': 7.22.16
152 | '@babel/types': 7.22.19
153 | dev: false
154 |
155 | /@babel/traverse@7.22.20:
156 | resolution: {integrity: sha512-eU260mPZbU7mZ0N+X10pxXhQFMGTeLb9eFS0mxehS8HZp9o1uSnFeWQuG1UPrlxgA7QoUzFhOnilHDp0AXCyHw==}
157 | engines: {node: '>=6.9.0'}
158 | dependencies:
159 | '@babel/code-frame': 7.22.13
160 | '@babel/generator': 7.22.15
161 | '@babel/helper-environment-visitor': 7.22.20
162 | '@babel/helper-function-name': 7.22.5
163 | '@babel/helper-hoist-variables': 7.22.5
164 | '@babel/helper-split-export-declaration': 7.22.6
165 | '@babel/parser': 7.22.16
166 | '@babel/types': 7.22.19
167 | debug: 4.3.4
168 | globals: 11.12.0
169 | transitivePeerDependencies:
170 | - supports-color
171 | dev: false
172 |
173 | /@babel/types@7.22.19:
174 | resolution: {integrity: sha512-P7LAw/LbojPzkgp5oznjE6tQEIWbp4PkkfrZDINTro9zgBRtI324/EYsiSI7lhPbpIQ+DCeR2NNmMWANGGfZsg==}
175 | engines: {node: '>=6.9.0'}
176 | dependencies:
177 | '@babel/helper-string-parser': 7.22.5
178 | '@babel/helper-validator-identifier': 7.22.20
179 | to-fast-properties: 2.0.0
180 |
181 | /@esbuild/android-arm64@0.18.20:
182 | resolution: {integrity: sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==}
183 | engines: {node: '>=12'}
184 | cpu: [arm64]
185 | os: [android]
186 | requiresBuild: true
187 | dev: true
188 | optional: true
189 |
190 | /@esbuild/android-arm64@0.19.2:
191 | resolution: {integrity: sha512-lsB65vAbe90I/Qe10OjkmrdxSX4UJDjosDgb8sZUKcg3oefEuW2OT2Vozz8ef7wrJbMcmhvCC+hciF8jY/uAkw==}
192 | engines: {node: '>=12'}
193 | cpu: [arm64]
194 | os: [android]
195 | requiresBuild: true
196 | dev: true
197 | optional: true
198 |
199 | /@esbuild/android-arm@0.18.20:
200 | resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
201 | engines: {node: '>=12'}
202 | cpu: [arm]
203 | os: [android]
204 | requiresBuild: true
205 | dev: true
206 | optional: true
207 |
208 | /@esbuild/android-arm@0.19.2:
209 | resolution: {integrity: sha512-tM8yLeYVe7pRyAu9VMi/Q7aunpLwD139EY1S99xbQkT4/q2qa6eA4ige/WJQYdJ8GBL1K33pPFhPfPdJ/WzT8Q==}
210 | engines: {node: '>=12'}
211 | cpu: [arm]
212 | os: [android]
213 | requiresBuild: true
214 | dev: true
215 | optional: true
216 |
217 | /@esbuild/android-x64@0.18.20:
218 | resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
219 | engines: {node: '>=12'}
220 | cpu: [x64]
221 | os: [android]
222 | requiresBuild: true
223 | dev: true
224 | optional: true
225 |
226 | /@esbuild/android-x64@0.19.2:
227 | resolution: {integrity: sha512-qK/TpmHt2M/Hg82WXHRc/W/2SGo/l1thtDHZWqFq7oi24AjZ4O/CpPSu6ZuYKFkEgmZlFoa7CooAyYmuvnaG8w==}
228 | engines: {node: '>=12'}
229 | cpu: [x64]
230 | os: [android]
231 | requiresBuild: true
232 | dev: true
233 | optional: true
234 |
235 | /@esbuild/darwin-arm64@0.18.20:
236 | resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
237 | engines: {node: '>=12'}
238 | cpu: [arm64]
239 | os: [darwin]
240 | requiresBuild: true
241 | dev: true
242 | optional: true
243 |
244 | /@esbuild/darwin-arm64@0.19.2:
245 | resolution: {integrity: sha512-Ora8JokrvrzEPEpZO18ZYXkH4asCdc1DLdcVy8TGf5eWtPO1Ie4WroEJzwI52ZGtpODy3+m0a2yEX9l+KUn0tA==}
246 | engines: {node: '>=12'}
247 | cpu: [arm64]
248 | os: [darwin]
249 | requiresBuild: true
250 | dev: true
251 | optional: true
252 |
253 | /@esbuild/darwin-x64@0.18.20:
254 | resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
255 | engines: {node: '>=12'}
256 | cpu: [x64]
257 | os: [darwin]
258 | requiresBuild: true
259 | dev: true
260 | optional: true
261 |
262 | /@esbuild/darwin-x64@0.19.2:
263 | resolution: {integrity: sha512-tP+B5UuIbbFMj2hQaUr6EALlHOIOmlLM2FK7jeFBobPy2ERdohI4Ka6ZFjZ1ZYsrHE/hZimGuU90jusRE0pwDw==}
264 | engines: {node: '>=12'}
265 | cpu: [x64]
266 | os: [darwin]
267 | requiresBuild: true
268 | dev: true
269 | optional: true
270 |
271 | /@esbuild/freebsd-arm64@0.18.20:
272 | resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
273 | engines: {node: '>=12'}
274 | cpu: [arm64]
275 | os: [freebsd]
276 | requiresBuild: true
277 | dev: true
278 | optional: true
279 |
280 | /@esbuild/freebsd-arm64@0.19.2:
281 | resolution: {integrity: sha512-YbPY2kc0acfzL1VPVK6EnAlig4f+l8xmq36OZkU0jzBVHcOTyQDhnKQaLzZudNJQyymd9OqQezeaBgkTGdTGeQ==}
282 | engines: {node: '>=12'}
283 | cpu: [arm64]
284 | os: [freebsd]
285 | requiresBuild: true
286 | dev: true
287 | optional: true
288 |
289 | /@esbuild/freebsd-x64@0.18.20:
290 | resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
291 | engines: {node: '>=12'}
292 | cpu: [x64]
293 | os: [freebsd]
294 | requiresBuild: true
295 | dev: true
296 | optional: true
297 |
298 | /@esbuild/freebsd-x64@0.19.2:
299 | resolution: {integrity: sha512-nSO5uZT2clM6hosjWHAsS15hLrwCvIWx+b2e3lZ3MwbYSaXwvfO528OF+dLjas1g3bZonciivI8qKR/Hm7IWGw==}
300 | engines: {node: '>=12'}
301 | cpu: [x64]
302 | os: [freebsd]
303 | requiresBuild: true
304 | dev: true
305 | optional: true
306 |
307 | /@esbuild/linux-arm64@0.18.20:
308 | resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
309 | engines: {node: '>=12'}
310 | cpu: [arm64]
311 | os: [linux]
312 | requiresBuild: true
313 | dev: true
314 | optional: true
315 |
316 | /@esbuild/linux-arm64@0.19.2:
317 | resolution: {integrity: sha512-ig2P7GeG//zWlU0AggA3pV1h5gdix0MA3wgB+NsnBXViwiGgY77fuN9Wr5uoCrs2YzaYfogXgsWZbm+HGr09xg==}
318 | engines: {node: '>=12'}
319 | cpu: [arm64]
320 | os: [linux]
321 | requiresBuild: true
322 | dev: true
323 | optional: true
324 |
325 | /@esbuild/linux-arm@0.18.20:
326 | resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
327 | engines: {node: '>=12'}
328 | cpu: [arm]
329 | os: [linux]
330 | requiresBuild: true
331 | dev: true
332 | optional: true
333 |
334 | /@esbuild/linux-arm@0.19.2:
335 | resolution: {integrity: sha512-Odalh8hICg7SOD7XCj0YLpYCEc+6mkoq63UnExDCiRA2wXEmGlK5JVrW50vZR9Qz4qkvqnHcpH+OFEggO3PgTg==}
336 | engines: {node: '>=12'}
337 | cpu: [arm]
338 | os: [linux]
339 | requiresBuild: true
340 | dev: true
341 | optional: true
342 |
343 | /@esbuild/linux-ia32@0.18.20:
344 | resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
345 | engines: {node: '>=12'}
346 | cpu: [ia32]
347 | os: [linux]
348 | requiresBuild: true
349 | dev: true
350 | optional: true
351 |
352 | /@esbuild/linux-ia32@0.19.2:
353 | resolution: {integrity: sha512-mLfp0ziRPOLSTek0Gd9T5B8AtzKAkoZE70fneiiyPlSnUKKI4lp+mGEnQXcQEHLJAcIYDPSyBvsUbKUG2ri/XQ==}
354 | engines: {node: '>=12'}
355 | cpu: [ia32]
356 | os: [linux]
357 | requiresBuild: true
358 | dev: true
359 | optional: true
360 |
361 | /@esbuild/linux-loong64@0.18.20:
362 | resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
363 | engines: {node: '>=12'}
364 | cpu: [loong64]
365 | os: [linux]
366 | requiresBuild: true
367 | dev: true
368 | optional: true
369 |
370 | /@esbuild/linux-loong64@0.19.2:
371 | resolution: {integrity: sha512-hn28+JNDTxxCpnYjdDYVMNTR3SKavyLlCHHkufHV91fkewpIyQchS1d8wSbmXhs1fiYDpNww8KTFlJ1dHsxeSw==}
372 | engines: {node: '>=12'}
373 | cpu: [loong64]
374 | os: [linux]
375 | requiresBuild: true
376 | dev: true
377 | optional: true
378 |
379 | /@esbuild/linux-mips64el@0.18.20:
380 | resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
381 | engines: {node: '>=12'}
382 | cpu: [mips64el]
383 | os: [linux]
384 | requiresBuild: true
385 | dev: true
386 | optional: true
387 |
388 | /@esbuild/linux-mips64el@0.19.2:
389 | resolution: {integrity: sha512-KbXaC0Sejt7vD2fEgPoIKb6nxkfYW9OmFUK9XQE4//PvGIxNIfPk1NmlHmMg6f25x57rpmEFrn1OotASYIAaTg==}
390 | engines: {node: '>=12'}
391 | cpu: [mips64el]
392 | os: [linux]
393 | requiresBuild: true
394 | dev: true
395 | optional: true
396 |
397 | /@esbuild/linux-ppc64@0.18.20:
398 | resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
399 | engines: {node: '>=12'}
400 | cpu: [ppc64]
401 | os: [linux]
402 | requiresBuild: true
403 | dev: true
404 | optional: true
405 |
406 | /@esbuild/linux-ppc64@0.19.2:
407 | resolution: {integrity: sha512-dJ0kE8KTqbiHtA3Fc/zn7lCd7pqVr4JcT0JqOnbj4LLzYnp+7h8Qi4yjfq42ZlHfhOCM42rBh0EwHYLL6LEzcw==}
408 | engines: {node: '>=12'}
409 | cpu: [ppc64]
410 | os: [linux]
411 | requiresBuild: true
412 | dev: true
413 | optional: true
414 |
415 | /@esbuild/linux-riscv64@0.18.20:
416 | resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
417 | engines: {node: '>=12'}
418 | cpu: [riscv64]
419 | os: [linux]
420 | requiresBuild: true
421 | dev: true
422 | optional: true
423 |
424 | /@esbuild/linux-riscv64@0.19.2:
425 | resolution: {integrity: sha512-7Z/jKNFufZ/bbu4INqqCN6DDlrmOTmdw6D0gH+6Y7auok2r02Ur661qPuXidPOJ+FSgbEeQnnAGgsVynfLuOEw==}
426 | engines: {node: '>=12'}
427 | cpu: [riscv64]
428 | os: [linux]
429 | requiresBuild: true
430 | dev: true
431 | optional: true
432 |
433 | /@esbuild/linux-s390x@0.18.20:
434 | resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
435 | engines: {node: '>=12'}
436 | cpu: [s390x]
437 | os: [linux]
438 | requiresBuild: true
439 | dev: true
440 | optional: true
441 |
442 | /@esbuild/linux-s390x@0.19.2:
443 | resolution: {integrity: sha512-U+RinR6aXXABFCcAY4gSlv4CL1oOVvSSCdseQmGO66H+XyuQGZIUdhG56SZaDJQcLmrSfRmx5XZOWyCJPRqS7g==}
444 | engines: {node: '>=12'}
445 | cpu: [s390x]
446 | os: [linux]
447 | requiresBuild: true
448 | dev: true
449 | optional: true
450 |
451 | /@esbuild/linux-x64@0.18.20:
452 | resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
453 | engines: {node: '>=12'}
454 | cpu: [x64]
455 | os: [linux]
456 | requiresBuild: true
457 | dev: true
458 | optional: true
459 |
460 | /@esbuild/linux-x64@0.19.2:
461 | resolution: {integrity: sha512-oxzHTEv6VPm3XXNaHPyUTTte+3wGv7qVQtqaZCrgstI16gCuhNOtBXLEBkBREP57YTd68P0VgDgG73jSD8bwXQ==}
462 | engines: {node: '>=12'}
463 | cpu: [x64]
464 | os: [linux]
465 | requiresBuild: true
466 | dev: true
467 | optional: true
468 |
469 | /@esbuild/netbsd-x64@0.18.20:
470 | resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
471 | engines: {node: '>=12'}
472 | cpu: [x64]
473 | os: [netbsd]
474 | requiresBuild: true
475 | dev: true
476 | optional: true
477 |
478 | /@esbuild/netbsd-x64@0.19.2:
479 | resolution: {integrity: sha512-WNa5zZk1XpTTwMDompZmvQLHszDDDN7lYjEHCUmAGB83Bgs20EMs7ICD+oKeT6xt4phV4NDdSi/8OfjPbSbZfQ==}
480 | engines: {node: '>=12'}
481 | cpu: [x64]
482 | os: [netbsd]
483 | requiresBuild: true
484 | dev: true
485 | optional: true
486 |
487 | /@esbuild/openbsd-x64@0.18.20:
488 | resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
489 | engines: {node: '>=12'}
490 | cpu: [x64]
491 | os: [openbsd]
492 | requiresBuild: true
493 | dev: true
494 | optional: true
495 |
496 | /@esbuild/openbsd-x64@0.19.2:
497 | resolution: {integrity: sha512-S6kI1aT3S++Dedb7vxIuUOb3oAxqxk2Rh5rOXOTYnzN8JzW1VzBd+IqPiSpgitu45042SYD3HCoEyhLKQcDFDw==}
498 | engines: {node: '>=12'}
499 | cpu: [x64]
500 | os: [openbsd]
501 | requiresBuild: true
502 | dev: true
503 | optional: true
504 |
505 | /@esbuild/sunos-x64@0.18.20:
506 | resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
507 | engines: {node: '>=12'}
508 | cpu: [x64]
509 | os: [sunos]
510 | requiresBuild: true
511 | dev: true
512 | optional: true
513 |
514 | /@esbuild/sunos-x64@0.19.2:
515 | resolution: {integrity: sha512-VXSSMsmb+Z8LbsQGcBMiM+fYObDNRm8p7tkUDMPG/g4fhFX5DEFmjxIEa3N8Zr96SjsJ1woAhF0DUnS3MF3ARw==}
516 | engines: {node: '>=12'}
517 | cpu: [x64]
518 | os: [sunos]
519 | requiresBuild: true
520 | dev: true
521 | optional: true
522 |
523 | /@esbuild/win32-arm64@0.18.20:
524 | resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
525 | engines: {node: '>=12'}
526 | cpu: [arm64]
527 | os: [win32]
528 | requiresBuild: true
529 | dev: true
530 | optional: true
531 |
532 | /@esbuild/win32-arm64@0.19.2:
533 | resolution: {integrity: sha512-5NayUlSAyb5PQYFAU9x3bHdsqB88RC3aM9lKDAz4X1mo/EchMIT1Q+pSeBXNgkfNmRecLXA0O8xP+x8V+g/LKg==}
534 | engines: {node: '>=12'}
535 | cpu: [arm64]
536 | os: [win32]
537 | requiresBuild: true
538 | dev: true
539 | optional: true
540 |
541 | /@esbuild/win32-ia32@0.18.20:
542 | resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
543 | engines: {node: '>=12'}
544 | cpu: [ia32]
545 | os: [win32]
546 | requiresBuild: true
547 | dev: true
548 | optional: true
549 |
550 | /@esbuild/win32-ia32@0.19.2:
551 | resolution: {integrity: sha512-47gL/ek1v36iN0wL9L4Q2MFdujR0poLZMJwhO2/N3gA89jgHp4MR8DKCmwYtGNksbfJb9JoTtbkoe6sDhg2QTA==}
552 | engines: {node: '>=12'}
553 | cpu: [ia32]
554 | os: [win32]
555 | requiresBuild: true
556 | dev: true
557 | optional: true
558 |
559 | /@esbuild/win32-x64@0.18.20:
560 | resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
561 | engines: {node: '>=12'}
562 | cpu: [x64]
563 | os: [win32]
564 | requiresBuild: true
565 | dev: true
566 | optional: true
567 |
568 | /@esbuild/win32-x64@0.19.2:
569 | resolution: {integrity: sha512-tcuhV7ncXBqbt/Ybf0IyrMcwVOAPDckMK9rXNHtF17UTK18OKLpg08glminN06pt2WCoALhXdLfSPbVvK/6fxw==}
570 | engines: {node: '>=12'}
571 | cpu: [x64]
572 | os: [win32]
573 | requiresBuild: true
574 | dev: true
575 | optional: true
576 |
577 | /@eslint-community/eslint-utils@4.4.0(eslint@8.49.0):
578 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
579 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
580 | peerDependencies:
581 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
582 | dependencies:
583 | eslint: 8.49.0
584 | eslint-visitor-keys: 3.4.3
585 | dev: true
586 |
587 | /@eslint-community/regexpp@4.8.1:
588 | resolution: {integrity: sha512-PWiOzLIUAjN/w5K17PoF4n6sKBw0gqLHPhywmYHP4t1VFQQVYeb1yWsJwnMVEMl3tUHME7X/SJPZLmtG7XBDxQ==}
589 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
590 | dev: true
591 |
592 | /@eslint/eslintrc@2.1.2:
593 | resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==}
594 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
595 | dependencies:
596 | ajv: 6.12.6
597 | debug: 4.3.4
598 | espree: 9.6.1
599 | globals: 13.21.0
600 | ignore: 5.2.4
601 | import-fresh: 3.3.0
602 | js-yaml: 4.1.0
603 | minimatch: 3.1.2
604 | strip-json-comments: 3.1.1
605 | transitivePeerDependencies:
606 | - supports-color
607 | dev: true
608 |
609 | /@eslint/js@8.49.0:
610 | resolution: {integrity: sha512-1S8uAY/MTJqVx0SC4epBq+N2yhuwtNwLbJYNZyhL2pO1ZVKn5HFXav5T41Ryzy9K9V7ZId2JB2oy/W4aCd9/2w==}
611 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
612 | dev: true
613 |
614 | /@hideoo/eslint-config-astro@2.0.1(eslint@8.49.0)(typescript@5.2.2):
615 | resolution: {integrity: sha512-FoGp882BXZ6omezj4qJc3tHGa8JR1zidIaMaPER94X3qFkepelHJioaiZwIHWudVKipRD6iVnZdB7tOEUpSEow==}
616 | peerDependencies:
617 | eslint: '>=8.45.0'
618 | dependencies:
619 | '@hideoo/eslint-config-typescript': 2.0.1(eslint@8.49.0)(typescript@5.2.2)
620 | eslint: 8.49.0
621 | eslint-plugin-astro: 0.29.0(eslint@8.49.0)
622 | eslint-plugin-jsx-a11y: 6.7.1(eslint@8.49.0)
623 | transitivePeerDependencies:
624 | - eslint-import-resolver-node
625 | - eslint-import-resolver-webpack
626 | - supports-color
627 | - typescript
628 | dev: true
629 |
630 | /@hideoo/eslint-config-base@2.0.1(@typescript-eslint/parser@6.5.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0):
631 | resolution: {integrity: sha512-f9FzxJZ+aQTe2yV04oJJbUb2w0sj45/3z0uPYrPMQA6SnkVKYFF3ZBL+wDHGcX0JlrFx6go+ZIuLroRBQQA3wA==}
632 | peerDependencies:
633 | eslint: '>=8.45.0'
634 | dependencies:
635 | eslint: 8.49.0
636 | eslint-config-prettier: 9.0.0(eslint@8.49.0)
637 | eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.5.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0)
638 | eslint-plugin-no-only-tests: 3.1.0
639 | eslint-plugin-unicorn: 48.0.1(eslint@8.49.0)
640 | transitivePeerDependencies:
641 | - '@typescript-eslint/parser'
642 | - eslint-import-resolver-typescript
643 | - eslint-import-resolver-webpack
644 | - supports-color
645 | dev: true
646 |
647 | /@hideoo/eslint-config-react@2.0.1(eslint@8.49.0)(typescript@5.2.2):
648 | resolution: {integrity: sha512-JvslAPoGj0eyr5zzFvi3LIyNInXo4mqIRral2HAE7bOoIylgHZuApKZLX0ApRfVCw3EG6K/dYlE7T08wn0Seqg==}
649 | peerDependencies:
650 | eslint: '>=8.45.0'
651 | dependencies:
652 | '@hideoo/eslint-config-typescript': 2.0.1(eslint@8.49.0)(typescript@5.2.2)
653 | eslint: 8.49.0
654 | eslint-plugin-jsx-a11y: 6.7.1(eslint@8.49.0)
655 | eslint-plugin-react: 7.33.2(eslint@8.49.0)
656 | eslint-plugin-react-hooks: 4.6.0(eslint@8.49.0)
657 | eslint-plugin-react-refresh: 0.4.3(eslint@8.49.0)
658 | transitivePeerDependencies:
659 | - eslint-import-resolver-node
660 | - eslint-import-resolver-webpack
661 | - supports-color
662 | - typescript
663 | dev: true
664 |
665 | /@hideoo/eslint-config-typescript@2.0.1(eslint@8.49.0)(typescript@5.2.2):
666 | resolution: {integrity: sha512-nkiefkrsZ/kNJOJAnMaKxPjyi/BhaiD48xMmu5nt7DQgSfS0ZOHv6nKS/SxdUPx3pv2lmEpNYfHd4OKrbL0DkQ==}
667 | peerDependencies:
668 | eslint: '>=8.45.0'
669 | typescript: '>=4.0.2'
670 | dependencies:
671 | '@hideoo/eslint-config-base': 2.0.1(@typescript-eslint/parser@6.5.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0)
672 | '@typescript-eslint/eslint-plugin': 6.5.0(@typescript-eslint/parser@6.5.0)(eslint@8.49.0)(typescript@5.2.2)
673 | '@typescript-eslint/parser': 6.5.0(eslint@8.49.0)(typescript@5.2.2)
674 | eslint: 8.49.0
675 | eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.5.0)(eslint-plugin-import@2.28.1)(eslint@8.49.0)
676 | eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.5.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0)
677 | typescript: 5.2.2
678 | transitivePeerDependencies:
679 | - eslint-import-resolver-node
680 | - eslint-import-resolver-webpack
681 | - supports-color
682 | dev: true
683 |
684 | /@hideoo/eslint-config@2.0.1(eslint@8.49.0)(typescript@5.2.2):
685 | resolution: {integrity: sha512-CYFgfFaSG22pQ3jN6qpwsgx7AoJFDnavZfCUbijsiE9r3sQ6fYwMBhg/gP+SU4aj+A+rSjoSckOkIOrrhjDGEQ==}
686 | peerDependencies:
687 | eslint: '>=8.45.0'
688 | dependencies:
689 | '@hideoo/eslint-config-astro': 2.0.1(eslint@8.49.0)(typescript@5.2.2)
690 | '@hideoo/eslint-config-react': 2.0.1(eslint@8.49.0)(typescript@5.2.2)
691 | eslint: 8.49.0
692 | transitivePeerDependencies:
693 | - eslint-import-resolver-node
694 | - eslint-import-resolver-webpack
695 | - supports-color
696 | - typescript
697 | dev: true
698 |
699 | /@hideoo/prettier-config@2.0.0:
700 | resolution: {integrity: sha512-qylbgiR1n1eQXfpy97+b6pbtE5tf4uxPIqCSE0mp9fw/Npc4CiUxJlMoiUYw169GXTaZzqH/lFVm2sbO2Id2Ug==}
701 | dev: true
702 |
703 | /@hideoo/tsconfig@2.0.1:
704 | resolution: {integrity: sha512-orM6e/3fbb8+DhJpsh6PKIhgNww8Di/PUOxml4VCMeNuD8W/kHCXl+9sLm5uwYP5xOWZoXPa++15HS9j21Xvag==}
705 | dev: true
706 |
707 | /@humanwhocodes/config-array@0.11.11:
708 | resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==}
709 | engines: {node: '>=10.10.0'}
710 | dependencies:
711 | '@humanwhocodes/object-schema': 1.2.1
712 | debug: 4.3.4
713 | minimatch: 3.1.2
714 | transitivePeerDependencies:
715 | - supports-color
716 | dev: true
717 |
718 | /@humanwhocodes/module-importer@1.0.1:
719 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
720 | engines: {node: '>=12.22'}
721 | dev: true
722 |
723 | /@humanwhocodes/object-schema@1.2.1:
724 | resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==}
725 | dev: true
726 |
727 | /@isaacs/cliui@8.0.2:
728 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==}
729 | engines: {node: '>=12'}
730 | dependencies:
731 | string-width: 5.1.2
732 | string-width-cjs: /string-width@4.2.3
733 | strip-ansi: 7.1.0
734 | strip-ansi-cjs: /strip-ansi@6.0.1
735 | wrap-ansi: 8.1.0
736 | wrap-ansi-cjs: /wrap-ansi@7.0.0
737 | dev: true
738 |
739 | /@jest/schemas@29.6.3:
740 | resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
741 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
742 | dependencies:
743 | '@sinclair/typebox': 0.27.8
744 | dev: true
745 |
746 | /@jridgewell/gen-mapping@0.3.3:
747 | resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
748 | engines: {node: '>=6.0.0'}
749 | dependencies:
750 | '@jridgewell/set-array': 1.1.2
751 | '@jridgewell/sourcemap-codec': 1.4.15
752 | '@jridgewell/trace-mapping': 0.3.19
753 | dev: false
754 |
755 | /@jridgewell/resolve-uri@3.1.1:
756 | resolution: {integrity: sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==}
757 | engines: {node: '>=6.0.0'}
758 | dev: false
759 |
760 | /@jridgewell/set-array@1.1.2:
761 | resolution: {integrity: sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==}
762 | engines: {node: '>=6.0.0'}
763 | dev: false
764 |
765 | /@jridgewell/sourcemap-codec@1.4.15:
766 | resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==}
767 |
768 | /@jridgewell/trace-mapping@0.3.19:
769 | resolution: {integrity: sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==}
770 | dependencies:
771 | '@jridgewell/resolve-uri': 3.1.1
772 | '@jridgewell/sourcemap-codec': 1.4.15
773 | dev: false
774 |
775 | /@nodelib/fs.scandir@2.1.5:
776 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
777 | engines: {node: '>= 8'}
778 | dependencies:
779 | '@nodelib/fs.stat': 2.0.5
780 | run-parallel: 1.2.0
781 | dev: true
782 |
783 | /@nodelib/fs.stat@2.0.5:
784 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
785 | engines: {node: '>= 8'}
786 | dev: true
787 |
788 | /@nodelib/fs.walk@1.2.8:
789 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
790 | engines: {node: '>= 8'}
791 | dependencies:
792 | '@nodelib/fs.scandir': 2.1.5
793 | fastq: 1.15.0
794 | dev: true
795 |
796 | /@pkgjs/parseargs@0.11.0:
797 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==}
798 | engines: {node: '>=14'}
799 | requiresBuild: true
800 | dev: true
801 | optional: true
802 |
803 | /@pkgr/utils@2.4.2:
804 | resolution: {integrity: sha512-POgTXhjrTfbTV63DiFXav4lBHiICLKKwDeaKn9Nphwj7WH6m0hMMCaJkMyRWjgtPFyRKRVoMXXjczsTQRDEhYw==}
805 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
806 | dependencies:
807 | cross-spawn: 7.0.3
808 | fast-glob: 3.3.1
809 | is-glob: 4.0.3
810 | open: 9.1.0
811 | picocolors: 1.0.0
812 | tslib: 2.6.2
813 | dev: true
814 |
815 | /@sinclair/typebox@0.27.8:
816 | resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
817 | dev: true
818 |
819 | /@types/babel__traverse@7.20.2:
820 | resolution: {integrity: sha512-ojlGK1Hsfce93J0+kn3H5R73elidKUaZonirN33GSmgTUMpzI/MIFfSpF3haANe3G1bEBS9/9/QEqwTzwqFsKw==}
821 | dependencies:
822 | '@babel/types': 7.22.19
823 | dev: true
824 |
825 | /@types/chai-subset@1.3.3:
826 | resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
827 | dependencies:
828 | '@types/chai': 4.3.6
829 | dev: true
830 |
831 | /@types/chai@4.3.6:
832 | resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==}
833 | dev: true
834 |
835 | /@types/json-schema@7.0.12:
836 | resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==}
837 | dev: true
838 |
839 | /@types/json5@0.0.29:
840 | resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==}
841 | dev: true
842 |
843 | /@types/node@18.17.15:
844 | resolution: {integrity: sha512-2yrWpBk32tvV/JAd3HNHWuZn/VDN1P+72hWirHnvsvTGSqbANi+kSeuQR9yAHnbvaBvHDsoTdXV0Fe+iRtHLKA==}
845 | dev: true
846 |
847 | /@types/normalize-package-data@2.4.1:
848 | resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
849 | dev: true
850 |
851 | /@types/semver@7.5.1:
852 | resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==}
853 | dev: true
854 |
855 | /@types/vscode@1.81.0:
856 | resolution: {integrity: sha512-YIaCwpT+O2E7WOMq0eCgBEABE++SX3Yl/O02GoMIF2DO3qAtvw7m6BXFYsxnc6XyzwZgh6/s/UG78LSSombl2w==}
857 | dev: true
858 |
859 | /@typescript-eslint/eslint-plugin@6.5.0(@typescript-eslint/parser@6.5.0)(eslint@8.49.0)(typescript@5.2.2):
860 | resolution: {integrity: sha512-2pktILyjvMaScU6iK3925uvGU87E+N9rh372uGZgiMYwafaw9SXq86U04XPq3UH6tzRvNgBsub6x2DacHc33lw==}
861 | engines: {node: ^16.0.0 || >=18.0.0}
862 | peerDependencies:
863 | '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
864 | eslint: ^7.0.0 || ^8.0.0
865 | typescript: '*'
866 | peerDependenciesMeta:
867 | typescript:
868 | optional: true
869 | dependencies:
870 | '@eslint-community/regexpp': 4.8.1
871 | '@typescript-eslint/parser': 6.5.0(eslint@8.49.0)(typescript@5.2.2)
872 | '@typescript-eslint/scope-manager': 6.5.0
873 | '@typescript-eslint/type-utils': 6.5.0(eslint@8.49.0)(typescript@5.2.2)
874 | '@typescript-eslint/utils': 6.5.0(eslint@8.49.0)(typescript@5.2.2)
875 | '@typescript-eslint/visitor-keys': 6.5.0
876 | debug: 4.3.4
877 | eslint: 8.49.0
878 | graphemer: 1.4.0
879 | ignore: 5.2.4
880 | natural-compare: 1.4.0
881 | semver: 7.5.4
882 | ts-api-utils: 1.0.3(typescript@5.2.2)
883 | typescript: 5.2.2
884 | transitivePeerDependencies:
885 | - supports-color
886 | dev: true
887 |
888 | /@typescript-eslint/parser@6.5.0(eslint@8.49.0)(typescript@5.2.2):
889 | resolution: {integrity: sha512-LMAVtR5GN8nY0G0BadkG0XIe4AcNMeyEy3DyhKGAh9k4pLSMBO7rF29JvDBpZGCmp5Pgz5RLHP6eCpSYZJQDuQ==}
890 | engines: {node: ^16.0.0 || >=18.0.0}
891 | peerDependencies:
892 | eslint: ^7.0.0 || ^8.0.0
893 | typescript: '*'
894 | peerDependenciesMeta:
895 | typescript:
896 | optional: true
897 | dependencies:
898 | '@typescript-eslint/scope-manager': 6.5.0
899 | '@typescript-eslint/types': 6.5.0
900 | '@typescript-eslint/typescript-estree': 6.5.0(typescript@5.2.2)
901 | '@typescript-eslint/visitor-keys': 6.5.0
902 | debug: 4.3.4
903 | eslint: 8.49.0
904 | typescript: 5.2.2
905 | transitivePeerDependencies:
906 | - supports-color
907 | dev: true
908 |
909 | /@typescript-eslint/scope-manager@5.62.0:
910 | resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==}
911 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
912 | dependencies:
913 | '@typescript-eslint/types': 5.62.0
914 | '@typescript-eslint/visitor-keys': 5.62.0
915 | dev: true
916 |
917 | /@typescript-eslint/scope-manager@6.5.0:
918 | resolution: {integrity: sha512-A8hZ7OlxURricpycp5kdPTH3XnjG85UpJS6Fn4VzeoH4T388gQJ/PGP4ole5NfKt4WDVhmLaQ/dBLNDC4Xl/Kw==}
919 | engines: {node: ^16.0.0 || >=18.0.0}
920 | dependencies:
921 | '@typescript-eslint/types': 6.5.0
922 | '@typescript-eslint/visitor-keys': 6.5.0
923 | dev: true
924 |
925 | /@typescript-eslint/type-utils@6.5.0(eslint@8.49.0)(typescript@5.2.2):
926 | resolution: {integrity: sha512-f7OcZOkRivtujIBQ4yrJNIuwyCQO1OjocVqntl9dgSIZAdKqicj3xFDqDOzHDlGCZX990LqhLQXWRnQvsapq8A==}
927 | engines: {node: ^16.0.0 || >=18.0.0}
928 | peerDependencies:
929 | eslint: ^7.0.0 || ^8.0.0
930 | typescript: '*'
931 | peerDependenciesMeta:
932 | typescript:
933 | optional: true
934 | dependencies:
935 | '@typescript-eslint/typescript-estree': 6.5.0(typescript@5.2.2)
936 | '@typescript-eslint/utils': 6.5.0(eslint@8.49.0)(typescript@5.2.2)
937 | debug: 4.3.4
938 | eslint: 8.49.0
939 | ts-api-utils: 1.0.3(typescript@5.2.2)
940 | typescript: 5.2.2
941 | transitivePeerDependencies:
942 | - supports-color
943 | dev: true
944 |
945 | /@typescript-eslint/types@5.62.0:
946 | resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==}
947 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
948 | dev: true
949 |
950 | /@typescript-eslint/types@6.5.0:
951 | resolution: {integrity: sha512-eqLLOEF5/lU8jW3Bw+8auf4lZSbbljHR2saKnYqON12G/WsJrGeeDHWuQePoEf9ro22+JkbPfWQwKEC5WwLQ3w==}
952 | engines: {node: ^16.0.0 || >=18.0.0}
953 | dev: true
954 |
955 | /@typescript-eslint/typescript-estree@6.5.0(typescript@5.2.2):
956 | resolution: {integrity: sha512-q0rGwSe9e5Kk/XzliB9h2LBc9tmXX25G0833r7kffbl5437FPWb2tbpIV9wAATebC/018pGa9fwPDuvGN+LxWQ==}
957 | engines: {node: ^16.0.0 || >=18.0.0}
958 | peerDependencies:
959 | typescript: '*'
960 | peerDependenciesMeta:
961 | typescript:
962 | optional: true
963 | dependencies:
964 | '@typescript-eslint/types': 6.5.0
965 | '@typescript-eslint/visitor-keys': 6.5.0
966 | debug: 4.3.4
967 | globby: 11.1.0
968 | is-glob: 4.0.3
969 | semver: 7.5.4
970 | ts-api-utils: 1.0.3(typescript@5.2.2)
971 | typescript: 5.2.2
972 | transitivePeerDependencies:
973 | - supports-color
974 | dev: true
975 |
976 | /@typescript-eslint/utils@6.5.0(eslint@8.49.0)(typescript@5.2.2):
977 | resolution: {integrity: sha512-9nqtjkNykFzeVtt9Pj6lyR9WEdd8npPhhIPM992FWVkZuS6tmxHfGVnlUcjpUP2hv8r4w35nT33mlxd+Be1ACQ==}
978 | engines: {node: ^16.0.0 || >=18.0.0}
979 | peerDependencies:
980 | eslint: ^7.0.0 || ^8.0.0
981 | dependencies:
982 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0)
983 | '@types/json-schema': 7.0.12
984 | '@types/semver': 7.5.1
985 | '@typescript-eslint/scope-manager': 6.5.0
986 | '@typescript-eslint/types': 6.5.0
987 | '@typescript-eslint/typescript-estree': 6.5.0(typescript@5.2.2)
988 | eslint: 8.49.0
989 | semver: 7.5.4
990 | transitivePeerDependencies:
991 | - supports-color
992 | - typescript
993 | dev: true
994 |
995 | /@typescript-eslint/visitor-keys@5.62.0:
996 | resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==}
997 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
998 | dependencies:
999 | '@typescript-eslint/types': 5.62.0
1000 | eslint-visitor-keys: 3.4.3
1001 | dev: true
1002 |
1003 | /@typescript-eslint/visitor-keys@6.5.0:
1004 | resolution: {integrity: sha512-yCB/2wkbv3hPsh02ZS8dFQnij9VVQXJMN/gbQsaaY+zxALkZnxa/wagvLEFsAWMPv7d7lxQmNsIzGU1w/T/WyA==}
1005 | engines: {node: ^16.0.0 || >=18.0.0}
1006 | dependencies:
1007 | '@typescript-eslint/types': 6.5.0
1008 | eslint-visitor-keys: 3.4.3
1009 | dev: true
1010 |
1011 | /@vitest/expect@0.34.4:
1012 | resolution: {integrity: sha512-XlMKX8HyYUqB8dsY8Xxrc64J2Qs9pKMt2Z8vFTL4mBWXJsg4yoALHzJfDWi8h5nkO4Zua4zjqtapQ/IluVkSnA==}
1013 | dependencies:
1014 | '@vitest/spy': 0.34.4
1015 | '@vitest/utils': 0.34.4
1016 | chai: 4.3.8
1017 | dev: true
1018 |
1019 | /@vitest/runner@0.34.4:
1020 | resolution: {integrity: sha512-hwwdB1StERqUls8oV8YcpmTIpVeJMe4WgYuDongVzixl5hlYLT2G8afhcdADeDeqCaAmZcSgLTLtqkjPQF7x+w==}
1021 | dependencies:
1022 | '@vitest/utils': 0.34.4
1023 | p-limit: 4.0.0
1024 | pathe: 1.1.1
1025 | dev: true
1026 |
1027 | /@vitest/snapshot@0.34.4:
1028 | resolution: {integrity: sha512-GCsh4coc3YUSL/o+BPUo7lHQbzpdttTxL6f4q0jRx2qVGoYz/cyTRDJHbnwks6TILi6560bVWoBpYC10PuTLHw==}
1029 | dependencies:
1030 | magic-string: 0.30.3
1031 | pathe: 1.1.1
1032 | pretty-format: 29.7.0
1033 | dev: true
1034 |
1035 | /@vitest/spy@0.34.4:
1036 | resolution: {integrity: sha512-PNU+fd7DUPgA3Ya924b1qKuQkonAW6hL7YUjkON3wmBwSTIlhOSpy04SJ0NrRsEbrXgMMj6Morh04BMf8k+w0g==}
1037 | dependencies:
1038 | tinyspy: 2.1.1
1039 | dev: true
1040 |
1041 | /@vitest/utils@0.34.4:
1042 | resolution: {integrity: sha512-yR2+5CHhp/K4ySY0Qtd+CAL9f5Yh1aXrKfAT42bq6CtlGPh92jIDDDSg7ydlRow1CP+dys4TrOrbELOyNInHSg==}
1043 | dependencies:
1044 | diff-sequences: 29.6.3
1045 | loupe: 2.3.6
1046 | pretty-format: 29.7.0
1047 | dev: true
1048 |
1049 | /acorn-jsx@5.3.2(acorn@8.10.0):
1050 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
1051 | peerDependencies:
1052 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
1053 | dependencies:
1054 | acorn: 8.10.0
1055 | dev: true
1056 |
1057 | /acorn-walk@8.2.0:
1058 | resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
1059 | engines: {node: '>=0.4.0'}
1060 | dev: true
1061 |
1062 | /acorn@8.10.0:
1063 | resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
1064 | engines: {node: '>=0.4.0'}
1065 | hasBin: true
1066 | dev: true
1067 |
1068 | /ajv@6.12.6:
1069 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==}
1070 | dependencies:
1071 | fast-deep-equal: 3.1.3
1072 | fast-json-stable-stringify: 2.1.0
1073 | json-schema-traverse: 0.4.1
1074 | uri-js: 4.4.1
1075 | dev: true
1076 |
1077 | /ansi-regex@5.0.1:
1078 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==}
1079 | engines: {node: '>=8'}
1080 | dev: true
1081 |
1082 | /ansi-regex@6.0.1:
1083 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==}
1084 | engines: {node: '>=12'}
1085 | dev: true
1086 |
1087 | /ansi-styles@3.2.1:
1088 | resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==}
1089 | engines: {node: '>=4'}
1090 | dependencies:
1091 | color-convert: 1.9.3
1092 |
1093 | /ansi-styles@4.3.0:
1094 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
1095 | engines: {node: '>=8'}
1096 | dependencies:
1097 | color-convert: 2.0.1
1098 | dev: true
1099 |
1100 | /ansi-styles@5.2.0:
1101 | resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
1102 | engines: {node: '>=10'}
1103 | dev: true
1104 |
1105 | /ansi-styles@6.2.1:
1106 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
1107 | engines: {node: '>=12'}
1108 | dev: true
1109 |
1110 | /argparse@2.0.1:
1111 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
1112 | dev: true
1113 |
1114 | /aria-query@5.3.0:
1115 | resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==}
1116 | dependencies:
1117 | dequal: 2.0.3
1118 | dev: true
1119 |
1120 | /array-buffer-byte-length@1.0.0:
1121 | resolution: {integrity: sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==}
1122 | dependencies:
1123 | call-bind: 1.0.2
1124 | is-array-buffer: 3.0.2
1125 | dev: true
1126 |
1127 | /array-includes@3.1.7:
1128 | resolution: {integrity: sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==}
1129 | engines: {node: '>= 0.4'}
1130 | dependencies:
1131 | call-bind: 1.0.2
1132 | define-properties: 1.2.0
1133 | es-abstract: 1.22.1
1134 | get-intrinsic: 1.2.1
1135 | is-string: 1.0.7
1136 | dev: true
1137 |
1138 | /array-union@2.1.0:
1139 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==}
1140 | engines: {node: '>=8'}
1141 | dev: true
1142 |
1143 | /array.prototype.findlastindex@1.2.3:
1144 | resolution: {integrity: sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==}
1145 | engines: {node: '>= 0.4'}
1146 | dependencies:
1147 | call-bind: 1.0.2
1148 | define-properties: 1.2.0
1149 | es-abstract: 1.22.1
1150 | es-shim-unscopables: 1.0.0
1151 | get-intrinsic: 1.2.1
1152 | dev: true
1153 |
1154 | /array.prototype.flat@1.3.2:
1155 | resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==}
1156 | engines: {node: '>= 0.4'}
1157 | dependencies:
1158 | call-bind: 1.0.2
1159 | define-properties: 1.2.0
1160 | es-abstract: 1.22.1
1161 | es-shim-unscopables: 1.0.0
1162 | dev: true
1163 |
1164 | /array.prototype.flatmap@1.3.2:
1165 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==}
1166 | engines: {node: '>= 0.4'}
1167 | dependencies:
1168 | call-bind: 1.0.2
1169 | define-properties: 1.2.0
1170 | es-abstract: 1.22.1
1171 | es-shim-unscopables: 1.0.0
1172 | dev: true
1173 |
1174 | /array.prototype.tosorted@1.1.2:
1175 | resolution: {integrity: sha512-HuQCHOlk1Weat5jzStICBCd83NxiIMwqDg/dHEsoefabn/hJRj5pVdWcPUSpRrwhwxZOsQassMpgN/xRYFBMIg==}
1176 | dependencies:
1177 | call-bind: 1.0.2
1178 | define-properties: 1.2.0
1179 | es-abstract: 1.22.1
1180 | es-shim-unscopables: 1.0.0
1181 | get-intrinsic: 1.2.1
1182 | dev: true
1183 |
1184 | /arraybuffer.prototype.slice@1.0.2:
1185 | resolution: {integrity: sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==}
1186 | engines: {node: '>= 0.4'}
1187 | dependencies:
1188 | array-buffer-byte-length: 1.0.0
1189 | call-bind: 1.0.2
1190 | define-properties: 1.2.0
1191 | es-abstract: 1.22.1
1192 | get-intrinsic: 1.2.1
1193 | is-array-buffer: 3.0.2
1194 | is-shared-array-buffer: 1.0.2
1195 | dev: true
1196 |
1197 | /assertion-error@1.1.0:
1198 | resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
1199 | dev: true
1200 |
1201 | /ast-types-flow@0.0.7:
1202 | resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==}
1203 | dev: true
1204 |
1205 | /astro-eslint-parser@0.15.0:
1206 | resolution: {integrity: sha512-iC3VvAS/o6TX92Frwp5Yht/AO3a2tQhCnOe9CdbiICwy+ZYTH/ZOiBxeXI2I5qE1YlbtP2wvBLr+SCgwOAEZvg==}
1207 | engines: {node: ^14.18.0 || >=16.0.0}
1208 | dependencies:
1209 | '@astrojs/compiler': 2.1.0
1210 | '@typescript-eslint/scope-manager': 5.62.0
1211 | '@typescript-eslint/types': 5.62.0
1212 | astrojs-compiler-sync: 0.3.3(@astrojs/compiler@2.1.0)
1213 | debug: 4.3.4
1214 | eslint-visitor-keys: 3.4.3
1215 | espree: 9.6.1
1216 | semver: 7.5.4
1217 | transitivePeerDependencies:
1218 | - supports-color
1219 | dev: true
1220 |
1221 | /astrojs-compiler-sync@0.3.3(@astrojs/compiler@2.1.0):
1222 | resolution: {integrity: sha512-LbhchWgsvjvRBb5n5ez8/Q/f9ZKViuox27VxMDOdTUm8MRv9U7phzOiLue5KluqTmC0z1LId4gY2SekvoDrkuw==}
1223 | engines: {node: ^14.18.0 || >=16.0.0}
1224 | peerDependencies:
1225 | '@astrojs/compiler': '>=0.27.0'
1226 | dependencies:
1227 | '@astrojs/compiler': 2.1.0
1228 | synckit: 0.8.5
1229 | dev: true
1230 |
1231 | /asynciterator.prototype@1.0.0:
1232 | resolution: {integrity: sha512-wwHYEIS0Q80f5mosx3L/dfG5t5rjEa9Ft51GTaNt862EnpyGHpgz2RkZvLPp1oF5TnAiTohkEKVEu8pQPJI7Vg==}
1233 | dependencies:
1234 | has-symbols: 1.0.3
1235 | dev: true
1236 |
1237 | /available-typed-arrays@1.0.5:
1238 | resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==}
1239 | engines: {node: '>= 0.4'}
1240 | dev: true
1241 |
1242 | /axe-core@4.8.1:
1243 | resolution: {integrity: sha512-9l850jDDPnKq48nbad8SiEelCv4OrUWrKab/cPj0GScVg6cb6NbCCt/Ulk26QEq5jP9NnGr04Bit1BHyV6r5CQ==}
1244 | engines: {node: '>=4'}
1245 | dev: true
1246 |
1247 | /axobject-query@3.2.1:
1248 | resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==}
1249 | dependencies:
1250 | dequal: 2.0.3
1251 | dev: true
1252 |
1253 | /balanced-match@1.0.2:
1254 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
1255 | dev: true
1256 |
1257 | /big-integer@1.6.51:
1258 | resolution: {integrity: sha512-GPEid2Y9QU1Exl1rpO9B2IPJGHPSupF5GnVIP0blYvNOMer2bTvSWs1jGOUg04hTmu67nmLsQ9TBo1puaotBHg==}
1259 | engines: {node: '>=0.6'}
1260 | dev: true
1261 |
1262 | /bplist-parser@0.2.0:
1263 | resolution: {integrity: sha512-z0M+byMThzQmD9NILRniCUXYsYpjwnlO8N5uCFaCqIOpqRsJCrQL9NK3JsD67CN5a08nF5oIL2bD6loTdHOuKw==}
1264 | engines: {node: '>= 5.10.0'}
1265 | dependencies:
1266 | big-integer: 1.6.51
1267 | dev: true
1268 |
1269 | /brace-expansion@1.1.11:
1270 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==}
1271 | dependencies:
1272 | balanced-match: 1.0.2
1273 | concat-map: 0.0.1
1274 | dev: true
1275 |
1276 | /brace-expansion@2.0.1:
1277 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==}
1278 | dependencies:
1279 | balanced-match: 1.0.2
1280 | dev: true
1281 |
1282 | /braces@3.0.2:
1283 | resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==}
1284 | engines: {node: '>=8'}
1285 | dependencies:
1286 | fill-range: 7.0.1
1287 | dev: true
1288 |
1289 | /builtin-modules@3.3.0:
1290 | resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==}
1291 | engines: {node: '>=6'}
1292 | dev: true
1293 |
1294 | /bundle-name@3.0.0:
1295 | resolution: {integrity: sha512-PKA4BeSvBpQKQ8iPOGCSiell+N8P+Tf1DlwqmYhpe2gAhKPHn8EYOxVT+ShuGmhg8lN8XiSlS80yiExKXrURlw==}
1296 | engines: {node: '>=12'}
1297 | dependencies:
1298 | run-applescript: 5.0.0
1299 | dev: true
1300 |
1301 | /cac@6.7.14:
1302 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==}
1303 | engines: {node: '>=8'}
1304 | dev: true
1305 |
1306 | /call-bind@1.0.2:
1307 | resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==}
1308 | dependencies:
1309 | function-bind: 1.1.1
1310 | get-intrinsic: 1.2.1
1311 | dev: true
1312 |
1313 | /callsites@3.1.0:
1314 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
1315 | engines: {node: '>=6'}
1316 | dev: true
1317 |
1318 | /chai@4.3.8:
1319 | resolution: {integrity: sha512-vX4YvVVtxlfSZ2VecZgFUTU5qPCYsobVI2O9FmwEXBhDigYGQA6jRXCycIs1yJnnWbZ6/+a2zNIF5DfVCcJBFQ==}
1320 | engines: {node: '>=4'}
1321 | dependencies:
1322 | assertion-error: 1.1.0
1323 | check-error: 1.0.2
1324 | deep-eql: 4.1.3
1325 | get-func-name: 2.0.0
1326 | loupe: 2.3.6
1327 | pathval: 1.1.1
1328 | type-detect: 4.0.8
1329 | dev: true
1330 |
1331 | /chalk@2.4.2:
1332 | resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==}
1333 | engines: {node: '>=4'}
1334 | dependencies:
1335 | ansi-styles: 3.2.1
1336 | escape-string-regexp: 1.0.5
1337 | supports-color: 5.5.0
1338 |
1339 | /chalk@4.1.2:
1340 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
1341 | engines: {node: '>=10'}
1342 | dependencies:
1343 | ansi-styles: 4.3.0
1344 | supports-color: 7.2.0
1345 | dev: true
1346 |
1347 | /check-error@1.0.2:
1348 | resolution: {integrity: sha512-BrgHpW9NURQgzoNyjfq0Wu6VFO6D7IZEmJNdtgNqpzGG8RuNFHt2jQxWlAs4HMe119chBnv+34syEZtc6IhLtA==}
1349 | dev: true
1350 |
1351 | /ci-info@3.8.0:
1352 | resolution: {integrity: sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==}
1353 | engines: {node: '>=8'}
1354 | dev: true
1355 |
1356 | /clean-regexp@1.0.0:
1357 | resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==}
1358 | engines: {node: '>=4'}
1359 | dependencies:
1360 | escape-string-regexp: 1.0.5
1361 | dev: true
1362 |
1363 | /color-convert@1.9.3:
1364 | resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==}
1365 | dependencies:
1366 | color-name: 1.1.3
1367 |
1368 | /color-convert@2.0.1:
1369 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
1370 | engines: {node: '>=7.0.0'}
1371 | dependencies:
1372 | color-name: 1.1.4
1373 | dev: true
1374 |
1375 | /color-name@1.1.3:
1376 | resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==}
1377 |
1378 | /color-name@1.1.4:
1379 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
1380 | dev: true
1381 |
1382 | /concat-map@0.0.1:
1383 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
1384 | dev: true
1385 |
1386 | /cross-spawn@7.0.3:
1387 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==}
1388 | engines: {node: '>= 8'}
1389 | dependencies:
1390 | path-key: 3.1.1
1391 | shebang-command: 2.0.0
1392 | which: 2.0.2
1393 | dev: true
1394 |
1395 | /cssesc@3.0.0:
1396 | resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
1397 | engines: {node: '>=4'}
1398 | hasBin: true
1399 | dev: true
1400 |
1401 | /damerau-levenshtein@1.0.8:
1402 | resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
1403 | dev: true
1404 |
1405 | /debug@3.2.7:
1406 | resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==}
1407 | peerDependencies:
1408 | supports-color: '*'
1409 | peerDependenciesMeta:
1410 | supports-color:
1411 | optional: true
1412 | dependencies:
1413 | ms: 2.1.3
1414 | dev: true
1415 |
1416 | /debug@4.3.4:
1417 | resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==}
1418 | engines: {node: '>=6.0'}
1419 | peerDependencies:
1420 | supports-color: '*'
1421 | peerDependenciesMeta:
1422 | supports-color:
1423 | optional: true
1424 | dependencies:
1425 | ms: 2.1.2
1426 |
1427 | /deep-eql@4.1.3:
1428 | resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
1429 | engines: {node: '>=6'}
1430 | dependencies:
1431 | type-detect: 4.0.8
1432 | dev: true
1433 |
1434 | /deep-is@0.1.4:
1435 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
1436 | dev: true
1437 |
1438 | /default-browser-id@3.0.0:
1439 | resolution: {integrity: sha512-OZ1y3y0SqSICtE8DE4S8YOE9UZOJ8wO16fKWVP5J1Qz42kV9jcnMVFrEE/noXb/ss3Q4pZIH79kxofzyNNtUNA==}
1440 | engines: {node: '>=12'}
1441 | dependencies:
1442 | bplist-parser: 0.2.0
1443 | untildify: 4.0.0
1444 | dev: true
1445 |
1446 | /default-browser@4.0.0:
1447 | resolution: {integrity: sha512-wX5pXO1+BrhMkSbROFsyxUm0i/cJEScyNhA4PPxc41ICuv05ZZB/MX28s8aZx6xjmatvebIapF6hLEKEcpneUA==}
1448 | engines: {node: '>=14.16'}
1449 | dependencies:
1450 | bundle-name: 3.0.0
1451 | default-browser-id: 3.0.0
1452 | execa: 7.2.0
1453 | titleize: 3.0.0
1454 | dev: true
1455 |
1456 | /define-lazy-prop@3.0.0:
1457 | resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==}
1458 | engines: {node: '>=12'}
1459 | dev: true
1460 |
1461 | /define-properties@1.2.0:
1462 | resolution: {integrity: sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==}
1463 | engines: {node: '>= 0.4'}
1464 | dependencies:
1465 | has-property-descriptors: 1.0.0
1466 | object-keys: 1.1.1
1467 | dev: true
1468 |
1469 | /dequal@2.0.3:
1470 | resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==}
1471 | engines: {node: '>=6'}
1472 | dev: true
1473 |
1474 | /diff-sequences@29.6.3:
1475 | resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
1476 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
1477 | dev: true
1478 |
1479 | /dir-glob@3.0.1:
1480 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==}
1481 | engines: {node: '>=8'}
1482 | dependencies:
1483 | path-type: 4.0.0
1484 | dev: true
1485 |
1486 | /doctrine@2.1.0:
1487 | resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==}
1488 | engines: {node: '>=0.10.0'}
1489 | dependencies:
1490 | esutils: 2.0.3
1491 | dev: true
1492 |
1493 | /doctrine@3.0.0:
1494 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==}
1495 | engines: {node: '>=6.0.0'}
1496 | dependencies:
1497 | esutils: 2.0.3
1498 | dev: true
1499 |
1500 | /eastasianwidth@0.2.0:
1501 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==}
1502 | dev: true
1503 |
1504 | /emoji-regex@8.0.0:
1505 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==}
1506 | dev: true
1507 |
1508 | /emoji-regex@9.2.2:
1509 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
1510 | dev: true
1511 |
1512 | /enhanced-resolve@5.15.0:
1513 | resolution: {integrity: sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==}
1514 | engines: {node: '>=10.13.0'}
1515 | dependencies:
1516 | graceful-fs: 4.2.11
1517 | tapable: 2.2.1
1518 | dev: true
1519 |
1520 | /error-ex@1.3.2:
1521 | resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==}
1522 | dependencies:
1523 | is-arrayish: 0.2.1
1524 | dev: true
1525 |
1526 | /es-abstract@1.22.1:
1527 | resolution: {integrity: sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==}
1528 | engines: {node: '>= 0.4'}
1529 | dependencies:
1530 | array-buffer-byte-length: 1.0.0
1531 | arraybuffer.prototype.slice: 1.0.2
1532 | available-typed-arrays: 1.0.5
1533 | call-bind: 1.0.2
1534 | es-set-tostringtag: 2.0.1
1535 | es-to-primitive: 1.2.1
1536 | function.prototype.name: 1.1.6
1537 | get-intrinsic: 1.2.1
1538 | get-symbol-description: 1.0.0
1539 | globalthis: 1.0.3
1540 | gopd: 1.0.1
1541 | has: 1.0.3
1542 | has-property-descriptors: 1.0.0
1543 | has-proto: 1.0.1
1544 | has-symbols: 1.0.3
1545 | internal-slot: 1.0.5
1546 | is-array-buffer: 3.0.2
1547 | is-callable: 1.2.7
1548 | is-negative-zero: 2.0.2
1549 | is-regex: 1.1.4
1550 | is-shared-array-buffer: 1.0.2
1551 | is-string: 1.0.7
1552 | is-typed-array: 1.1.12
1553 | is-weakref: 1.0.2
1554 | object-inspect: 1.12.3
1555 | object-keys: 1.1.1
1556 | object.assign: 4.1.4
1557 | regexp.prototype.flags: 1.5.0
1558 | safe-array-concat: 1.0.1
1559 | safe-regex-test: 1.0.0
1560 | string.prototype.trim: 1.2.8
1561 | string.prototype.trimend: 1.0.7
1562 | string.prototype.trimstart: 1.0.7
1563 | typed-array-buffer: 1.0.0
1564 | typed-array-byte-length: 1.0.0
1565 | typed-array-byte-offset: 1.0.0
1566 | typed-array-length: 1.0.4
1567 | unbox-primitive: 1.0.2
1568 | which-typed-array: 1.1.11
1569 | dev: true
1570 |
1571 | /es-iterator-helpers@1.0.14:
1572 | resolution: {integrity: sha512-JgtVnwiuoRuzLvqelrvN3Xu7H9bu2ap/kQ2CrM62iidP8SKuD99rWU3CJy++s7IVL2qb/AjXPGR/E7i9ngd/Cw==}
1573 | dependencies:
1574 | asynciterator.prototype: 1.0.0
1575 | call-bind: 1.0.2
1576 | define-properties: 1.2.0
1577 | es-abstract: 1.22.1
1578 | es-set-tostringtag: 2.0.1
1579 | function-bind: 1.1.1
1580 | get-intrinsic: 1.2.1
1581 | globalthis: 1.0.3
1582 | has-property-descriptors: 1.0.0
1583 | has-proto: 1.0.1
1584 | has-symbols: 1.0.3
1585 | internal-slot: 1.0.5
1586 | iterator.prototype: 1.1.1
1587 | safe-array-concat: 1.0.1
1588 | dev: true
1589 |
1590 | /es-set-tostringtag@2.0.1:
1591 | resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==}
1592 | engines: {node: '>= 0.4'}
1593 | dependencies:
1594 | get-intrinsic: 1.2.1
1595 | has: 1.0.3
1596 | has-tostringtag: 1.0.0
1597 | dev: true
1598 |
1599 | /es-shim-unscopables@1.0.0:
1600 | resolution: {integrity: sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==}
1601 | dependencies:
1602 | has: 1.0.3
1603 | dev: true
1604 |
1605 | /es-to-primitive@1.2.1:
1606 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==}
1607 | engines: {node: '>= 0.4'}
1608 | dependencies:
1609 | is-callable: 1.2.7
1610 | is-date-object: 1.0.5
1611 | is-symbol: 1.0.4
1612 | dev: true
1613 |
1614 | /esbuild@0.18.20:
1615 | resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==}
1616 | engines: {node: '>=12'}
1617 | hasBin: true
1618 | requiresBuild: true
1619 | optionalDependencies:
1620 | '@esbuild/android-arm': 0.18.20
1621 | '@esbuild/android-arm64': 0.18.20
1622 | '@esbuild/android-x64': 0.18.20
1623 | '@esbuild/darwin-arm64': 0.18.20
1624 | '@esbuild/darwin-x64': 0.18.20
1625 | '@esbuild/freebsd-arm64': 0.18.20
1626 | '@esbuild/freebsd-x64': 0.18.20
1627 | '@esbuild/linux-arm': 0.18.20
1628 | '@esbuild/linux-arm64': 0.18.20
1629 | '@esbuild/linux-ia32': 0.18.20
1630 | '@esbuild/linux-loong64': 0.18.20
1631 | '@esbuild/linux-mips64el': 0.18.20
1632 | '@esbuild/linux-ppc64': 0.18.20
1633 | '@esbuild/linux-riscv64': 0.18.20
1634 | '@esbuild/linux-s390x': 0.18.20
1635 | '@esbuild/linux-x64': 0.18.20
1636 | '@esbuild/netbsd-x64': 0.18.20
1637 | '@esbuild/openbsd-x64': 0.18.20
1638 | '@esbuild/sunos-x64': 0.18.20
1639 | '@esbuild/win32-arm64': 0.18.20
1640 | '@esbuild/win32-ia32': 0.18.20
1641 | '@esbuild/win32-x64': 0.18.20
1642 | dev: true
1643 |
1644 | /esbuild@0.19.2:
1645 | resolution: {integrity: sha512-G6hPax8UbFakEj3hWO0Vs52LQ8k3lnBhxZWomUJDxfz3rZTLqF5k/FCzuNdLx2RbpBiQQF9H9onlDDH1lZsnjg==}
1646 | engines: {node: '>=12'}
1647 | hasBin: true
1648 | requiresBuild: true
1649 | optionalDependencies:
1650 | '@esbuild/android-arm': 0.19.2
1651 | '@esbuild/android-arm64': 0.19.2
1652 | '@esbuild/android-x64': 0.19.2
1653 | '@esbuild/darwin-arm64': 0.19.2
1654 | '@esbuild/darwin-x64': 0.19.2
1655 | '@esbuild/freebsd-arm64': 0.19.2
1656 | '@esbuild/freebsd-x64': 0.19.2
1657 | '@esbuild/linux-arm': 0.19.2
1658 | '@esbuild/linux-arm64': 0.19.2
1659 | '@esbuild/linux-ia32': 0.19.2
1660 | '@esbuild/linux-loong64': 0.19.2
1661 | '@esbuild/linux-mips64el': 0.19.2
1662 | '@esbuild/linux-ppc64': 0.19.2
1663 | '@esbuild/linux-riscv64': 0.19.2
1664 | '@esbuild/linux-s390x': 0.19.2
1665 | '@esbuild/linux-x64': 0.19.2
1666 | '@esbuild/netbsd-x64': 0.19.2
1667 | '@esbuild/openbsd-x64': 0.19.2
1668 | '@esbuild/sunos-x64': 0.19.2
1669 | '@esbuild/win32-arm64': 0.19.2
1670 | '@esbuild/win32-ia32': 0.19.2
1671 | '@esbuild/win32-x64': 0.19.2
1672 | dev: true
1673 |
1674 | /escape-string-regexp@1.0.5:
1675 | resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==}
1676 | engines: {node: '>=0.8.0'}
1677 |
1678 | /escape-string-regexp@4.0.0:
1679 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
1680 | engines: {node: '>=10'}
1681 | dev: true
1682 |
1683 | /eslint-config-prettier@9.0.0(eslint@8.49.0):
1684 | resolution: {integrity: sha512-IcJsTkJae2S35pRsRAwoCE+925rJJStOdkKnLVgtE+tEpqU0EVVM7OqrwxqgptKdX29NUwC82I5pXsGFIgSevw==}
1685 | hasBin: true
1686 | peerDependencies:
1687 | eslint: '>=7.0.0'
1688 | dependencies:
1689 | eslint: 8.49.0
1690 | dev: true
1691 |
1692 | /eslint-import-resolver-node@0.3.9:
1693 | resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==}
1694 | dependencies:
1695 | debug: 3.2.7
1696 | is-core-module: 2.13.0
1697 | resolve: 1.22.4
1698 | transitivePeerDependencies:
1699 | - supports-color
1700 | dev: true
1701 |
1702 | /eslint-import-resolver-typescript@3.6.0(@typescript-eslint/parser@6.5.0)(eslint-plugin-import@2.28.1)(eslint@8.49.0):
1703 | resolution: {integrity: sha512-QTHR9ddNnn35RTxlaEnx2gCxqFlF2SEN0SE2d17SqwyM7YOSI2GHWRYp5BiRkObTUNYPupC/3Fq2a0PpT+EKpg==}
1704 | engines: {node: ^14.18.0 || >=16.0.0}
1705 | peerDependencies:
1706 | eslint: '*'
1707 | eslint-plugin-import: '*'
1708 | dependencies:
1709 | debug: 4.3.4
1710 | enhanced-resolve: 5.15.0
1711 | eslint: 8.49.0
1712 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.5.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0)
1713 | eslint-plugin-import: 2.28.1(@typescript-eslint/parser@6.5.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0)
1714 | fast-glob: 3.3.1
1715 | get-tsconfig: 4.7.0
1716 | is-core-module: 2.13.0
1717 | is-glob: 4.0.3
1718 | transitivePeerDependencies:
1719 | - '@typescript-eslint/parser'
1720 | - eslint-import-resolver-node
1721 | - eslint-import-resolver-webpack
1722 | - supports-color
1723 | dev: true
1724 |
1725 | /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.5.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0):
1726 | resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
1727 | engines: {node: '>=4'}
1728 | peerDependencies:
1729 | '@typescript-eslint/parser': '*'
1730 | eslint: '*'
1731 | eslint-import-resolver-node: '*'
1732 | eslint-import-resolver-typescript: '*'
1733 | eslint-import-resolver-webpack: '*'
1734 | peerDependenciesMeta:
1735 | '@typescript-eslint/parser':
1736 | optional: true
1737 | eslint:
1738 | optional: true
1739 | eslint-import-resolver-node:
1740 | optional: true
1741 | eslint-import-resolver-typescript:
1742 | optional: true
1743 | eslint-import-resolver-webpack:
1744 | optional: true
1745 | dependencies:
1746 | '@typescript-eslint/parser': 6.5.0(eslint@8.49.0)(typescript@5.2.2)
1747 | debug: 3.2.7
1748 | eslint: 8.49.0
1749 | eslint-import-resolver-node: 0.3.9
1750 | eslint-import-resolver-typescript: 3.6.0(@typescript-eslint/parser@6.5.0)(eslint-plugin-import@2.28.1)(eslint@8.49.0)
1751 | transitivePeerDependencies:
1752 | - supports-color
1753 | dev: true
1754 |
1755 | /eslint-plugin-astro@0.29.0(eslint@8.49.0):
1756 | resolution: {integrity: sha512-JFgonlwmDXPorv7+HLecpHeUF3EzGIxIFwgBueaCrTN7PYPjPeoGVtObJzYSkOtBj1qvagghWRD/qETZdLMDHw==}
1757 | engines: {node: ^14.18.0 || >=16.0.0}
1758 | peerDependencies:
1759 | eslint: '>=7.0.0'
1760 | dependencies:
1761 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0)
1762 | '@jridgewell/sourcemap-codec': 1.4.15
1763 | '@typescript-eslint/types': 5.62.0
1764 | astro-eslint-parser: 0.15.0
1765 | eslint: 8.49.0
1766 | postcss: 8.4.29
1767 | postcss-selector-parser: 6.0.13
1768 | transitivePeerDependencies:
1769 | - supports-color
1770 | dev: true
1771 |
1772 | /eslint-plugin-import@2.28.1(@typescript-eslint/parser@6.5.0)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0):
1773 | resolution: {integrity: sha512-9I9hFlITvOV55alzoKBI+K9q74kv0iKMeY6av5+umsNwayt59fz692daGyjR+oStBQgx6nwR9rXldDev3Clw+A==}
1774 | engines: {node: '>=4'}
1775 | peerDependencies:
1776 | '@typescript-eslint/parser': '*'
1777 | eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8
1778 | peerDependenciesMeta:
1779 | '@typescript-eslint/parser':
1780 | optional: true
1781 | dependencies:
1782 | '@typescript-eslint/parser': 6.5.0(eslint@8.49.0)(typescript@5.2.2)
1783 | array-includes: 3.1.7
1784 | array.prototype.findlastindex: 1.2.3
1785 | array.prototype.flat: 1.3.2
1786 | array.prototype.flatmap: 1.3.2
1787 | debug: 3.2.7
1788 | doctrine: 2.1.0
1789 | eslint: 8.49.0
1790 | eslint-import-resolver-node: 0.3.9
1791 | eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.5.0)(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.0)(eslint@8.49.0)
1792 | has: 1.0.3
1793 | is-core-module: 2.13.0
1794 | is-glob: 4.0.3
1795 | minimatch: 3.1.2
1796 | object.fromentries: 2.0.7
1797 | object.groupby: 1.0.1
1798 | object.values: 1.1.7
1799 | semver: 6.3.1
1800 | tsconfig-paths: 3.14.2
1801 | transitivePeerDependencies:
1802 | - eslint-import-resolver-typescript
1803 | - eslint-import-resolver-webpack
1804 | - supports-color
1805 | dev: true
1806 |
1807 | /eslint-plugin-jsx-a11y@6.7.1(eslint@8.49.0):
1808 | resolution: {integrity: sha512-63Bog4iIethyo8smBklORknVjB0T2dwB8Mr/hIC+fBS0uyHdYYpzM/Ed+YC8VxTjlXHEWFOdmgwcDn1U2L9VCA==}
1809 | engines: {node: '>=4.0'}
1810 | peerDependencies:
1811 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
1812 | dependencies:
1813 | '@babel/runtime': 7.22.15
1814 | aria-query: 5.3.0
1815 | array-includes: 3.1.7
1816 | array.prototype.flatmap: 1.3.2
1817 | ast-types-flow: 0.0.7
1818 | axe-core: 4.8.1
1819 | axobject-query: 3.2.1
1820 | damerau-levenshtein: 1.0.8
1821 | emoji-regex: 9.2.2
1822 | eslint: 8.49.0
1823 | has: 1.0.3
1824 | jsx-ast-utils: 3.3.5
1825 | language-tags: 1.0.5
1826 | minimatch: 3.1.2
1827 | object.entries: 1.1.7
1828 | object.fromentries: 2.0.7
1829 | semver: 6.3.1
1830 | dev: true
1831 |
1832 | /eslint-plugin-no-only-tests@3.1.0:
1833 | resolution: {integrity: sha512-Lf4YW/bL6Un1R6A76pRZyE1dl1vr31G/ev8UzIc/geCgFWyrKil8hVjYqWVKGB/UIGmb6Slzs9T0wNezdSVegw==}
1834 | engines: {node: '>=5.0.0'}
1835 | dev: true
1836 |
1837 | /eslint-plugin-react-hooks@4.6.0(eslint@8.49.0):
1838 | resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==}
1839 | engines: {node: '>=10'}
1840 | peerDependencies:
1841 | eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0
1842 | dependencies:
1843 | eslint: 8.49.0
1844 | dev: true
1845 |
1846 | /eslint-plugin-react-refresh@0.4.3(eslint@8.49.0):
1847 | resolution: {integrity: sha512-Hh0wv8bUNY877+sI0BlCUlsS0TYYQqvzEwJsJJPM2WF4RnTStSnSR3zdJYa2nPOJgg3UghXi54lVyMSmpCalzA==}
1848 | peerDependencies:
1849 | eslint: '>=7'
1850 | dependencies:
1851 | eslint: 8.49.0
1852 | dev: true
1853 |
1854 | /eslint-plugin-react@7.33.2(eslint@8.49.0):
1855 | resolution: {integrity: sha512-73QQMKALArI8/7xGLNI/3LylrEYrlKZSb5C9+q3OtOewTnMQi5cT+aE9E41sLCmli3I9PGGmD1yiZydyo4FEPw==}
1856 | engines: {node: '>=4'}
1857 | peerDependencies:
1858 | eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8
1859 | dependencies:
1860 | array-includes: 3.1.7
1861 | array.prototype.flatmap: 1.3.2
1862 | array.prototype.tosorted: 1.1.2
1863 | doctrine: 2.1.0
1864 | es-iterator-helpers: 1.0.14
1865 | eslint: 8.49.0
1866 | estraverse: 5.3.0
1867 | jsx-ast-utils: 3.3.5
1868 | minimatch: 3.1.2
1869 | object.entries: 1.1.7
1870 | object.fromentries: 2.0.7
1871 | object.hasown: 1.1.3
1872 | object.values: 1.1.7
1873 | prop-types: 15.8.1
1874 | resolve: 2.0.0-next.4
1875 | semver: 6.3.1
1876 | string.prototype.matchall: 4.0.9
1877 | dev: true
1878 |
1879 | /eslint-plugin-unicorn@48.0.1(eslint@8.49.0):
1880 | resolution: {integrity: sha512-FW+4r20myG/DqFcCSzoumaddKBicIPeFnTrifon2mWIzlfyvzwyqZjqVP7m4Cqr/ZYisS2aiLghkUWaPg6vtCw==}
1881 | engines: {node: '>=16'}
1882 | peerDependencies:
1883 | eslint: '>=8.44.0'
1884 | dependencies:
1885 | '@babel/helper-validator-identifier': 7.22.20
1886 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0)
1887 | ci-info: 3.8.0
1888 | clean-regexp: 1.0.0
1889 | eslint: 8.49.0
1890 | esquery: 1.5.0
1891 | indent-string: 4.0.0
1892 | is-builtin-module: 3.2.1
1893 | jsesc: 3.0.2
1894 | lodash: 4.17.21
1895 | pluralize: 8.0.0
1896 | read-pkg-up: 7.0.1
1897 | regexp-tree: 0.1.27
1898 | regjsparser: 0.10.0
1899 | semver: 7.5.4
1900 | strip-indent: 3.0.0
1901 | dev: true
1902 |
1903 | /eslint-scope@7.2.2:
1904 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==}
1905 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1906 | dependencies:
1907 | esrecurse: 4.3.0
1908 | estraverse: 5.3.0
1909 | dev: true
1910 |
1911 | /eslint-visitor-keys@3.4.3:
1912 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
1913 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1914 | dev: true
1915 |
1916 | /eslint@8.49.0:
1917 | resolution: {integrity: sha512-jw03ENfm6VJI0jA9U+8H5zfl5b+FvuU3YYvZRdZHOlU2ggJkxrlkJH4HcDrZpj6YwD8kuYqvQM8LyesoazrSOQ==}
1918 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1919 | hasBin: true
1920 | dependencies:
1921 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.49.0)
1922 | '@eslint-community/regexpp': 4.8.1
1923 | '@eslint/eslintrc': 2.1.2
1924 | '@eslint/js': 8.49.0
1925 | '@humanwhocodes/config-array': 0.11.11
1926 | '@humanwhocodes/module-importer': 1.0.1
1927 | '@nodelib/fs.walk': 1.2.8
1928 | ajv: 6.12.6
1929 | chalk: 4.1.2
1930 | cross-spawn: 7.0.3
1931 | debug: 4.3.4
1932 | doctrine: 3.0.0
1933 | escape-string-regexp: 4.0.0
1934 | eslint-scope: 7.2.2
1935 | eslint-visitor-keys: 3.4.3
1936 | espree: 9.6.1
1937 | esquery: 1.5.0
1938 | esutils: 2.0.3
1939 | fast-deep-equal: 3.1.3
1940 | file-entry-cache: 6.0.1
1941 | find-up: 5.0.0
1942 | glob-parent: 6.0.2
1943 | globals: 13.21.0
1944 | graphemer: 1.4.0
1945 | ignore: 5.2.4
1946 | imurmurhash: 0.1.4
1947 | is-glob: 4.0.3
1948 | is-path-inside: 3.0.3
1949 | js-yaml: 4.1.0
1950 | json-stable-stringify-without-jsonify: 1.0.1
1951 | levn: 0.4.1
1952 | lodash.merge: 4.6.2
1953 | minimatch: 3.1.2
1954 | natural-compare: 1.4.0
1955 | optionator: 0.9.3
1956 | strip-ansi: 6.0.1
1957 | text-table: 0.2.0
1958 | transitivePeerDependencies:
1959 | - supports-color
1960 | dev: true
1961 |
1962 | /espree@9.6.1:
1963 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==}
1964 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
1965 | dependencies:
1966 | acorn: 8.10.0
1967 | acorn-jsx: 5.3.2(acorn@8.10.0)
1968 | eslint-visitor-keys: 3.4.3
1969 | dev: true
1970 |
1971 | /esquery@1.5.0:
1972 | resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==}
1973 | engines: {node: '>=0.10'}
1974 | dependencies:
1975 | estraverse: 5.3.0
1976 | dev: true
1977 |
1978 | /esrecurse@4.3.0:
1979 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
1980 | engines: {node: '>=4.0'}
1981 | dependencies:
1982 | estraverse: 5.3.0
1983 | dev: true
1984 |
1985 | /estraverse@5.3.0:
1986 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
1987 | engines: {node: '>=4.0'}
1988 | dev: true
1989 |
1990 | /esutils@2.0.3:
1991 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
1992 | engines: {node: '>=0.10.0'}
1993 | dev: true
1994 |
1995 | /execa@5.1.1:
1996 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==}
1997 | engines: {node: '>=10'}
1998 | dependencies:
1999 | cross-spawn: 7.0.3
2000 | get-stream: 6.0.1
2001 | human-signals: 2.1.0
2002 | is-stream: 2.0.1
2003 | merge-stream: 2.0.0
2004 | npm-run-path: 4.0.1
2005 | onetime: 5.1.2
2006 | signal-exit: 3.0.7
2007 | strip-final-newline: 2.0.0
2008 | dev: true
2009 |
2010 | /execa@7.2.0:
2011 | resolution: {integrity: sha512-UduyVP7TLB5IcAQl+OzLyLcS/l32W/GLg+AhHJ+ow40FOk2U3SAllPwR44v4vmdFwIWqpdwxxpQbF1n5ta9seA==}
2012 | engines: {node: ^14.18.0 || ^16.14.0 || >=18.0.0}
2013 | dependencies:
2014 | cross-spawn: 7.0.3
2015 | get-stream: 6.0.1
2016 | human-signals: 4.3.1
2017 | is-stream: 3.0.0
2018 | merge-stream: 2.0.0
2019 | npm-run-path: 5.1.0
2020 | onetime: 6.0.0
2021 | signal-exit: 3.0.7
2022 | strip-final-newline: 3.0.0
2023 | dev: true
2024 |
2025 | /fast-deep-equal@3.1.3:
2026 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
2027 | dev: true
2028 |
2029 | /fast-glob@3.3.1:
2030 | resolution: {integrity: sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==}
2031 | engines: {node: '>=8.6.0'}
2032 | dependencies:
2033 | '@nodelib/fs.stat': 2.0.5
2034 | '@nodelib/fs.walk': 1.2.8
2035 | glob-parent: 5.1.2
2036 | merge2: 1.4.1
2037 | micromatch: 4.0.5
2038 | dev: true
2039 |
2040 | /fast-json-stable-stringify@2.1.0:
2041 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
2042 | dev: true
2043 |
2044 | /fast-levenshtein@2.0.6:
2045 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
2046 | dev: true
2047 |
2048 | /fastq@1.15.0:
2049 | resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==}
2050 | dependencies:
2051 | reusify: 1.0.4
2052 | dev: true
2053 |
2054 | /file-entry-cache@6.0.1:
2055 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==}
2056 | engines: {node: ^10.12.0 || >=12.0.0}
2057 | dependencies:
2058 | flat-cache: 3.1.0
2059 | dev: true
2060 |
2061 | /fill-range@7.0.1:
2062 | resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==}
2063 | engines: {node: '>=8'}
2064 | dependencies:
2065 | to-regex-range: 5.0.1
2066 | dev: true
2067 |
2068 | /find-up@4.1.0:
2069 | resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==}
2070 | engines: {node: '>=8'}
2071 | dependencies:
2072 | locate-path: 5.0.0
2073 | path-exists: 4.0.0
2074 | dev: true
2075 |
2076 | /find-up@5.0.0:
2077 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
2078 | engines: {node: '>=10'}
2079 | dependencies:
2080 | locate-path: 6.0.0
2081 | path-exists: 4.0.0
2082 | dev: true
2083 |
2084 | /flat-cache@3.1.0:
2085 | resolution: {integrity: sha512-OHx4Qwrrt0E4jEIcI5/Xb+f+QmJYNj2rrK8wiIdQOIrB9WrrJL8cjZvXdXuBTkkEwEqLycb5BeZDV1o2i9bTew==}
2086 | engines: {node: '>=12.0.0'}
2087 | dependencies:
2088 | flatted: 3.2.7
2089 | keyv: 4.5.3
2090 | rimraf: 3.0.2
2091 | dev: true
2092 |
2093 | /flatted@3.2.7:
2094 | resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==}
2095 | dev: true
2096 |
2097 | /for-each@0.3.3:
2098 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==}
2099 | dependencies:
2100 | is-callable: 1.2.7
2101 | dev: true
2102 |
2103 | /foreground-child@3.1.1:
2104 | resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==}
2105 | engines: {node: '>=14'}
2106 | dependencies:
2107 | cross-spawn: 7.0.3
2108 | signal-exit: 4.1.0
2109 | dev: true
2110 |
2111 | /fs.realpath@1.0.0:
2112 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
2113 | dev: true
2114 |
2115 | /fsevents@2.3.3:
2116 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
2117 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
2118 | os: [darwin]
2119 | requiresBuild: true
2120 | dev: true
2121 | optional: true
2122 |
2123 | /function-bind@1.1.1:
2124 | resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==}
2125 | dev: true
2126 |
2127 | /function.prototype.name@1.1.6:
2128 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==}
2129 | engines: {node: '>= 0.4'}
2130 | dependencies:
2131 | call-bind: 1.0.2
2132 | define-properties: 1.2.0
2133 | es-abstract: 1.22.1
2134 | functions-have-names: 1.2.3
2135 | dev: true
2136 |
2137 | /functions-have-names@1.2.3:
2138 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
2139 | dev: true
2140 |
2141 | /get-func-name@2.0.0:
2142 | resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==}
2143 | dev: true
2144 |
2145 | /get-intrinsic@1.2.1:
2146 | resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
2147 | dependencies:
2148 | function-bind: 1.1.1
2149 | has: 1.0.3
2150 | has-proto: 1.0.1
2151 | has-symbols: 1.0.3
2152 | dev: true
2153 |
2154 | /get-stream@6.0.1:
2155 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==}
2156 | engines: {node: '>=10'}
2157 | dev: true
2158 |
2159 | /get-symbol-description@1.0.0:
2160 | resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==}
2161 | engines: {node: '>= 0.4'}
2162 | dependencies:
2163 | call-bind: 1.0.2
2164 | get-intrinsic: 1.2.1
2165 | dev: true
2166 |
2167 | /get-tsconfig@4.7.0:
2168 | resolution: {integrity: sha512-pmjiZ7xtB8URYm74PlGJozDNyhvsVLUcpBa8DZBG3bWHwaHa9bPiRpiSfovw+fjhwONSCWKRyk+JQHEGZmMrzw==}
2169 | dependencies:
2170 | resolve-pkg-maps: 1.0.0
2171 | dev: true
2172 |
2173 | /glob-parent@5.1.2:
2174 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
2175 | engines: {node: '>= 6'}
2176 | dependencies:
2177 | is-glob: 4.0.3
2178 | dev: true
2179 |
2180 | /glob-parent@6.0.2:
2181 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
2182 | engines: {node: '>=10.13.0'}
2183 | dependencies:
2184 | is-glob: 4.0.3
2185 | dev: true
2186 |
2187 | /glob@10.3.4:
2188 | resolution: {integrity: sha512-6LFElP3A+i/Q8XQKEvZjkEWEOTgAIALR9AO2rwT8bgPhDd1anmqDJDZ6lLddI4ehxxxR1S5RIqKe1uapMQfYaQ==}
2189 | engines: {node: '>=16 || 14 >=14.17'}
2190 | hasBin: true
2191 | dependencies:
2192 | foreground-child: 3.1.1
2193 | jackspeak: 2.3.3
2194 | minimatch: 9.0.3
2195 | minipass: 7.0.3
2196 | path-scurry: 1.10.1
2197 | dev: true
2198 |
2199 | /glob@7.2.3:
2200 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==}
2201 | dependencies:
2202 | fs.realpath: 1.0.0
2203 | inflight: 1.0.6
2204 | inherits: 2.0.4
2205 | minimatch: 3.1.2
2206 | once: 1.4.0
2207 | path-is-absolute: 1.0.1
2208 | dev: true
2209 |
2210 | /globals@11.12.0:
2211 | resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==}
2212 | engines: {node: '>=4'}
2213 | dev: false
2214 |
2215 | /globals@13.21.0:
2216 | resolution: {integrity: sha512-ybyme3s4yy/t/3s35bewwXKOf7cvzfreG2lH0lZl0JB7I4GxRP2ghxOK/Nb9EkRXdbBXZLfq/p/0W2JUONB/Gg==}
2217 | engines: {node: '>=8'}
2218 | dependencies:
2219 | type-fest: 0.20.2
2220 | dev: true
2221 |
2222 | /globalthis@1.0.3:
2223 | resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==}
2224 | engines: {node: '>= 0.4'}
2225 | dependencies:
2226 | define-properties: 1.2.0
2227 | dev: true
2228 |
2229 | /globby@11.1.0:
2230 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==}
2231 | engines: {node: '>=10'}
2232 | dependencies:
2233 | array-union: 2.1.0
2234 | dir-glob: 3.0.1
2235 | fast-glob: 3.3.1
2236 | ignore: 5.2.4
2237 | merge2: 1.4.1
2238 | slash: 3.0.0
2239 | dev: true
2240 |
2241 | /gopd@1.0.1:
2242 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==}
2243 | dependencies:
2244 | get-intrinsic: 1.2.1
2245 | dev: true
2246 |
2247 | /graceful-fs@4.2.11:
2248 | resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==}
2249 | dev: true
2250 |
2251 | /graphemer@1.4.0:
2252 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==}
2253 | dev: true
2254 |
2255 | /has-bigints@1.0.2:
2256 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==}
2257 | dev: true
2258 |
2259 | /has-flag@3.0.0:
2260 | resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==}
2261 | engines: {node: '>=4'}
2262 |
2263 | /has-flag@4.0.0:
2264 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
2265 | engines: {node: '>=8'}
2266 | dev: true
2267 |
2268 | /has-property-descriptors@1.0.0:
2269 | resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==}
2270 | dependencies:
2271 | get-intrinsic: 1.2.1
2272 | dev: true
2273 |
2274 | /has-proto@1.0.1:
2275 | resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==}
2276 | engines: {node: '>= 0.4'}
2277 | dev: true
2278 |
2279 | /has-symbols@1.0.3:
2280 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==}
2281 | engines: {node: '>= 0.4'}
2282 | dev: true
2283 |
2284 | /has-tostringtag@1.0.0:
2285 | resolution: {integrity: sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==}
2286 | engines: {node: '>= 0.4'}
2287 | dependencies:
2288 | has-symbols: 1.0.3
2289 | dev: true
2290 |
2291 | /has@1.0.3:
2292 | resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==}
2293 | engines: {node: '>= 0.4.0'}
2294 | dependencies:
2295 | function-bind: 1.1.1
2296 | dev: true
2297 |
2298 | /hosted-git-info@2.8.9:
2299 | resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==}
2300 | dev: true
2301 |
2302 | /human-signals@2.1.0:
2303 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==}
2304 | engines: {node: '>=10.17.0'}
2305 | dev: true
2306 |
2307 | /human-signals@4.3.1:
2308 | resolution: {integrity: sha512-nZXjEF2nbo7lIw3mgYjItAfgQXog3OjJogSbKa2CQIIvSGWcKgeJnQlNXip6NglNzYH45nSRiEVimMvYL8DDqQ==}
2309 | engines: {node: '>=14.18.0'}
2310 | dev: true
2311 |
2312 | /ignore@5.2.4:
2313 | resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==}
2314 | engines: {node: '>= 4'}
2315 | dev: true
2316 |
2317 | /import-fresh@3.3.0:
2318 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==}
2319 | engines: {node: '>=6'}
2320 | dependencies:
2321 | parent-module: 1.0.1
2322 | resolve-from: 4.0.0
2323 | dev: true
2324 |
2325 | /imurmurhash@0.1.4:
2326 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
2327 | engines: {node: '>=0.8.19'}
2328 | dev: true
2329 |
2330 | /indent-string@4.0.0:
2331 | resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==}
2332 | engines: {node: '>=8'}
2333 | dev: true
2334 |
2335 | /inflight@1.0.6:
2336 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==}
2337 | dependencies:
2338 | once: 1.4.0
2339 | wrappy: 1.0.2
2340 | dev: true
2341 |
2342 | /inherits@2.0.4:
2343 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==}
2344 | dev: true
2345 |
2346 | /internal-slot@1.0.5:
2347 | resolution: {integrity: sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==}
2348 | engines: {node: '>= 0.4'}
2349 | dependencies:
2350 | get-intrinsic: 1.2.1
2351 | has: 1.0.3
2352 | side-channel: 1.0.4
2353 | dev: true
2354 |
2355 | /is-array-buffer@3.0.2:
2356 | resolution: {integrity: sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==}
2357 | dependencies:
2358 | call-bind: 1.0.2
2359 | get-intrinsic: 1.2.1
2360 | is-typed-array: 1.1.12
2361 | dev: true
2362 |
2363 | /is-arrayish@0.2.1:
2364 | resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==}
2365 | dev: true
2366 |
2367 | /is-async-function@2.0.0:
2368 | resolution: {integrity: sha512-Y1JXKrfykRJGdlDwdKlLpLyMIiWqWvuSd17TvZk68PLAOGOoF4Xyav1z0Xhoi+gCYjZVeC5SI+hYFOfvXmGRCA==}
2369 | engines: {node: '>= 0.4'}
2370 | dependencies:
2371 | has-tostringtag: 1.0.0
2372 | dev: true
2373 |
2374 | /is-bigint@1.0.4:
2375 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==}
2376 | dependencies:
2377 | has-bigints: 1.0.2
2378 | dev: true
2379 |
2380 | /is-boolean-object@1.1.2:
2381 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==}
2382 | engines: {node: '>= 0.4'}
2383 | dependencies:
2384 | call-bind: 1.0.2
2385 | has-tostringtag: 1.0.0
2386 | dev: true
2387 |
2388 | /is-builtin-module@3.2.1:
2389 | resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==}
2390 | engines: {node: '>=6'}
2391 | dependencies:
2392 | builtin-modules: 3.3.0
2393 | dev: true
2394 |
2395 | /is-callable@1.2.7:
2396 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
2397 | engines: {node: '>= 0.4'}
2398 | dev: true
2399 |
2400 | /is-core-module@2.13.0:
2401 | resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==}
2402 | dependencies:
2403 | has: 1.0.3
2404 | dev: true
2405 |
2406 | /is-date-object@1.0.5:
2407 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==}
2408 | engines: {node: '>= 0.4'}
2409 | dependencies:
2410 | has-tostringtag: 1.0.0
2411 | dev: true
2412 |
2413 | /is-docker@2.2.1:
2414 | resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==}
2415 | engines: {node: '>=8'}
2416 | hasBin: true
2417 | dev: true
2418 |
2419 | /is-docker@3.0.0:
2420 | resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==}
2421 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2422 | hasBin: true
2423 | dev: true
2424 |
2425 | /is-extglob@2.1.1:
2426 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
2427 | engines: {node: '>=0.10.0'}
2428 | dev: true
2429 |
2430 | /is-finalizationregistry@1.0.2:
2431 | resolution: {integrity: sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==}
2432 | dependencies:
2433 | call-bind: 1.0.2
2434 | dev: true
2435 |
2436 | /is-fullwidth-code-point@3.0.0:
2437 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==}
2438 | engines: {node: '>=8'}
2439 | dev: true
2440 |
2441 | /is-generator-function@1.0.10:
2442 | resolution: {integrity: sha512-jsEjy9l3yiXEQ+PsXdmBwEPcOxaXWLspKdplFUVI9vq1iZgIekeC0L167qeu86czQaxed3q/Uzuw0swL0irL8A==}
2443 | engines: {node: '>= 0.4'}
2444 | dependencies:
2445 | has-tostringtag: 1.0.0
2446 | dev: true
2447 |
2448 | /is-glob@4.0.3:
2449 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
2450 | engines: {node: '>=0.10.0'}
2451 | dependencies:
2452 | is-extglob: 2.1.1
2453 | dev: true
2454 |
2455 | /is-inside-container@1.0.0:
2456 | resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==}
2457 | engines: {node: '>=14.16'}
2458 | hasBin: true
2459 | dependencies:
2460 | is-docker: 3.0.0
2461 | dev: true
2462 |
2463 | /is-map@2.0.2:
2464 | resolution: {integrity: sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg==}
2465 | dev: true
2466 |
2467 | /is-negative-zero@2.0.2:
2468 | resolution: {integrity: sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==}
2469 | engines: {node: '>= 0.4'}
2470 | dev: true
2471 |
2472 | /is-number-object@1.0.7:
2473 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==}
2474 | engines: {node: '>= 0.4'}
2475 | dependencies:
2476 | has-tostringtag: 1.0.0
2477 | dev: true
2478 |
2479 | /is-number@7.0.0:
2480 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
2481 | engines: {node: '>=0.12.0'}
2482 | dev: true
2483 |
2484 | /is-path-inside@3.0.3:
2485 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==}
2486 | engines: {node: '>=8'}
2487 | dev: true
2488 |
2489 | /is-regex@1.1.4:
2490 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==}
2491 | engines: {node: '>= 0.4'}
2492 | dependencies:
2493 | call-bind: 1.0.2
2494 | has-tostringtag: 1.0.0
2495 | dev: true
2496 |
2497 | /is-set@2.0.2:
2498 | resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==}
2499 | dev: true
2500 |
2501 | /is-shared-array-buffer@1.0.2:
2502 | resolution: {integrity: sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==}
2503 | dependencies:
2504 | call-bind: 1.0.2
2505 | dev: true
2506 |
2507 | /is-stream@2.0.1:
2508 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==}
2509 | engines: {node: '>=8'}
2510 | dev: true
2511 |
2512 | /is-stream@3.0.0:
2513 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==}
2514 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2515 | dev: true
2516 |
2517 | /is-string@1.0.7:
2518 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==}
2519 | engines: {node: '>= 0.4'}
2520 | dependencies:
2521 | has-tostringtag: 1.0.0
2522 | dev: true
2523 |
2524 | /is-symbol@1.0.4:
2525 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==}
2526 | engines: {node: '>= 0.4'}
2527 | dependencies:
2528 | has-symbols: 1.0.3
2529 | dev: true
2530 |
2531 | /is-typed-array@1.1.12:
2532 | resolution: {integrity: sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==}
2533 | engines: {node: '>= 0.4'}
2534 | dependencies:
2535 | which-typed-array: 1.1.11
2536 | dev: true
2537 |
2538 | /is-weakmap@2.0.1:
2539 | resolution: {integrity: sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA==}
2540 | dev: true
2541 |
2542 | /is-weakref@1.0.2:
2543 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==}
2544 | dependencies:
2545 | call-bind: 1.0.2
2546 | dev: true
2547 |
2548 | /is-weakset@2.0.2:
2549 | resolution: {integrity: sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg==}
2550 | dependencies:
2551 | call-bind: 1.0.2
2552 | get-intrinsic: 1.2.1
2553 | dev: true
2554 |
2555 | /is-wsl@2.2.0:
2556 | resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==}
2557 | engines: {node: '>=8'}
2558 | dependencies:
2559 | is-docker: 2.2.1
2560 | dev: true
2561 |
2562 | /isarray@2.0.5:
2563 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
2564 | dev: true
2565 |
2566 | /isexe@2.0.0:
2567 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
2568 | dev: true
2569 |
2570 | /iterator.prototype@1.1.1:
2571 | resolution: {integrity: sha512-9E+nePc8C9cnQldmNl6bgpTY6zI4OPRZd97fhJ/iVZ1GifIUDVV5F6x1nEDqpe8KaMEZGT4xgrwKQDxXnjOIZQ==}
2572 | dependencies:
2573 | define-properties: 1.2.0
2574 | get-intrinsic: 1.2.1
2575 | has-symbols: 1.0.3
2576 | reflect.getprototypeof: 1.0.4
2577 | dev: true
2578 |
2579 | /jackspeak@2.3.3:
2580 | resolution: {integrity: sha512-R2bUw+kVZFS/h1AZqBKrSgDmdmjApzgY0AlCPumopFiAlbUxE2gf+SCuBzQ0cP5hHmUmFYF5yw55T97Th5Kstg==}
2581 | engines: {node: '>=14'}
2582 | dependencies:
2583 | '@isaacs/cliui': 8.0.2
2584 | optionalDependencies:
2585 | '@pkgjs/parseargs': 0.11.0
2586 | dev: true
2587 |
2588 | /js-tokens@4.0.0:
2589 | resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==}
2590 |
2591 | /js-yaml@4.1.0:
2592 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==}
2593 | hasBin: true
2594 | dependencies:
2595 | argparse: 2.0.1
2596 | dev: true
2597 |
2598 | /jsesc@0.5.0:
2599 | resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==}
2600 | hasBin: true
2601 | dev: true
2602 |
2603 | /jsesc@2.5.2:
2604 | resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==}
2605 | engines: {node: '>=4'}
2606 | hasBin: true
2607 | dev: false
2608 |
2609 | /jsesc@3.0.2:
2610 | resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==}
2611 | engines: {node: '>=6'}
2612 | hasBin: true
2613 | dev: true
2614 |
2615 | /json-buffer@3.0.1:
2616 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
2617 | dev: true
2618 |
2619 | /json-parse-even-better-errors@2.3.1:
2620 | resolution: {integrity: sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==}
2621 | dev: true
2622 |
2623 | /json-schema-traverse@0.4.1:
2624 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
2625 | dev: true
2626 |
2627 | /json-stable-stringify-without-jsonify@1.0.1:
2628 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
2629 | dev: true
2630 |
2631 | /json5@1.0.2:
2632 | resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
2633 | hasBin: true
2634 | dependencies:
2635 | minimist: 1.2.8
2636 | dev: true
2637 |
2638 | /jsonc-parser@3.2.0:
2639 | resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==}
2640 | dev: true
2641 |
2642 | /jsx-ast-utils@3.3.5:
2643 | resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
2644 | engines: {node: '>=4.0'}
2645 | dependencies:
2646 | array-includes: 3.1.7
2647 | array.prototype.flat: 1.3.2
2648 | object.assign: 4.1.4
2649 | object.values: 1.1.7
2650 | dev: true
2651 |
2652 | /keyv@4.5.3:
2653 | resolution: {integrity: sha512-QCiSav9WaX1PgETJ+SpNnx2PRRapJ/oRSXM4VO5OGYGSjrxbKPVFVhB3l2OCbLCk329N8qyAtsJjSjvVBWzEug==}
2654 | dependencies:
2655 | json-buffer: 3.0.1
2656 | dev: true
2657 |
2658 | /language-subtag-registry@0.3.22:
2659 | resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==}
2660 | dev: true
2661 |
2662 | /language-tags@1.0.5:
2663 | resolution: {integrity: sha512-qJhlO9cGXi6hBGKoxEG/sKZDAHD5Hnu9Hs4WbOY3pCWXDhw0N8x1NenNzm2EnNLkLkk7J2SdxAkDSbb6ftT+UQ==}
2664 | dependencies:
2665 | language-subtag-registry: 0.3.22
2666 | dev: true
2667 |
2668 | /levn@0.4.1:
2669 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
2670 | engines: {node: '>= 0.8.0'}
2671 | dependencies:
2672 | prelude-ls: 1.2.1
2673 | type-check: 0.4.0
2674 | dev: true
2675 |
2676 | /lines-and-columns@1.2.4:
2677 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==}
2678 | dev: true
2679 |
2680 | /local-pkg@0.4.3:
2681 | resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==}
2682 | engines: {node: '>=14'}
2683 | dev: true
2684 |
2685 | /locate-path@5.0.0:
2686 | resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==}
2687 | engines: {node: '>=8'}
2688 | dependencies:
2689 | p-locate: 4.1.0
2690 | dev: true
2691 |
2692 | /locate-path@6.0.0:
2693 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
2694 | engines: {node: '>=10'}
2695 | dependencies:
2696 | p-locate: 5.0.0
2697 | dev: true
2698 |
2699 | /lodash.merge@4.6.2:
2700 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
2701 | dev: true
2702 |
2703 | /lodash@4.17.21:
2704 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==}
2705 | dev: true
2706 |
2707 | /loose-envify@1.4.0:
2708 | resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==}
2709 | hasBin: true
2710 | dependencies:
2711 | js-tokens: 4.0.0
2712 | dev: true
2713 |
2714 | /loupe@2.3.6:
2715 | resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
2716 | dependencies:
2717 | get-func-name: 2.0.0
2718 | dev: true
2719 |
2720 | /lru-cache@10.0.1:
2721 | resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==}
2722 | engines: {node: 14 || >=16.14}
2723 | dev: true
2724 |
2725 | /lru-cache@6.0.0:
2726 | resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==}
2727 | engines: {node: '>=10'}
2728 | dependencies:
2729 | yallist: 4.0.0
2730 | dev: true
2731 |
2732 | /magic-string@0.30.3:
2733 | resolution: {integrity: sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==}
2734 | engines: {node: '>=12'}
2735 | dependencies:
2736 | '@jridgewell/sourcemap-codec': 1.4.15
2737 | dev: true
2738 |
2739 | /merge-stream@2.0.0:
2740 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==}
2741 | dev: true
2742 |
2743 | /merge2@1.4.1:
2744 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
2745 | engines: {node: '>= 8'}
2746 | dev: true
2747 |
2748 | /micromatch@4.0.5:
2749 | resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==}
2750 | engines: {node: '>=8.6'}
2751 | dependencies:
2752 | braces: 3.0.2
2753 | picomatch: 2.3.1
2754 | dev: true
2755 |
2756 | /mimic-fn@2.1.0:
2757 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==}
2758 | engines: {node: '>=6'}
2759 | dev: true
2760 |
2761 | /mimic-fn@4.0.0:
2762 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==}
2763 | engines: {node: '>=12'}
2764 | dev: true
2765 |
2766 | /min-indent@1.0.1:
2767 | resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==}
2768 | engines: {node: '>=4'}
2769 | dev: true
2770 |
2771 | /minimatch@3.1.2:
2772 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==}
2773 | dependencies:
2774 | brace-expansion: 1.1.11
2775 | dev: true
2776 |
2777 | /minimatch@9.0.3:
2778 | resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==}
2779 | engines: {node: '>=16 || 14 >=14.17'}
2780 | dependencies:
2781 | brace-expansion: 2.0.1
2782 | dev: true
2783 |
2784 | /minimist@1.2.8:
2785 | resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
2786 | dev: true
2787 |
2788 | /minipass@7.0.3:
2789 | resolution: {integrity: sha512-LhbbwCfz3vsb12j/WkWQPZfKTsgqIe1Nf/ti1pKjYESGLHIVjWU96G9/ljLH4F9mWNVhlQOm0VySdAWzf05dpg==}
2790 | engines: {node: '>=16 || 14 >=14.17'}
2791 | dev: true
2792 |
2793 | /mlly@1.4.2:
2794 | resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==}
2795 | dependencies:
2796 | acorn: 8.10.0
2797 | pathe: 1.1.1
2798 | pkg-types: 1.0.3
2799 | ufo: 1.3.0
2800 | dev: true
2801 |
2802 | /ms@2.1.2:
2803 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==}
2804 |
2805 | /ms@2.1.3:
2806 | resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
2807 | dev: true
2808 |
2809 | /nanoid@3.3.6:
2810 | resolution: {integrity: sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==}
2811 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
2812 | hasBin: true
2813 | dev: true
2814 |
2815 | /natural-compare@1.4.0:
2816 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
2817 | dev: true
2818 |
2819 | /normalize-package-data@2.5.0:
2820 | resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
2821 | dependencies:
2822 | hosted-git-info: 2.8.9
2823 | resolve: 1.22.4
2824 | semver: 5.7.2
2825 | validate-npm-package-license: 3.0.4
2826 | dev: true
2827 |
2828 | /npm-run-path@4.0.1:
2829 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==}
2830 | engines: {node: '>=8'}
2831 | dependencies:
2832 | path-key: 3.1.1
2833 | dev: true
2834 |
2835 | /npm-run-path@5.1.0:
2836 | resolution: {integrity: sha512-sJOdmRGrY2sjNTRMbSvluQqg+8X7ZK61yvzBEIDhz4f8z1TZFYABsqjjCBd/0PUNE9M6QDgHJXQkGUEm7Q+l9Q==}
2837 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2838 | dependencies:
2839 | path-key: 4.0.0
2840 | dev: true
2841 |
2842 | /object-assign@4.1.1:
2843 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==}
2844 | engines: {node: '>=0.10.0'}
2845 | dev: true
2846 |
2847 | /object-inspect@1.12.3:
2848 | resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==}
2849 | dev: true
2850 |
2851 | /object-keys@1.1.1:
2852 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
2853 | engines: {node: '>= 0.4'}
2854 | dev: true
2855 |
2856 | /object.assign@4.1.4:
2857 | resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==}
2858 | engines: {node: '>= 0.4'}
2859 | dependencies:
2860 | call-bind: 1.0.2
2861 | define-properties: 1.2.0
2862 | has-symbols: 1.0.3
2863 | object-keys: 1.1.1
2864 | dev: true
2865 |
2866 | /object.entries@1.1.7:
2867 | resolution: {integrity: sha512-jCBs/0plmPsOnrKAfFQXRG2NFjlhZgjjcBLSmTnEhU8U6vVTsVe8ANeQJCHTl3gSsI4J+0emOoCgoKlmQPMgmA==}
2868 | engines: {node: '>= 0.4'}
2869 | dependencies:
2870 | call-bind: 1.0.2
2871 | define-properties: 1.2.0
2872 | es-abstract: 1.22.1
2873 | dev: true
2874 |
2875 | /object.fromentries@2.0.7:
2876 | resolution: {integrity: sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==}
2877 | engines: {node: '>= 0.4'}
2878 | dependencies:
2879 | call-bind: 1.0.2
2880 | define-properties: 1.2.0
2881 | es-abstract: 1.22.1
2882 | dev: true
2883 |
2884 | /object.groupby@1.0.1:
2885 | resolution: {integrity: sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==}
2886 | dependencies:
2887 | call-bind: 1.0.2
2888 | define-properties: 1.2.0
2889 | es-abstract: 1.22.1
2890 | get-intrinsic: 1.2.1
2891 | dev: true
2892 |
2893 | /object.hasown@1.1.3:
2894 | resolution: {integrity: sha512-fFI4VcYpRHvSLXxP7yiZOMAd331cPfd2p7PFDVbgUsYOfCT3tICVqXWngbjr4m49OvsBwUBQ6O2uQoJvy3RexA==}
2895 | dependencies:
2896 | define-properties: 1.2.0
2897 | es-abstract: 1.22.1
2898 | dev: true
2899 |
2900 | /object.values@1.1.7:
2901 | resolution: {integrity: sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==}
2902 | engines: {node: '>= 0.4'}
2903 | dependencies:
2904 | call-bind: 1.0.2
2905 | define-properties: 1.2.0
2906 | es-abstract: 1.22.1
2907 | dev: true
2908 |
2909 | /once@1.4.0:
2910 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==}
2911 | dependencies:
2912 | wrappy: 1.0.2
2913 | dev: true
2914 |
2915 | /onetime@5.1.2:
2916 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==}
2917 | engines: {node: '>=6'}
2918 | dependencies:
2919 | mimic-fn: 2.1.0
2920 | dev: true
2921 |
2922 | /onetime@6.0.0:
2923 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==}
2924 | engines: {node: '>=12'}
2925 | dependencies:
2926 | mimic-fn: 4.0.0
2927 | dev: true
2928 |
2929 | /open@9.1.0:
2930 | resolution: {integrity: sha512-OS+QTnw1/4vrf+9hh1jc1jnYjzSG4ttTBB8UxOwAnInG3Uo4ssetzC1ihqaIHjLJnA5GGlRl6QlZXOTQhRBUvg==}
2931 | engines: {node: '>=14.16'}
2932 | dependencies:
2933 | default-browser: 4.0.0
2934 | define-lazy-prop: 3.0.0
2935 | is-inside-container: 1.0.0
2936 | is-wsl: 2.2.0
2937 | dev: true
2938 |
2939 | /optionator@0.9.3:
2940 | resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==}
2941 | engines: {node: '>= 0.8.0'}
2942 | dependencies:
2943 | '@aashutoshrathi/word-wrap': 1.2.6
2944 | deep-is: 0.1.4
2945 | fast-levenshtein: 2.0.6
2946 | levn: 0.4.1
2947 | prelude-ls: 1.2.1
2948 | type-check: 0.4.0
2949 | dev: true
2950 |
2951 | /p-limit@2.3.0:
2952 | resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==}
2953 | engines: {node: '>=6'}
2954 | dependencies:
2955 | p-try: 2.2.0
2956 | dev: true
2957 |
2958 | /p-limit@3.1.0:
2959 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
2960 | engines: {node: '>=10'}
2961 | dependencies:
2962 | yocto-queue: 0.1.0
2963 | dev: true
2964 |
2965 | /p-limit@4.0.0:
2966 | resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
2967 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
2968 | dependencies:
2969 | yocto-queue: 1.0.0
2970 | dev: true
2971 |
2972 | /p-locate@4.1.0:
2973 | resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
2974 | engines: {node: '>=8'}
2975 | dependencies:
2976 | p-limit: 2.3.0
2977 | dev: true
2978 |
2979 | /p-locate@5.0.0:
2980 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
2981 | engines: {node: '>=10'}
2982 | dependencies:
2983 | p-limit: 3.1.0
2984 | dev: true
2985 |
2986 | /p-try@2.2.0:
2987 | resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==}
2988 | engines: {node: '>=6'}
2989 | dev: true
2990 |
2991 | /parent-module@1.0.1:
2992 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
2993 | engines: {node: '>=6'}
2994 | dependencies:
2995 | callsites: 3.1.0
2996 | dev: true
2997 |
2998 | /parse-json@5.2.0:
2999 | resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==}
3000 | engines: {node: '>=8'}
3001 | dependencies:
3002 | '@babel/code-frame': 7.22.13
3003 | error-ex: 1.3.2
3004 | json-parse-even-better-errors: 2.3.1
3005 | lines-and-columns: 1.2.4
3006 | dev: true
3007 |
3008 | /path-exists@4.0.0:
3009 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
3010 | engines: {node: '>=8'}
3011 | dev: true
3012 |
3013 | /path-is-absolute@1.0.1:
3014 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==}
3015 | engines: {node: '>=0.10.0'}
3016 | dev: true
3017 |
3018 | /path-key@3.1.1:
3019 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
3020 | engines: {node: '>=8'}
3021 | dev: true
3022 |
3023 | /path-key@4.0.0:
3024 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==}
3025 | engines: {node: '>=12'}
3026 | dev: true
3027 |
3028 | /path-parse@1.0.7:
3029 | resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==}
3030 | dev: true
3031 |
3032 | /path-scurry@1.10.1:
3033 | resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==}
3034 | engines: {node: '>=16 || 14 >=14.17'}
3035 | dependencies:
3036 | lru-cache: 10.0.1
3037 | minipass: 7.0.3
3038 | dev: true
3039 |
3040 | /path-type@4.0.0:
3041 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==}
3042 | engines: {node: '>=8'}
3043 | dev: true
3044 |
3045 | /pathe@1.1.1:
3046 | resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==}
3047 | dev: true
3048 |
3049 | /pathval@1.1.1:
3050 | resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
3051 | dev: true
3052 |
3053 | /picocolors@1.0.0:
3054 | resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==}
3055 | dev: true
3056 |
3057 | /picomatch@2.3.1:
3058 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==}
3059 | engines: {node: '>=8.6'}
3060 | dev: true
3061 |
3062 | /pkg-types@1.0.3:
3063 | resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==}
3064 | dependencies:
3065 | jsonc-parser: 3.2.0
3066 | mlly: 1.4.2
3067 | pathe: 1.1.1
3068 | dev: true
3069 |
3070 | /pluralize@8.0.0:
3071 | resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==}
3072 | engines: {node: '>=4'}
3073 | dev: true
3074 |
3075 | /postcss-selector-parser@6.0.13:
3076 | resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==}
3077 | engines: {node: '>=4'}
3078 | dependencies:
3079 | cssesc: 3.0.0
3080 | util-deprecate: 1.0.2
3081 | dev: true
3082 |
3083 | /postcss@8.4.29:
3084 | resolution: {integrity: sha512-cbI+jaqIeu/VGqXEarWkRCCffhjgXc0qjBtXpqJhTBohMUjUQnbBr0xqX3vEKudc4iviTewcJo5ajcec5+wdJw==}
3085 | engines: {node: ^10 || ^12 || >=14}
3086 | dependencies:
3087 | nanoid: 3.3.6
3088 | picocolors: 1.0.0
3089 | source-map-js: 1.0.2
3090 | dev: true
3091 |
3092 | /prelude-ls@1.2.1:
3093 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
3094 | engines: {node: '>= 0.8.0'}
3095 | dev: true
3096 |
3097 | /prettier@3.0.3:
3098 | resolution: {integrity: sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==}
3099 | engines: {node: '>=14'}
3100 | hasBin: true
3101 | dev: true
3102 |
3103 | /pretty-format@29.7.0:
3104 | resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
3105 | engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
3106 | dependencies:
3107 | '@jest/schemas': 29.6.3
3108 | ansi-styles: 5.2.0
3109 | react-is: 18.2.0
3110 | dev: true
3111 |
3112 | /prop-types@15.8.1:
3113 | resolution: {integrity: sha512-oj87CgZICdulUohogVAR7AjlC0327U4el4L6eAvOqCeudMDVU0NThNaV+b9Df4dXgSP1gXMTnPdhfe/2qDH5cg==}
3114 | dependencies:
3115 | loose-envify: 1.4.0
3116 | object-assign: 4.1.1
3117 | react-is: 16.13.1
3118 | dev: true
3119 |
3120 | /punycode@2.3.0:
3121 | resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
3122 | engines: {node: '>=6'}
3123 | dev: true
3124 |
3125 | /queue-microtask@1.2.3:
3126 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
3127 | dev: true
3128 |
3129 | /react-is@16.13.1:
3130 | resolution: {integrity: sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==}
3131 | dev: true
3132 |
3133 | /react-is@18.2.0:
3134 | resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
3135 | dev: true
3136 |
3137 | /read-pkg-up@7.0.1:
3138 | resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==}
3139 | engines: {node: '>=8'}
3140 | dependencies:
3141 | find-up: 4.1.0
3142 | read-pkg: 5.2.0
3143 | type-fest: 0.8.1
3144 | dev: true
3145 |
3146 | /read-pkg@5.2.0:
3147 | resolution: {integrity: sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==}
3148 | engines: {node: '>=8'}
3149 | dependencies:
3150 | '@types/normalize-package-data': 2.4.1
3151 | normalize-package-data: 2.5.0
3152 | parse-json: 5.2.0
3153 | type-fest: 0.6.0
3154 | dev: true
3155 |
3156 | /reflect.getprototypeof@1.0.4:
3157 | resolution: {integrity: sha512-ECkTw8TmJwW60lOTR+ZkODISW6RQ8+2CL3COqtiJKLd6MmB45hN51HprHFziKLGkAuTGQhBb91V8cy+KHlaCjw==}
3158 | engines: {node: '>= 0.4'}
3159 | dependencies:
3160 | call-bind: 1.0.2
3161 | define-properties: 1.2.0
3162 | es-abstract: 1.22.1
3163 | get-intrinsic: 1.2.1
3164 | globalthis: 1.0.3
3165 | which-builtin-type: 1.1.3
3166 | dev: true
3167 |
3168 | /regenerator-runtime@0.14.0:
3169 | resolution: {integrity: sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==}
3170 | dev: true
3171 |
3172 | /regexp-tree@0.1.27:
3173 | resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==}
3174 | hasBin: true
3175 | dev: true
3176 |
3177 | /regexp.prototype.flags@1.5.0:
3178 | resolution: {integrity: sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==}
3179 | engines: {node: '>= 0.4'}
3180 | dependencies:
3181 | call-bind: 1.0.2
3182 | define-properties: 1.2.0
3183 | functions-have-names: 1.2.3
3184 | dev: true
3185 |
3186 | /regjsparser@0.10.0:
3187 | resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==}
3188 | hasBin: true
3189 | dependencies:
3190 | jsesc: 0.5.0
3191 | dev: true
3192 |
3193 | /resolve-from@4.0.0:
3194 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
3195 | engines: {node: '>=4'}
3196 | dev: true
3197 |
3198 | /resolve-pkg-maps@1.0.0:
3199 | resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
3200 | dev: true
3201 |
3202 | /resolve@1.22.4:
3203 | resolution: {integrity: sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==}
3204 | hasBin: true
3205 | dependencies:
3206 | is-core-module: 2.13.0
3207 | path-parse: 1.0.7
3208 | supports-preserve-symlinks-flag: 1.0.0
3209 | dev: true
3210 |
3211 | /resolve@2.0.0-next.4:
3212 | resolution: {integrity: sha512-iMDbmAWtfU+MHpxt/I5iWI7cY6YVEZUQ3MBgPQ++XD1PELuJHIl82xBmObyP2KyQmkNB2dsqF7seoQQiAn5yDQ==}
3213 | hasBin: true
3214 | dependencies:
3215 | is-core-module: 2.13.0
3216 | path-parse: 1.0.7
3217 | supports-preserve-symlinks-flag: 1.0.0
3218 | dev: true
3219 |
3220 | /reusify@1.0.4:
3221 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==}
3222 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
3223 | dev: true
3224 |
3225 | /rimraf@3.0.2:
3226 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==}
3227 | hasBin: true
3228 | dependencies:
3229 | glob: 7.2.3
3230 | dev: true
3231 |
3232 | /rimraf@5.0.1:
3233 | resolution: {integrity: sha512-OfFZdwtd3lZ+XZzYP/6gTACubwFcHdLRqS9UX3UwpU2dnGQYkPFISRwvM3w9IiB2w7bW5qGo/uAwE4SmXXSKvg==}
3234 | engines: {node: '>=14'}
3235 | hasBin: true
3236 | dependencies:
3237 | glob: 10.3.4
3238 | dev: true
3239 |
3240 | /rollup@3.29.2:
3241 | resolution: {integrity: sha512-CJouHoZ27v6siztc21eEQGo0kIcE5D1gVPA571ez0mMYb25LGYGKnVNXpEj5MGlepmDWGXNjDB5q7uNiPHC11A==}
3242 | engines: {node: '>=14.18.0', npm: '>=8.0.0'}
3243 | hasBin: true
3244 | optionalDependencies:
3245 | fsevents: 2.3.3
3246 | dev: true
3247 |
3248 | /run-applescript@5.0.0:
3249 | resolution: {integrity: sha512-XcT5rBksx1QdIhlFOCtgZkB99ZEouFZ1E2Kc2LHqNW13U3/74YGdkQRmThTwxy4QIyookibDKYZOPqX//6BlAg==}
3250 | engines: {node: '>=12'}
3251 | dependencies:
3252 | execa: 5.1.1
3253 | dev: true
3254 |
3255 | /run-parallel@1.2.0:
3256 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
3257 | dependencies:
3258 | queue-microtask: 1.2.3
3259 | dev: true
3260 |
3261 | /safe-array-concat@1.0.1:
3262 | resolution: {integrity: sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==}
3263 | engines: {node: '>=0.4'}
3264 | dependencies:
3265 | call-bind: 1.0.2
3266 | get-intrinsic: 1.2.1
3267 | has-symbols: 1.0.3
3268 | isarray: 2.0.5
3269 | dev: true
3270 |
3271 | /safe-regex-test@1.0.0:
3272 | resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==}
3273 | dependencies:
3274 | call-bind: 1.0.2
3275 | get-intrinsic: 1.2.1
3276 | is-regex: 1.1.4
3277 | dev: true
3278 |
3279 | /semver@5.7.2:
3280 | resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==}
3281 | hasBin: true
3282 | dev: true
3283 |
3284 | /semver@6.3.1:
3285 | resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==}
3286 | hasBin: true
3287 | dev: true
3288 |
3289 | /semver@7.5.4:
3290 | resolution: {integrity: sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==}
3291 | engines: {node: '>=10'}
3292 | hasBin: true
3293 | dependencies:
3294 | lru-cache: 6.0.0
3295 | dev: true
3296 |
3297 | /shebang-command@2.0.0:
3298 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
3299 | engines: {node: '>=8'}
3300 | dependencies:
3301 | shebang-regex: 3.0.0
3302 | dev: true
3303 |
3304 | /shebang-regex@3.0.0:
3305 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
3306 | engines: {node: '>=8'}
3307 | dev: true
3308 |
3309 | /side-channel@1.0.4:
3310 | resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==}
3311 | dependencies:
3312 | call-bind: 1.0.2
3313 | get-intrinsic: 1.2.1
3314 | object-inspect: 1.12.3
3315 | dev: true
3316 |
3317 | /siginfo@2.0.0:
3318 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
3319 | dev: true
3320 |
3321 | /signal-exit@3.0.7:
3322 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
3323 | dev: true
3324 |
3325 | /signal-exit@4.1.0:
3326 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==}
3327 | engines: {node: '>=14'}
3328 | dev: true
3329 |
3330 | /slash@3.0.0:
3331 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==}
3332 | engines: {node: '>=8'}
3333 | dev: true
3334 |
3335 | /source-map-js@1.0.2:
3336 | resolution: {integrity: sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==}
3337 | engines: {node: '>=0.10.0'}
3338 | dev: true
3339 |
3340 | /spdx-correct@3.2.0:
3341 | resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
3342 | dependencies:
3343 | spdx-expression-parse: 3.0.1
3344 | spdx-license-ids: 3.0.13
3345 | dev: true
3346 |
3347 | /spdx-exceptions@2.3.0:
3348 | resolution: {integrity: sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==}
3349 | dev: true
3350 |
3351 | /spdx-expression-parse@3.0.1:
3352 | resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
3353 | dependencies:
3354 | spdx-exceptions: 2.3.0
3355 | spdx-license-ids: 3.0.13
3356 | dev: true
3357 |
3358 | /spdx-license-ids@3.0.13:
3359 | resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==}
3360 | dev: true
3361 |
3362 | /stackback@0.0.2:
3363 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
3364 | dev: true
3365 |
3366 | /std-env@3.4.3:
3367 | resolution: {integrity: sha512-f9aPhy8fYBuMN+sNfakZV18U39PbalgjXG3lLB9WkaYTxijru61wb57V9wxxNthXM5Sd88ETBWi29qLAsHO52Q==}
3368 | dev: true
3369 |
3370 | /string-width@4.2.3:
3371 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
3372 | engines: {node: '>=8'}
3373 | dependencies:
3374 | emoji-regex: 8.0.0
3375 | is-fullwidth-code-point: 3.0.0
3376 | strip-ansi: 6.0.1
3377 | dev: true
3378 |
3379 | /string-width@5.1.2:
3380 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==}
3381 | engines: {node: '>=12'}
3382 | dependencies:
3383 | eastasianwidth: 0.2.0
3384 | emoji-regex: 9.2.2
3385 | strip-ansi: 7.1.0
3386 | dev: true
3387 |
3388 | /string.prototype.matchall@4.0.9:
3389 | resolution: {integrity: sha512-6i5hL3MqG/K2G43mWXWgP+qizFW/QH/7kCNN13JrJS5q48FN5IKksLDscexKP3dnmB6cdm9jlNgAsWNLpSykmA==}
3390 | dependencies:
3391 | call-bind: 1.0.2
3392 | define-properties: 1.2.0
3393 | es-abstract: 1.22.1
3394 | get-intrinsic: 1.2.1
3395 | has-symbols: 1.0.3
3396 | internal-slot: 1.0.5
3397 | regexp.prototype.flags: 1.5.0
3398 | side-channel: 1.0.4
3399 | dev: true
3400 |
3401 | /string.prototype.trim@1.2.8:
3402 | resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==}
3403 | engines: {node: '>= 0.4'}
3404 | dependencies:
3405 | call-bind: 1.0.2
3406 | define-properties: 1.2.0
3407 | es-abstract: 1.22.1
3408 | dev: true
3409 |
3410 | /string.prototype.trimend@1.0.7:
3411 | resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==}
3412 | dependencies:
3413 | call-bind: 1.0.2
3414 | define-properties: 1.2.0
3415 | es-abstract: 1.22.1
3416 | dev: true
3417 |
3418 | /string.prototype.trimstart@1.0.7:
3419 | resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==}
3420 | dependencies:
3421 | call-bind: 1.0.2
3422 | define-properties: 1.2.0
3423 | es-abstract: 1.22.1
3424 | dev: true
3425 |
3426 | /strip-ansi@6.0.1:
3427 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==}
3428 | engines: {node: '>=8'}
3429 | dependencies:
3430 | ansi-regex: 5.0.1
3431 | dev: true
3432 |
3433 | /strip-ansi@7.1.0:
3434 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==}
3435 | engines: {node: '>=12'}
3436 | dependencies:
3437 | ansi-regex: 6.0.1
3438 | dev: true
3439 |
3440 | /strip-bom@3.0.0:
3441 | resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==}
3442 | engines: {node: '>=4'}
3443 | dev: true
3444 |
3445 | /strip-final-newline@2.0.0:
3446 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==}
3447 | engines: {node: '>=6'}
3448 | dev: true
3449 |
3450 | /strip-final-newline@3.0.0:
3451 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==}
3452 | engines: {node: '>=12'}
3453 | dev: true
3454 |
3455 | /strip-indent@3.0.0:
3456 | resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==}
3457 | engines: {node: '>=8'}
3458 | dependencies:
3459 | min-indent: 1.0.1
3460 | dev: true
3461 |
3462 | /strip-json-comments@3.1.1:
3463 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
3464 | engines: {node: '>=8'}
3465 | dev: true
3466 |
3467 | /strip-literal@1.3.0:
3468 | resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==}
3469 | dependencies:
3470 | acorn: 8.10.0
3471 | dev: true
3472 |
3473 | /supports-color@5.5.0:
3474 | resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==}
3475 | engines: {node: '>=4'}
3476 | dependencies:
3477 | has-flag: 3.0.0
3478 |
3479 | /supports-color@7.2.0:
3480 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
3481 | engines: {node: '>=8'}
3482 | dependencies:
3483 | has-flag: 4.0.0
3484 | dev: true
3485 |
3486 | /supports-preserve-symlinks-flag@1.0.0:
3487 | resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==}
3488 | engines: {node: '>= 0.4'}
3489 | dev: true
3490 |
3491 | /synckit@0.8.5:
3492 | resolution: {integrity: sha512-L1dapNV6vu2s/4Sputv8xGsCdAVlb5nRDMFU/E27D44l5U6cw1g0dGd45uLc+OXjNMmF4ntiMdCimzcjFKQI8Q==}
3493 | engines: {node: ^14.18.0 || >=16.0.0}
3494 | dependencies:
3495 | '@pkgr/utils': 2.4.2
3496 | tslib: 2.6.2
3497 | dev: true
3498 |
3499 | /tapable@2.2.1:
3500 | resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==}
3501 | engines: {node: '>=6'}
3502 | dev: true
3503 |
3504 | /text-table@0.2.0:
3505 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==}
3506 | dev: true
3507 |
3508 | /tinybench@2.5.1:
3509 | resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==}
3510 | dev: true
3511 |
3512 | /tinypool@0.7.0:
3513 | resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==}
3514 | engines: {node: '>=14.0.0'}
3515 | dev: true
3516 |
3517 | /tinyspy@2.1.1:
3518 | resolution: {integrity: sha512-XPJL2uSzcOyBMky6OFrusqWlzfFrXtE0hPuMgW8A2HmaqrPo4ZQHRN/V0QXN3FSjKxpsbRrFc5LI7KOwBsT1/w==}
3519 | engines: {node: '>=14.0.0'}
3520 | dev: true
3521 |
3522 | /titleize@3.0.0:
3523 | resolution: {integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ==}
3524 | engines: {node: '>=12'}
3525 | dev: true
3526 |
3527 | /to-fast-properties@2.0.0:
3528 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==}
3529 | engines: {node: '>=4'}
3530 |
3531 | /to-regex-range@5.0.1:
3532 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
3533 | engines: {node: '>=8.0'}
3534 | dependencies:
3535 | is-number: 7.0.0
3536 | dev: true
3537 |
3538 | /ts-api-utils@1.0.3(typescript@5.2.2):
3539 | resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==}
3540 | engines: {node: '>=16.13.0'}
3541 | peerDependencies:
3542 | typescript: '>=4.2.0'
3543 | dependencies:
3544 | typescript: 5.2.2
3545 | dev: true
3546 |
3547 | /tsconfig-paths@3.14.2:
3548 | resolution: {integrity: sha512-o/9iXgCYc5L/JxCHPe3Hvh8Q/2xm5Z+p18PESBU6Ff33695QnCHBEjcytY2q19ua7Mbl/DavtBOLq+oG0RCL+g==}
3549 | dependencies:
3550 | '@types/json5': 0.0.29
3551 | json5: 1.0.2
3552 | minimist: 1.2.8
3553 | strip-bom: 3.0.0
3554 | dev: true
3555 |
3556 | /tslib@2.6.2:
3557 | resolution: {integrity: sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==}
3558 | dev: true
3559 |
3560 | /type-check@0.4.0:
3561 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
3562 | engines: {node: '>= 0.8.0'}
3563 | dependencies:
3564 | prelude-ls: 1.2.1
3565 | dev: true
3566 |
3567 | /type-detect@4.0.8:
3568 | resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
3569 | engines: {node: '>=4'}
3570 | dev: true
3571 |
3572 | /type-fest@0.20.2:
3573 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==}
3574 | engines: {node: '>=10'}
3575 | dev: true
3576 |
3577 | /type-fest@0.6.0:
3578 | resolution: {integrity: sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==}
3579 | engines: {node: '>=8'}
3580 | dev: true
3581 |
3582 | /type-fest@0.8.1:
3583 | resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==}
3584 | engines: {node: '>=8'}
3585 | dev: true
3586 |
3587 | /typed-array-buffer@1.0.0:
3588 | resolution: {integrity: sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==}
3589 | engines: {node: '>= 0.4'}
3590 | dependencies:
3591 | call-bind: 1.0.2
3592 | get-intrinsic: 1.2.1
3593 | is-typed-array: 1.1.12
3594 | dev: true
3595 |
3596 | /typed-array-byte-length@1.0.0:
3597 | resolution: {integrity: sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==}
3598 | engines: {node: '>= 0.4'}
3599 | dependencies:
3600 | call-bind: 1.0.2
3601 | for-each: 0.3.3
3602 | has-proto: 1.0.1
3603 | is-typed-array: 1.1.12
3604 | dev: true
3605 |
3606 | /typed-array-byte-offset@1.0.0:
3607 | resolution: {integrity: sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==}
3608 | engines: {node: '>= 0.4'}
3609 | dependencies:
3610 | available-typed-arrays: 1.0.5
3611 | call-bind: 1.0.2
3612 | for-each: 0.3.3
3613 | has-proto: 1.0.1
3614 | is-typed-array: 1.1.12
3615 | dev: true
3616 |
3617 | /typed-array-length@1.0.4:
3618 | resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==}
3619 | dependencies:
3620 | call-bind: 1.0.2
3621 | for-each: 0.3.3
3622 | is-typed-array: 1.1.12
3623 | dev: true
3624 |
3625 | /typescript@5.2.2:
3626 | resolution: {integrity: sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==}
3627 | engines: {node: '>=14.17'}
3628 | hasBin: true
3629 | dev: true
3630 |
3631 | /ufo@1.3.0:
3632 | resolution: {integrity: sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==}
3633 | dev: true
3634 |
3635 | /unbox-primitive@1.0.2:
3636 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==}
3637 | dependencies:
3638 | call-bind: 1.0.2
3639 | has-bigints: 1.0.2
3640 | has-symbols: 1.0.3
3641 | which-boxed-primitive: 1.0.2
3642 | dev: true
3643 |
3644 | /untildify@4.0.0:
3645 | resolution: {integrity: sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw==}
3646 | engines: {node: '>=8'}
3647 | dev: true
3648 |
3649 | /uri-js@4.4.1:
3650 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
3651 | dependencies:
3652 | punycode: 2.3.0
3653 | dev: true
3654 |
3655 | /util-deprecate@1.0.2:
3656 | resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
3657 | dev: true
3658 |
3659 | /validate-npm-package-license@3.0.4:
3660 | resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
3661 | dependencies:
3662 | spdx-correct: 3.2.0
3663 | spdx-expression-parse: 3.0.1
3664 | dev: true
3665 |
3666 | /vite-node@0.34.4(@types/node@18.17.15):
3667 | resolution: {integrity: sha512-ho8HtiLc+nsmbwZMw8SlghESEE3KxJNp04F/jPUCLVvaURwt0d+r9LxEqCX5hvrrOQ0GSyxbYr5ZfRYhQ0yVKQ==}
3668 | engines: {node: '>=v14.18.0'}
3669 | hasBin: true
3670 | dependencies:
3671 | cac: 6.7.14
3672 | debug: 4.3.4
3673 | mlly: 1.4.2
3674 | pathe: 1.1.1
3675 | picocolors: 1.0.0
3676 | vite: 4.4.9(@types/node@18.17.15)
3677 | transitivePeerDependencies:
3678 | - '@types/node'
3679 | - less
3680 | - lightningcss
3681 | - sass
3682 | - stylus
3683 | - sugarss
3684 | - supports-color
3685 | - terser
3686 | dev: true
3687 |
3688 | /vite@4.4.9(@types/node@18.17.15):
3689 | resolution: {integrity: sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==}
3690 | engines: {node: ^14.18.0 || >=16.0.0}
3691 | hasBin: true
3692 | peerDependencies:
3693 | '@types/node': '>= 14'
3694 | less: '*'
3695 | lightningcss: ^1.21.0
3696 | sass: '*'
3697 | stylus: '*'
3698 | sugarss: '*'
3699 | terser: ^5.4.0
3700 | peerDependenciesMeta:
3701 | '@types/node':
3702 | optional: true
3703 | less:
3704 | optional: true
3705 | lightningcss:
3706 | optional: true
3707 | sass:
3708 | optional: true
3709 | stylus:
3710 | optional: true
3711 | sugarss:
3712 | optional: true
3713 | terser:
3714 | optional: true
3715 | dependencies:
3716 | '@types/node': 18.17.15
3717 | esbuild: 0.18.20
3718 | postcss: 8.4.29
3719 | rollup: 3.29.2
3720 | optionalDependencies:
3721 | fsevents: 2.3.3
3722 | dev: true
3723 |
3724 | /vitest@0.34.4:
3725 | resolution: {integrity: sha512-SE/laOsB6995QlbSE6BtkpXDeVNLJc1u2LHRG/OpnN4RsRzM3GQm4nm3PQCK5OBtrsUqnhzLdnT7se3aeNGdlw==}
3726 | engines: {node: '>=v14.18.0'}
3727 | hasBin: true
3728 | peerDependencies:
3729 | '@edge-runtime/vm': '*'
3730 | '@vitest/browser': '*'
3731 | '@vitest/ui': '*'
3732 | happy-dom: '*'
3733 | jsdom: '*'
3734 | playwright: '*'
3735 | safaridriver: '*'
3736 | webdriverio: '*'
3737 | peerDependenciesMeta:
3738 | '@edge-runtime/vm':
3739 | optional: true
3740 | '@vitest/browser':
3741 | optional: true
3742 | '@vitest/ui':
3743 | optional: true
3744 | happy-dom:
3745 | optional: true
3746 | jsdom:
3747 | optional: true
3748 | playwright:
3749 | optional: true
3750 | safaridriver:
3751 | optional: true
3752 | webdriverio:
3753 | optional: true
3754 | dependencies:
3755 | '@types/chai': 4.3.6
3756 | '@types/chai-subset': 1.3.3
3757 | '@types/node': 18.17.15
3758 | '@vitest/expect': 0.34.4
3759 | '@vitest/runner': 0.34.4
3760 | '@vitest/snapshot': 0.34.4
3761 | '@vitest/spy': 0.34.4
3762 | '@vitest/utils': 0.34.4
3763 | acorn: 8.10.0
3764 | acorn-walk: 8.2.0
3765 | cac: 6.7.14
3766 | chai: 4.3.8
3767 | debug: 4.3.4
3768 | local-pkg: 0.4.3
3769 | magic-string: 0.30.3
3770 | pathe: 1.1.1
3771 | picocolors: 1.0.0
3772 | std-env: 3.4.3
3773 | strip-literal: 1.3.0
3774 | tinybench: 2.5.1
3775 | tinypool: 0.7.0
3776 | vite: 4.4.9(@types/node@18.17.15)
3777 | vite-node: 0.34.4(@types/node@18.17.15)
3778 | why-is-node-running: 2.2.2
3779 | transitivePeerDependencies:
3780 | - less
3781 | - lightningcss
3782 | - sass
3783 | - stylus
3784 | - sugarss
3785 | - supports-color
3786 | - terser
3787 | dev: true
3788 |
3789 | /which-boxed-primitive@1.0.2:
3790 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==}
3791 | dependencies:
3792 | is-bigint: 1.0.4
3793 | is-boolean-object: 1.1.2
3794 | is-number-object: 1.0.7
3795 | is-string: 1.0.7
3796 | is-symbol: 1.0.4
3797 | dev: true
3798 |
3799 | /which-builtin-type@1.1.3:
3800 | resolution: {integrity: sha512-YmjsSMDBYsM1CaFiayOVT06+KJeXf0o5M/CAd4o1lTadFAtacTUM49zoYxr/oroopFDfhvN6iEcBxUyc3gvKmw==}
3801 | engines: {node: '>= 0.4'}
3802 | dependencies:
3803 | function.prototype.name: 1.1.6
3804 | has-tostringtag: 1.0.0
3805 | is-async-function: 2.0.0
3806 | is-date-object: 1.0.5
3807 | is-finalizationregistry: 1.0.2
3808 | is-generator-function: 1.0.10
3809 | is-regex: 1.1.4
3810 | is-weakref: 1.0.2
3811 | isarray: 2.0.5
3812 | which-boxed-primitive: 1.0.2
3813 | which-collection: 1.0.1
3814 | which-typed-array: 1.1.11
3815 | dev: true
3816 |
3817 | /which-collection@1.0.1:
3818 | resolution: {integrity: sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A==}
3819 | dependencies:
3820 | is-map: 2.0.2
3821 | is-set: 2.0.2
3822 | is-weakmap: 2.0.1
3823 | is-weakset: 2.0.2
3824 | dev: true
3825 |
3826 | /which-typed-array@1.1.11:
3827 | resolution: {integrity: sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==}
3828 | engines: {node: '>= 0.4'}
3829 | dependencies:
3830 | available-typed-arrays: 1.0.5
3831 | call-bind: 1.0.2
3832 | for-each: 0.3.3
3833 | gopd: 1.0.1
3834 | has-tostringtag: 1.0.0
3835 | dev: true
3836 |
3837 | /which@2.0.2:
3838 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
3839 | engines: {node: '>= 8'}
3840 | hasBin: true
3841 | dependencies:
3842 | isexe: 2.0.0
3843 | dev: true
3844 |
3845 | /why-is-node-running@2.2.2:
3846 | resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
3847 | engines: {node: '>=8'}
3848 | hasBin: true
3849 | dependencies:
3850 | siginfo: 2.0.0
3851 | stackback: 0.0.2
3852 | dev: true
3853 |
3854 | /wrap-ansi@7.0.0:
3855 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==}
3856 | engines: {node: '>=10'}
3857 | dependencies:
3858 | ansi-styles: 4.3.0
3859 | string-width: 4.2.3
3860 | strip-ansi: 6.0.1
3861 | dev: true
3862 |
3863 | /wrap-ansi@8.1.0:
3864 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==}
3865 | engines: {node: '>=12'}
3866 | dependencies:
3867 | ansi-styles: 6.2.1
3868 | string-width: 5.1.2
3869 | strip-ansi: 7.1.0
3870 | dev: true
3871 |
3872 | /wrappy@1.0.2:
3873 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==}
3874 | dev: true
3875 |
3876 | /yallist@4.0.0:
3877 | resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==}
3878 | dev: true
3879 |
3880 | /yocto-queue@0.1.0:
3881 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
3882 | engines: {node: '>=10'}
3883 | dev: true
3884 |
3885 | /yocto-queue@1.0.0:
3886 | resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
3887 | engines: {node: '>=12.20'}
3888 | dev: true
3889 |
--------------------------------------------------------------------------------
/src/extension.ts:
--------------------------------------------------------------------------------
1 | import { commands, type ExtensionContext, window, workspace } from 'vscode'
2 |
3 | import { getStarlightLocalesConfig, getStarlightUris } from './libs/config'
4 | import { getContentPagesStatuses } from './libs/content'
5 | import { pickTranslation, prepareTranslation } from './libs/translation'
6 | import { isWorkspaceWithSingleFolder } from './libs/vsc'
7 |
8 | export function activate(context: ExtensionContext): void {
9 | context.subscriptions.push(
10 | commands.registerCommand('starlight-i18n.start', async () => {
11 | try {
12 | if (!isWorkspaceWithSingleFolder(workspace.workspaceFolders)) {
13 | throw new Error('Starlight i18n only supports single folder workspaces.')
14 | }
15 |
16 | const starlightUris = await getStarlightUris(
17 | workspace.workspaceFolders[0],
18 | workspace.getConfiguration('starlight-i18n').get('configDirectories') ?? ['.'],
19 | )
20 |
21 | if (!starlightUris) {
22 | throw new Error('Failed to find a Starlight instance in the current workspace.')
23 | }
24 |
25 | const translation = await pickTranslation(async () => {
26 | const localesConfig = await getStarlightLocalesConfig(starlightUris.config)
27 |
28 | return getContentPagesStatuses(starlightUris, localesConfig)
29 | })
30 |
31 | if (!translation) {
32 | return
33 | }
34 |
35 | await prepareTranslation(starlightUris, translation)
36 | } catch (error) {
37 | const isError = error instanceof Error
38 | const message = isError ? error.message : 'Something went wrong!'
39 |
40 | const logger = window.createOutputChannel('Starlight i18n')
41 | logger.appendLine(message)
42 |
43 | if (isError && error.stack) {
44 | logger.appendLine(error.stack)
45 | }
46 |
47 | await window.showErrorMessage(message)
48 | }
49 | }),
50 | )
51 | }
52 |
--------------------------------------------------------------------------------
/src/libs/ast.ts:
--------------------------------------------------------------------------------
1 | import { parse } from '@babel/parser'
2 | import traverse from '@babel/traverse'
3 | import {
4 | isCallExpression,
5 | type File,
6 | isObjectExpression,
7 | isObjectProperty,
8 | isIdentifier,
9 | isStringLiteral,
10 | isArrayExpression,
11 | type ObjectExpression,
12 | type ObjectProperty,
13 | isVariableDeclaration,
14 | isExportNamedDeclaration,
15 | type Identifier,
16 | isImportDeclaration,
17 | isImportDefaultSpecifier,
18 | isExportDefaultDeclaration,
19 | type ImportDeclaration,
20 | } from '@babel/types'
21 |
22 | import type { Locale, LocalesConfig } from './config'
23 |
24 | export async function getStarlightLocalesConfigFromCode(code: string, readJSON: JSONReader) {
25 | const ast = parseCode(code)
26 | const starlightConfig = getStarlightConfig(ast)
27 |
28 | const locales = await getStarlightLocalesConfig(ast, starlightConfig, readJSON)
29 | const defaultLocale =
30 | getStarlightDefaultLocaleConfig(starlightConfig) ??
31 | Object.entries(locales).find(([name]) => name === 'root')?.[1].lang
32 |
33 | if (!defaultLocale) {
34 | throw new Error('Failed to find Starlight default locale.')
35 | }
36 |
37 | const localesConfig: LocalesConfig = {
38 | defaultLocale,
39 | locales: {},
40 | }
41 |
42 | for (const [name, locale] of Object.entries(locales)) {
43 | if (name !== localesConfig.defaultLocale && name !== 'root') {
44 | localesConfig.locales[name] = locale
45 | }
46 | }
47 |
48 | if (Object.keys(localesConfig.locales).length === 0) {
49 | throw new Error('Failed to find any Starlight locale to translate.')
50 | }
51 |
52 | return localesConfig
53 | }
54 |
55 | function parseCode(code: string) {
56 | const result = parse(code, { sourceType: 'unambiguous', plugins: ['typescript'] })
57 |
58 | if (result.errors.length > 0) {
59 | throw new Error(`Failed to parse Astro configuration file: ${JSON.stringify(result.errors)}`)
60 | }
61 |
62 | return result
63 | }
64 |
65 | function getStarlightConfig(ast: File) {
66 | let starlightConfig: ObjectExpression | undefined
67 |
68 | traverse(ast, {
69 | ExportDefaultDeclaration(path) {
70 | if (!isCallExpression(path.node.declaration)) {
71 | throw new Error(
72 | 'The default export of the Astro configuration file must be a call to the `defineConfig` function.',
73 | )
74 | }
75 |
76 | const astroConfig = path.node.declaration.arguments[0]
77 |
78 | if (!isObjectExpression(astroConfig)) {
79 | throw new Error(
80 | 'The first argument of the `defineConfig` function must be an object containing the Astro configuration.',
81 | )
82 | }
83 |
84 | const astroIntegrations = astroConfig.properties.find(
85 | (property) =>
86 | isObjectProperty(property) &&
87 | ((isIdentifier(property.key) && property.key.name === 'integrations') ||
88 | (isStringLiteral(property.key) && property.key.value === 'integrations')),
89 | )
90 |
91 | if (!astroIntegrations || !isObjectProperty(astroIntegrations) || !isArrayExpression(astroIntegrations.value)) {
92 | throw new Error('The Astro configuration must contain an `integrations` property that must be an array.')
93 | }
94 |
95 | const starlightIntegration = astroIntegrations.value.elements.find(
96 | (element) => isCallExpression(element) && isIdentifier(element.callee) && element.callee.name === 'starlight',
97 | )
98 |
99 | if (!starlightIntegration || !isCallExpression(starlightIntegration)) {
100 | throw new Error('Failed to find the `starlight` integration in the Astro configuration.')
101 | }
102 |
103 | const config = starlightIntegration.arguments[0]
104 |
105 | if (!isObjectExpression(config)) {
106 | throw new Error(
107 | 'The first argument of the `starlight` integration must be an object containing the Starlight configuration.',
108 | )
109 | }
110 |
111 | starlightConfig = config
112 | },
113 | })
114 |
115 | if (!starlightConfig) {
116 | throw new Error('Failed to find Starlight configuration in the Astro configuration file.')
117 | }
118 |
119 | return starlightConfig
120 | }
121 |
122 | async function getStarlightLocalesConfig(ast: File, starlightConfig: ObjectExpression, readJSON: JSONReader) {
123 | const localesProperty = starlightConfig.properties.find(
124 | (property) =>
125 | isObjectProperty(property) &&
126 | ((isIdentifier(property.key) && property.key.name === 'locales') ||
127 | (isStringLiteral(property.key) && property.key.value === 'locales')),
128 | )
129 |
130 | if (
131 | !localesProperty ||
132 | !isObjectProperty(localesProperty) ||
133 | (!isObjectExpression(localesProperty.value) && !isIdentifier(localesProperty.value))
134 | ) {
135 | throw new Error('Failed to find locales in Starlight configuration.')
136 | }
137 |
138 | const localesObjectExpression = isIdentifier(localesProperty.value)
139 | ? await getObjectExpressionFromIdentifier(ast, localesProperty.value, readJSON)
140 | : localesProperty.value
141 |
142 | if (!localesObjectExpression) {
143 | throw new Error('Failed to find valid locales configuration in Starlight configuration.')
144 | }
145 |
146 | const localesConfig: LocalesConfig['locales'] = {}
147 |
148 | for (const property of localesObjectExpression.properties) {
149 | if (!isObjectProperty(property)) {
150 | continue
151 | }
152 |
153 | const name = getObjectPropertyName(property)
154 |
155 | if (!name || !isObjectExpression(property.value)) {
156 | continue
157 | }
158 |
159 | const localeConfig: Record = {}
160 |
161 | for (const localeProperty of property.value.properties) {
162 | if (!isObjectProperty(localeProperty)) {
163 | continue
164 | }
165 |
166 | const localePropertyName = getObjectPropertyName(localeProperty)
167 |
168 | if (!localePropertyName || !isStringLiteral(localeProperty.value)) {
169 | continue
170 | }
171 |
172 | localeConfig[localePropertyName] = localeProperty.value.value
173 | }
174 |
175 | if (isLocaleObject(localeConfig)) {
176 | localesConfig[name] = localeConfig
177 | }
178 | }
179 |
180 | return localesConfig
181 | }
182 |
183 | function getStarlightDefaultLocaleConfig(starlightConfig: ObjectExpression) {
184 | const defaultLocale = starlightConfig.properties.find(
185 | (property) =>
186 | isObjectProperty(property) &&
187 | ((isIdentifier(property.key) && property.key.name === 'defaultLocale') ||
188 | (isStringLiteral(property.key) && property.key.value === 'defaultLocale')),
189 | )
190 |
191 | return defaultLocale && isObjectProperty(defaultLocale) && isStringLiteral(defaultLocale.value)
192 | ? defaultLocale.value.value
193 | : undefined
194 | }
195 |
196 | async function getObjectExpressionFromIdentifier(ast: File, identifier: Identifier, readJSON: JSONReader) {
197 | let objectExpression: ObjectExpression | undefined
198 |
199 | for (const bodyNode of ast.program.body) {
200 | const variableDeclaration = isVariableDeclaration(bodyNode)
201 | ? bodyNode
202 | : isExportNamedDeclaration(bodyNode) && isVariableDeclaration(bodyNode.declaration)
203 | ? bodyNode.declaration
204 | : undefined
205 |
206 | if (isImportDeclaration(bodyNode)) {
207 | const jsonObjectExpression = await tryGetObjectExpressionFromJSONImport(readJSON, identifier, bodyNode)
208 |
209 | if (jsonObjectExpression) {
210 | return jsonObjectExpression
211 | }
212 | }
213 |
214 | if (!variableDeclaration) {
215 | continue
216 | }
217 |
218 | for (const declaration of variableDeclaration.declarations) {
219 | if (
220 | isIdentifier(declaration.id) &&
221 | declaration.id.name === identifier.name &&
222 | isObjectExpression(declaration.init)
223 | ) {
224 | objectExpression = declaration.init
225 | }
226 | }
227 | }
228 |
229 | return objectExpression
230 | }
231 |
232 | function isLocaleObject(obj: unknown): obj is Locale {
233 | return typeof obj === 'object' && obj !== null && typeof (obj as Locale).label === 'string'
234 | }
235 |
236 | function getObjectPropertyName(property: ObjectProperty) {
237 | return isIdentifier(property.key) ? property.key.name : isStringLiteral(property.key) ? property.key.value : undefined
238 | }
239 |
240 | async function tryGetObjectExpressionFromJSONImport(
241 | readJSON: JSONReader,
242 | identifier: Identifier,
243 | importDeclaration: ImportDeclaration,
244 | ) {
245 | const identifierDefaultSPecifier = importDeclaration.specifiers.find(
246 | (specifier) => isImportDefaultSpecifier(specifier) && specifier.local.name === identifier.name,
247 | )
248 |
249 | if (!identifierDefaultSPecifier) {
250 | return
251 | }
252 |
253 | const source = importDeclaration.source.value
254 |
255 | if (!source.endsWith('.json') || !source.startsWith('.')) {
256 | return
257 | }
258 |
259 | const jsonStr = await readJSON(source)
260 |
261 | if (jsonStr.trim().length === 0) {
262 | throw new Error('The imported JSON locales configuration is empty.')
263 | }
264 |
265 | try {
266 | const jsonAST = parse(`export default ${jsonStr}`, { sourceType: 'unambiguous', plugins: ['typescript'] })
267 |
268 | if (jsonAST.errors.length > 0) {
269 | throw new Error(`The imported JSON locales configuration contains errors.`)
270 | }
271 |
272 | if (
273 | jsonAST.program.body.length !== 1 ||
274 | !isExportDefaultDeclaration(jsonAST.program.body[0]) ||
275 | !isObjectExpression(jsonAST.program.body[0].declaration)
276 | ) {
277 | return
278 | }
279 |
280 | return jsonAST.program.body[0].declaration
281 | } catch (error) {
282 | throw new Error('Failed to parse imported JSON locales configuration.', { cause: error })
283 | }
284 | }
285 |
286 | type JSONReader = (relativePath: string) => Promise
287 |
--------------------------------------------------------------------------------
/src/libs/config.ts:
--------------------------------------------------------------------------------
1 | import { dirname } from 'node:path'
2 |
3 | import { FileType, Uri, workspace, type WorkspaceFolder } from 'vscode'
4 |
5 | import { getStarlightLocalesConfigFromCode } from './ast'
6 |
7 | // https://docs.astro.build/en/guides/configuring-astro/#supported-config-file-types
8 | const configFileNames = new Set(['astro.config.mjs', 'astro.config.ts', 'astro.config.cjs', 'astro.config.js'])
9 |
10 | export async function getStarlightUris(
11 | workspaceFolder: WorkspaceFolder,
12 | configDirectories: string[],
13 | ): Promise {
14 | const config = await getAstroConfigUri(workspaceFolder, configDirectories)
15 |
16 | if (!config) {
17 | return
18 | }
19 |
20 | return {
21 | config,
22 | content: Uri.joinPath(Uri.file(dirname(config.fsPath)), 'src', 'content', 'docs'),
23 | workspace: workspaceFolder.uri,
24 | }
25 | }
26 |
27 | async function getAstroConfigUri(workspaceFolder: WorkspaceFolder, configDirectories: string[]) {
28 | for (const configDirectory of configDirectories) {
29 | const uri = Uri.joinPath(workspaceFolder.uri, configDirectory)
30 |
31 | try {
32 | const entries = await workspace.fs.readDirectory(uri)
33 |
34 | for (const [name, type] of entries) {
35 | if (type === FileType.File && configFileNames.has(name)) {
36 | return Uri.joinPath(uri, name)
37 | }
38 | }
39 | } catch {
40 | // We can safely ignore errors related to missing directories.
41 | }
42 | }
43 |
44 | return undefined
45 | }
46 |
47 | export async function getStarlightLocalesConfig(configUri: Uri): Promise {
48 | const configData = await workspace.fs.readFile(configUri)
49 | const configStr = Buffer.from(configData).toString('utf8')
50 |
51 | return getStarlightLocalesConfigFromCode(configStr, async (relativePath) => {
52 | try {
53 | const jsonData = await workspace.fs.readFile(Uri.joinPath(Uri.joinPath(configUri, '..'), relativePath))
54 |
55 | return Buffer.from(jsonData).toString('utf8')
56 | } catch {
57 | throw new Error('Failed to read imported JSON locales configuration.')
58 | }
59 | })
60 | }
61 |
62 | export interface Locale {
63 | label: string
64 | lang?: string
65 | }
66 |
67 | export interface LocalesConfig {
68 | defaultLocale: string
69 | locales: Record
70 | }
71 |
72 | export interface StarlightUris {
73 | config: Uri
74 | content: Uri
75 | workspace: Uri
76 | }
77 |
--------------------------------------------------------------------------------
/src/libs/content.ts:
--------------------------------------------------------------------------------
1 | import { relative } from 'node:path'
2 |
3 | import { type Uri, workspace } from 'vscode'
4 |
5 | import type { Locale, LocalesConfig, StarlightUris } from './config'
6 | import { getFileChanges, type GitFileChanges } from './git'
7 |
8 | // https://github.com/withastro/astro/blob/c23ddb9ab31c34633b3a0f163fd4c24c852073de/packages/astro/src/core/constants.ts#L5
9 | // https://github.com/withastro/astro/blob/c23ddb9ab31c34633b3a0f163fd4c24c852073de/packages/astro/src/core/errors/dev/vite.ts#L126
10 | const contentExtensions = ['md', 'mdx', 'mdoc', 'markdown', 'mdown', 'mkdn', 'mkd', 'mdwn']
11 |
12 | export async function getContentPagesStatuses(uris: StarlightUris, localesConfig: LocalesConfig) {
13 | const pages = await getContentPagesByLocale(uris, localesConfig)
14 | const defaultLocalePages = pages[localesConfig.defaultLocale]
15 |
16 | if (!defaultLocalePages) {
17 | throw new Error('Failed to find content pages matching the default locale.')
18 | }
19 |
20 | const statuses: PageStatusesByLocale = {}
21 |
22 | for (const [localeDirectory, locale] of Object.entries(localesConfig.locales)) {
23 | if (localeDirectory === localesConfig.defaultLocale) {
24 | continue
25 | }
26 |
27 | statuses[localeDirectory] = { locale, statuses: [] }
28 |
29 | for (const [id, page] of Object.entries(defaultLocalePages)) {
30 | const translatedPage = pages[localeDirectory]?.[id]
31 | statuses[localeDirectory]?.statuses.push({
32 | missing: !translatedPage,
33 | outdated: translatedPage !== undefined && page.changes.previous.date > translatedPage.changes.previous.date,
34 | page: translatedPage,
35 | source: page,
36 | })
37 | }
38 | }
39 |
40 | return statuses
41 | }
42 |
43 | export async function getPageRawFrontmatter(page: Uri) {
44 | const data = await workspace.fs.readFile(page)
45 | const content = Buffer.from(data).toString('utf8')
46 | const matches = content.match(/^(---\n[\S\s]*?\n---)\n/)
47 |
48 | return matches ? matches[1] : ''
49 | }
50 |
51 | async function getContentPagesByLocale(uris: StarlightUris, localesConfig: LocalesConfig) {
52 | const pages = await getContentPages(uris, localesConfig)
53 | const pagesByLocale: Record> = {}
54 |
55 | for (const page of pages) {
56 | const localeDirectory = page.localeDirectory ?? localesConfig.defaultLocale
57 | const localePages = pagesByLocale[localeDirectory] ?? {}
58 |
59 | localePages[page.id] = page
60 | pagesByLocale[localeDirectory] = localePages
61 | }
62 |
63 | return pagesByLocale
64 | }
65 |
66 | async function getContentPages(uris: StarlightUris, localesConfig: LocalesConfig): Promise {
67 | const files = await workspace.findFiles(
68 | `${relative(uris.workspace.fsPath, uris.content.fsPath)}/**/*.{${contentExtensions.join(',')}}`,
69 | null,
70 | )
71 |
72 | const allLocales = Object.entries(localesConfig.locales)
73 |
74 | return Promise.all(
75 | files.map(async (file) => {
76 | const relativePath = relative(uris.content.fsPath, file.fsPath)
77 | const [localeDirectory, ...localeId] = relativePath.split('/')
78 | const localeEntry = allLocales.find(([directory]) => directory === localeDirectory)
79 | const changes = await getFileChanges(file)
80 |
81 | const isDefaultLocalePageWithNoRootLocale = !localeEntry && localeDirectory === localesConfig.defaultLocale
82 |
83 | const id = localeEntry
84 | ? localeId.join('/')
85 | : isDefaultLocalePageWithNoRootLocale
86 | ? relativePath.replace(`${localeDirectory}/`, '')
87 | : relativePath
88 |
89 | return {
90 | changes,
91 | file,
92 | id,
93 | locale: localeEntry ? localeEntry[1] : undefined,
94 | localeDirectory: localeEntry ? localeDirectory : undefined,
95 | }
96 | }),
97 | )
98 | }
99 |
100 | interface Page {
101 | changes: GitFileChanges
102 | file: Uri
103 | id: string
104 | locale: Locale | undefined
105 | localeDirectory: string | undefined
106 | }
107 |
108 | export interface PageStatus {
109 | missing: boolean
110 | outdated: boolean
111 | page: Page | undefined
112 | source: Page
113 | }
114 |
115 | export type PageStatusesByLocale = Record<
116 | string,
117 | {
118 | locale: Locale
119 | statuses: PageStatus[]
120 | }
121 | >
122 |
--------------------------------------------------------------------------------
/src/libs/git.ts:
--------------------------------------------------------------------------------
1 | import type { Uri } from 'vscode'
2 |
3 | import type { Commit, Repository } from '../vscode.git'
4 |
5 | import { getGitExtension } from './vsc'
6 |
7 | // https://github.com/withastro/starlight/blob/def71050fbdb9ae514b0a7c24ed2455f055fe6bd/docs-i18n-tracker/lib/translation-status/builder.ts#L13
8 | const ignoredCommitPattern = /(en-only|typo|broken link|i18nready|i18nignore)/i
9 |
10 | export async function getFileChanges(file: Uri): Promise {
11 | const repo = await getRepository()
12 | const commits = await repo.log({ path: file.fsPath })
13 | const lastCommit = commits[0]
14 |
15 | if (!lastCommit) {
16 | throw new Error(`Failed to find the last commit for the file at '${file.fsPath}'.`)
17 | }
18 |
19 | const previousCommit =
20 | commits.find((commit) => !ignoredCommitPattern.test(commit.message.split('\n')[0] ?? '')) ?? lastCommit
21 |
22 | if (!lastCommit.commitDate || !previousCommit.commitDate) {
23 | throw new Error(`Failed to find commit dates for the file at '${file.fsPath}'.`)
24 | }
25 |
26 | return {
27 | last: {
28 | date: lastCommit.commitDate,
29 | ref: lastCommit.hash,
30 | },
31 | previous: {
32 | date: previousCommit.commitDate,
33 | ref: previousCommit.hash,
34 | },
35 | }
36 | }
37 |
38 | export async function getGitUri(file: Uri, ref: string) {
39 | const git = await getGitExtension()
40 |
41 | return git.toGitUri(file, ref)
42 | }
43 |
44 | export async function getCommitBeforeDate(file: Uri, date: Date) {
45 | const repo = await getRepository()
46 | const commits = await repo.log({ path: file.fsPath })
47 |
48 | let currentCommit: Commit | undefined
49 |
50 | for (const commit of commits) {
51 | if (!commit.commitDate) {
52 | continue
53 | }
54 |
55 | currentCommit = commit
56 |
57 | if (commit.commitDate < date) {
58 | break
59 | }
60 | }
61 |
62 | return currentCommit
63 | }
64 |
65 | async function getRepository(): Promise {
66 | const git = await getGitExtension()
67 | const repo = git.repositories[0]
68 |
69 | if (git.repositories.length === 1 && repo) {
70 | return repo
71 | }
72 |
73 | throw new Error('Failed to find a unique git repository.')
74 | }
75 |
76 | export interface GitFileChanges {
77 | last: GitFileChange
78 | previous: GitFileChange
79 | }
80 |
81 | interface GitFileChange {
82 | date: Date
83 | ref: string
84 | }
85 |
--------------------------------------------------------------------------------
/src/libs/translation.ts:
--------------------------------------------------------------------------------
1 | import {
2 | commands,
3 | type Disposable,
4 | type QuickPick,
5 | type QuickPickItem,
6 | QuickPickItemKind,
7 | ThemeIcon,
8 | Uri,
9 | ViewColumn,
10 | window,
11 | workspace,
12 | } from 'vscode'
13 |
14 | import type { Locale, StarlightUris } from './config'
15 | import { getPageRawFrontmatter, type PageStatus, type PageStatusesByLocale } from './content'
16 | import { getCommitBeforeDate, getGitUri } from './git'
17 |
18 | export async function pickTranslation(
19 | getStatuses: () => Promise,
20 | ): Promise {
21 | const disposables: Disposable[] = []
22 |
23 | const picker: TranslationPicker = window.createQuickPick()
24 | picker.title = 'Starlight i18n'
25 | picker.enabled = false
26 | picker.busy = true
27 | picker.ignoreFocusOut = true
28 | picker.placeholder = 'Collecting page translations status…'
29 | picker.step = 1
30 | picker.totalSteps = 2
31 |
32 | try {
33 | // eslint-disable-next-line no-async-promise-executor
34 | return await new Promise(async (resolve, reject) => {
35 | function closePicker() {
36 | resolve(undefined)
37 | }
38 |
39 | disposables.push(
40 | picker.onDidAccept(() => {
41 | const item = picker.selectedItems[0]
42 |
43 | if (isLocaleQuickPickItem(item)) {
44 | onPickLocale(picker, item, async () => {
45 | closePicker()
46 | await window.showInformationMessage(`Nothing left to translate in ${item.label} 🎉`, {
47 | modal: true,
48 | })
49 | })
50 | } else if (isStatusQuickPickItem(item)) {
51 | resolve({ locale: item.locale, localeDirectory: item.localeDirectory, status: item.status })
52 | } else {
53 | closePicker()
54 | }
55 | }),
56 | )
57 |
58 | picker.show()
59 |
60 | try {
61 | const statuses = await getStatuses()
62 |
63 | picker.items = Object.entries(statuses).map(([localeDirectory, { locale, statuses }]) => ({
64 | description: locale.lang ?? localeDirectory,
65 | label: locale.label,
66 | locale,
67 | localeDirectory,
68 | statuses,
69 | }))
70 | } catch (error) {
71 | reject(error)
72 | return
73 | }
74 |
75 | picker.busy = false
76 | picker.enabled = true
77 | picker.placeholder = 'Select a locale to translate'
78 | })
79 | } finally {
80 | picker.dispose()
81 |
82 | for (const disposable of disposables) {
83 | disposable.dispose()
84 | }
85 | }
86 | }
87 |
88 | export function prepareTranslation(uris: StarlightUris, translation: Translation) {
89 | return translation.status.missing
90 | ? prepareMissingTranslation(translation, uris)
91 | : prepareOutdatedTranslation(translation)
92 | }
93 |
94 | function onPickLocale(picker: TranslationPicker, localeItem: LocaleQuickPickItem, closePicker: () => void) {
95 | const missing: PageStatus[] = []
96 | const outdated: PageStatus[] = []
97 |
98 | for (const status of localeItem.statuses) {
99 | if (status.missing) {
100 | missing.push(status)
101 | } else if (status.outdated) {
102 | outdated.push(status)
103 | }
104 | }
105 |
106 | const done = missing.length === 0 && outdated.length === 0
107 |
108 | if (done) {
109 | closePicker()
110 | return
111 | }
112 |
113 | picker.items = [
114 | ...createStatusesQuickPickItem(outdated, localeItem, 'Outdated', 'extensions-sync-enabled'),
115 | ...createStatusesQuickPickItem(missing, localeItem, 'Missing', 'diff-insert'),
116 | ]
117 |
118 | picker.value = ''
119 | picker.placeholder = 'Select a page to translate'
120 | picker.step = 2
121 | }
122 |
123 | function createStatusesQuickPickItem(
124 | statuses: PageStatus[],
125 | locale: LocaleQuickPickItem,
126 | label: string,
127 | icon: string,
128 | ): (StatusQuickPickItem | SeparatorQuickPickItem)[] {
129 | return [
130 | ...(statuses.length > 0 ? [{ kind: QuickPickItemKind.Separator, label } as SeparatorQuickPickItem] : []),
131 | ...statuses.map((status) => ({
132 | ...locale,
133 | iconPath: new ThemeIcon(icon),
134 | label: status.source.id,
135 | status,
136 | })),
137 | ]
138 | }
139 |
140 | async function prepareMissingTranslation({ localeDirectory, status }: Translation, uris: StarlightUris) {
141 | const sourceFrontmatter = await getPageRawFrontmatter(status.source.file)
142 | const translationUri = Uri.joinPath(uris.content, localeDirectory, status.source.id)
143 |
144 | await workspace.fs.writeFile(translationUri, new TextEncoder().encode(`${sourceFrontmatter}\n\n`))
145 |
146 | await window.showTextDocument(status.source.file, { viewColumn: ViewColumn.One })
147 | await window.showTextDocument(translationUri, { preview: false, viewColumn: ViewColumn.Two })
148 | }
149 |
150 | async function prepareOutdatedTranslation({ status }: Translation) {
151 | if (!status.page) {
152 | throw new Error('Missing page reference to prepare outdated translation.')
153 | }
154 |
155 | const referenceCommit = await getCommitBeforeDate(status.source.file, status.page.changes.last.date)
156 |
157 | if (!referenceCommit) {
158 | throw new Error(`Failed to find the reference commit to translate '${status.source.id}'.`)
159 | }
160 |
161 | const lastGitUri = await getGitUri(status.source.file, status.source.changes.last.ref)
162 | const referenceGitUri = await getGitUri(status.source.file, referenceCommit.hash)
163 |
164 | await commands.executeCommand('vscode.diff', referenceGitUri, lastGitUri, undefined, { viewColumn: ViewColumn.One })
165 | await window.showTextDocument(status.page.file, { preview: false, viewColumn: ViewColumn.Two })
166 | }
167 |
168 | function isLocaleQuickPickItem(item: unknown): item is LocaleQuickPickItem {
169 | return typeof item === 'object' && item !== null && 'locale' in item && !('status' in item)
170 | }
171 |
172 | function isStatusQuickPickItem(item: unknown): item is StatusQuickPickItem {
173 | return typeof item === 'object' && item !== null && 'status' in item
174 | }
175 |
176 | interface Translation {
177 | locale: Locale
178 | localeDirectory: string
179 | status: PageStatus
180 | }
181 |
182 | interface LocaleQuickPickItem extends QuickPickItem {
183 | locale: Locale
184 | localeDirectory: string
185 | statuses: PageStatus[]
186 | }
187 |
188 | interface StatusQuickPickItem extends LocaleQuickPickItem {
189 | status: PageStatus
190 | }
191 |
192 | interface SeparatorQuickPickItem extends QuickPickItem {
193 | kind: QuickPickItemKind.Separator
194 | }
195 |
196 | type TranslationPickerItem = LocaleQuickPickItem | StatusQuickPickItem | SeparatorQuickPickItem
197 | type TranslationPicker = QuickPick
198 |
--------------------------------------------------------------------------------
/src/libs/vsc.ts:
--------------------------------------------------------------------------------
1 | import { extensions, type WorkspaceFolder } from 'vscode'
2 |
3 | import type { API as GitAPI, GitExtension } from '../vscode.git'
4 |
5 | let gitAPI: GitAPI | undefined
6 |
7 | export function isWorkspaceWithSingleFolder(
8 | workspaceFolders: readonly WorkspaceFolder[] | undefined,
9 | ): workspaceFolders is readonly [WorkspaceFolder] {
10 | return workspaceFolders !== undefined && workspaceFolders.length === 1
11 | }
12 |
13 | export async function getGitExtension(): Promise {
14 | if (gitAPI) {
15 | return gitAPI
16 | }
17 |
18 | const extension = extensions.getExtension('vscode.git')
19 |
20 | if (!extension) {
21 | throw new Error('Unable to load Git extension.')
22 | }
23 |
24 | const gitExtension = extension.isActive ? extension.exports : await extension.activate()
25 | gitAPI = gitExtension.getAPI(1)
26 |
27 | return gitAPI
28 | }
29 |
--------------------------------------------------------------------------------
/src/vscode.git.d.ts:
--------------------------------------------------------------------------------
1 | // https://github.com/microsoft/vscode/blob/244e9c2da02e873f5cc7f8dc6814eed53a175f3c/extensions/git/src/api/git.d.ts
2 |
3 | /*---------------------------------------------------------------------------------------------
4 | * Copyright (c) Microsoft Corporation. All rights reserved.
5 | * Licensed under the MIT License. See License.txt in the project root for license information.
6 | *--------------------------------------------------------------------------------------------*/
7 |
8 | import type { Uri, Event, Disposable, ProviderResult, Command, CancellationToken } from 'vscode'
9 | export { ProviderResult } from 'vscode'
10 |
11 | export interface Git {
12 | readonly path: string
13 | }
14 |
15 | export interface InputBox {
16 | value: string
17 | }
18 |
19 | export const enum ForcePushMode {
20 | Force,
21 | ForceWithLease,
22 | }
23 |
24 | export const enum RefType {
25 | Head,
26 | RemoteHead,
27 | Tag,
28 | }
29 |
30 | export interface Ref {
31 | readonly type: RefType
32 | readonly name?: string
33 | readonly commit?: string
34 | readonly remote?: string
35 | }
36 |
37 | export interface UpstreamRef {
38 | readonly remote: string
39 | readonly name: string
40 | }
41 |
42 | export interface Branch extends Ref {
43 | readonly upstream?: UpstreamRef
44 | readonly ahead?: number
45 | readonly behind?: number
46 | }
47 |
48 | export interface Commit {
49 | readonly hash: string
50 | readonly message: string
51 | readonly parents: string[]
52 | readonly authorDate?: Date
53 | readonly authorName?: string
54 | readonly authorEmail?: string
55 | readonly commitDate?: Date
56 | }
57 |
58 | export interface Submodule {
59 | readonly name: string
60 | readonly path: string
61 | readonly url: string
62 | }
63 |
64 | export interface Remote {
65 | readonly name: string
66 | readonly fetchUrl?: string
67 | readonly pushUrl?: string
68 | readonly isReadOnly: boolean
69 | }
70 |
71 | export const enum Status {
72 | INDEX_MODIFIED,
73 | INDEX_ADDED,
74 | INDEX_DELETED,
75 | INDEX_RENAMED,
76 | INDEX_COPIED,
77 |
78 | MODIFIED,
79 | DELETED,
80 | UNTRACKED,
81 | IGNORED,
82 | INTENT_TO_ADD,
83 | INTENT_TO_RENAME,
84 | TYPE_CHANGED,
85 |
86 | ADDED_BY_US,
87 | ADDED_BY_THEM,
88 | DELETED_BY_US,
89 | DELETED_BY_THEM,
90 | BOTH_ADDED,
91 | BOTH_DELETED,
92 | BOTH_MODIFIED,
93 | }
94 |
95 | export interface Change {
96 | /**
97 | * Returns either `originalUri` or `renameUri`, depending
98 | * on whether this change is a rename change. When
99 | * in doubt always use `uri` over the other two alternatives.
100 | */
101 | readonly uri: Uri
102 | readonly originalUri: Uri
103 | readonly renameUri: Uri | undefined
104 | readonly status: Status
105 | }
106 |
107 | export interface RepositoryState {
108 | readonly HEAD: Branch | undefined
109 | readonly refs: Ref[]
110 | readonly remotes: Remote[]
111 | readonly submodules: Submodule[]
112 | readonly rebaseCommit: Commit | undefined
113 |
114 | readonly mergeChanges: Change[]
115 | readonly indexChanges: Change[]
116 | readonly workingTreeChanges: Change[]
117 |
118 | readonly onDidChange: Event
119 | }
120 |
121 | export interface RepositoryUIState {
122 | readonly selected: boolean
123 | readonly onDidChange: Event
124 | }
125 |
126 | /**
127 | * Log options.
128 | */
129 | export interface LogOptions {
130 | /** Max number of log entries to retrieve. If not specified, the default is 32. */
131 | readonly maxEntries?: number
132 | readonly path?: string
133 | /** A commit range, such as "0a47c67f0fb52dd11562af48658bc1dff1d75a38..0bb4bdea78e1db44d728fd6894720071e303304f" */
134 | readonly range?: string
135 | }
136 |
137 | export interface CommitOptions {
138 | all?: boolean | 'tracked'
139 | amend?: boolean
140 | signoff?: boolean
141 | signCommit?: boolean
142 | empty?: boolean
143 | noVerify?: boolean
144 | requireUserConfig?: boolean
145 | useEditor?: boolean
146 | verbose?: boolean
147 | /**
148 | * string - execute the specified command after the commit operation
149 | * undefined - execute the command specified in git.postCommitCommand
150 | * after the commit operation
151 | * null - do not execute any command after the commit operation
152 | */
153 | postCommitCommand?: string | null
154 | }
155 |
156 | export interface FetchOptions {
157 | remote?: string
158 | ref?: string
159 | all?: boolean
160 | prune?: boolean
161 | depth?: number
162 | }
163 |
164 | export interface InitOptions {
165 | defaultBranch?: string
166 | }
167 |
168 | export interface RefQuery {
169 | readonly contains?: string
170 | readonly count?: number
171 | readonly pattern?: string
172 | readonly sort?: 'alphabetically' | 'committerdate'
173 | }
174 |
175 | export interface BranchQuery extends RefQuery {
176 | readonly remote?: boolean
177 | }
178 |
179 | export interface Repository {
180 | readonly rootUri: Uri
181 | readonly inputBox: InputBox
182 | readonly state: RepositoryState
183 | readonly ui: RepositoryUIState
184 |
185 | getConfigs(): Promise<{ key: string; value: string }[]>
186 | getConfig(key: string): Promise
187 | setConfig(key: string, value: string): Promise
188 | getGlobalConfig(key: string): Promise
189 |
190 | getObjectDetails(treeish: string, path: string): Promise<{ mode: string; object: string; size: number }>
191 | detectObjectType(object: string): Promise<{ mimetype: string; encoding?: string }>
192 | buffer(ref: string, path: string): Promise
193 | show(ref: string, path: string): Promise
194 | getCommit(ref: string): Promise
195 |
196 | add(paths: string[]): Promise
197 | revert(paths: string[]): Promise
198 | clean(paths: string[]): Promise
199 |
200 | apply(patch: string, reverse?: boolean): Promise
201 | diff(cached?: boolean): Promise
202 | diffWithHEAD(): Promise
203 | diffWithHEAD(path: string): Promise
204 | diffWith(ref: string): Promise
205 | diffWith(ref: string, path: string): Promise
206 | diffIndexWithHEAD(): Promise
207 | diffIndexWithHEAD(path: string): Promise
208 | diffIndexWith(ref: string): Promise
209 | diffIndexWith(ref: string, path: string): Promise
210 | diffBlobs(object1: string, object2: string): Promise
211 | diffBetween(ref1: string, ref2: string): Promise
212 | diffBetween(ref1: string, ref2: string, path: string): Promise
213 |
214 | hashObject(data: string): Promise
215 |
216 | createBranch(name: string, checkout: boolean, ref?: string): Promise
217 | deleteBranch(name: string, force?: boolean): Promise
218 | getBranch(name: string): Promise
219 | getBranches(query: BranchQuery, cancellationToken?: CancellationToken): Promise[
220 | setBranchUpstream(name: string, upstream: string): Promise
221 |
222 | getRefs(query: RefQuery, cancellationToken?: CancellationToken): Promise][
223 |
224 | getMergeBase(ref1: string, ref2: string): Promise
225 |
226 | tag(name: string, upstream: string): Promise
227 | deleteTag(name: string): Promise
228 |
229 | status(): Promise
230 | checkout(treeish: string): Promise
231 |
232 | addRemote(name: string, url: string): Promise
233 | removeRemote(name: string): Promise
234 | renameRemote(name: string, newName: string): Promise
235 |
236 | fetch(options?: FetchOptions): Promise
237 | fetch(remote?: string, ref?: string, depth?: number): Promise
238 | pull(unshallow?: boolean): Promise
239 | push(remoteName?: string, branchName?: string, setUpstream?: boolean, force?: ForcePushMode): Promise
240 |
241 | blame(path: string): Promise
242 | log(options?: LogOptions): Promise
243 |
244 | commit(message: string, opts?: CommitOptions): Promise
245 | }
246 |
247 | export interface RemoteSource {
248 | readonly name: string
249 | readonly description?: string
250 | readonly url: string | string[]
251 | }
252 |
253 | export interface RemoteSourceProvider {
254 | readonly name: string
255 | readonly icon?: string // codicon name
256 | readonly supportsQuery?: boolean
257 | getRemoteSources(query?: string): ProviderResult
258 | getBranches?(url: string): ProviderResult
259 | publishRepository?(repository: Repository): Promise
260 | }
261 |
262 | export interface RemoteSourcePublisher {
263 | readonly name: string
264 | readonly icon?: string // codicon name
265 | publishRepository(repository: Repository): Promise
266 | }
267 |
268 | export interface Credentials {
269 | readonly username: string
270 | readonly password: string
271 | }
272 |
273 | export interface CredentialsProvider {
274 | getCredentials(host: Uri): ProviderResult
275 | }
276 |
277 | export interface PostCommitCommandsProvider {
278 | getCommands(repository: Repository): Command[]
279 | }
280 |
281 | export interface PushErrorHandler {
282 | handlePushError(
283 | repository: Repository,
284 | remote: Remote,
285 | refspec: string,
286 | error: Error & { gitErrorCode: GitErrorCodes },
287 | ): Promise
288 | }
289 |
290 | export interface BranchProtection {
291 | readonly remote: string
292 | readonly rules: BranchProtectionRule[]
293 | }
294 |
295 | export interface BranchProtectionRule {
296 | readonly include?: string[]
297 | readonly exclude?: string[]
298 | }
299 |
300 | export interface BranchProtectionProvider {
301 | onDidChangeBranchProtection: Event
302 | provideBranchProtection(): BranchProtection[]
303 | }
304 |
305 | export type APIState = 'uninitialized' | 'initialized'
306 |
307 | export interface PublishEvent {
308 | repository: Repository
309 | branch?: string
310 | }
311 |
312 | export interface API {
313 | readonly state: APIState
314 | readonly onDidChangeState: Event
315 | readonly onDidPublish: Event
316 | readonly git: Git
317 | readonly repositories: Repository[]
318 | readonly onDidOpenRepository: Event
319 | readonly onDidCloseRepository: Event
320 |
321 | toGitUri(uri: Uri, ref: string): Uri
322 | getRepository(uri: Uri): Repository | null
323 | init(root: Uri, options?: InitOptions): Promise
324 | openRepository(root: Uri): Promise
325 |
326 | registerRemoteSourcePublisher(publisher: RemoteSourcePublisher): Disposable
327 | registerRemoteSourceProvider(provider: RemoteSourceProvider): Disposable
328 | registerCredentialsProvider(provider: CredentialsProvider): Disposable
329 | registerPostCommitCommandsProvider(provider: PostCommitCommandsProvider): Disposable
330 | registerPushErrorHandler(handler: PushErrorHandler): Disposable
331 | registerBranchProtectionProvider(root: Uri, provider: BranchProtectionProvider): Disposable
332 | }
333 |
334 | export interface GitExtension {
335 | readonly enabled: boolean
336 | readonly onDidChangeEnablement: Event
337 |
338 | /**
339 | * Returns a specific API version.
340 | *
341 | * Throws error if git extension is disabled. You can listen to the
342 | * [GitExtension.onDidChangeEnablement](#GitExtension.onDidChangeEnablement) event
343 | * to know when the extension becomes enabled/disabled.
344 | *
345 | * @param version Version number.
346 | * @returns API instance
347 | */
348 | getAPI(version: 1): API
349 | }
350 |
351 | export const enum GitErrorCodes {
352 | BadConfigFile = 'BadConfigFile',
353 | AuthenticationFailed = 'AuthenticationFailed',
354 | NoUserNameConfigured = 'NoUserNameConfigured',
355 | NoUserEmailConfigured = 'NoUserEmailConfigured',
356 | NoRemoteRepositorySpecified = 'NoRemoteRepositorySpecified',
357 | NotAGitRepository = 'NotAGitRepository',
358 | NotAtRepositoryRoot = 'NotAtRepositoryRoot',
359 | Conflict = 'Conflict',
360 | StashConflict = 'StashConflict',
361 | UnmergedChanges = 'UnmergedChanges',
362 | PushRejected = 'PushRejected',
363 | RemoteConnectionError = 'RemoteConnectionError',
364 | DirtyWorkTree = 'DirtyWorkTree',
365 | CantOpenResource = 'CantOpenResource',
366 | GitNotFound = 'GitNotFound',
367 | CantCreatePipe = 'CantCreatePipe',
368 | PermissionDenied = 'PermissionDenied',
369 | CantAccessRemote = 'CantAccessRemote',
370 | RepositoryNotFound = 'RepositoryNotFound',
371 | RepositoryIsLocked = 'RepositoryIsLocked',
372 | BranchNotFullyMerged = 'BranchNotFullyMerged',
373 | NoRemoteReference = 'NoRemoteReference',
374 | InvalidBranchName = 'InvalidBranchName',
375 | BranchAlreadyExists = 'BranchAlreadyExists',
376 | NoLocalChanges = 'NoLocalChanges',
377 | NoStashFound = 'NoStashFound',
378 | LocalChangesOverwritten = 'LocalChangesOverwritten',
379 | NoUpstreamBranch = 'NoUpstreamBranch',
380 | IsInSubmodule = 'IsInSubmodule',
381 | WrongCase = 'WrongCase',
382 | CantLockRef = 'CantLockRef',
383 | CantRebaseMultipleBranches = 'CantRebaseMultipleBranches',
384 | PatchDoesNotApply = 'PatchDoesNotApply',
385 | NoPathFound = 'NoPathFound',
386 | UnknownPath = 'UnknownPath',
387 | EmptyCommitMessage = 'EmptyCommitMessage',
388 | BranchFastForwardRejected = 'BranchFastForwardRejected',
389 | BranchNotYetBorn = 'BranchNotYetBorn',
390 | TagConflict = 'TagConflict',
391 | }
392 |
--------------------------------------------------------------------------------
/tests/ast.test.ts:
--------------------------------------------------------------------------------
1 | import { expect, test, vi } from 'vitest'
2 |
3 | import { getStarlightLocalesConfigFromCode } from '../src/libs/ast'
4 |
5 | const commonLocales = `{
6 | root: { label: 'English', lang: 'en' },
7 | ja: { label: '日本語', lang: 'ja' },
8 | fr: { label: 'Français', lang: 'fr' },
9 | 'pt-br': { label: 'Português do Brasil', lang: 'pt-BR' },
10 | }`
11 |
12 | const expectedCommonLocales = {
13 | fr: {
14 | label: 'Français',
15 | lang: 'fr',
16 | },
17 | ja: {
18 | label: '日本語',
19 | lang: 'ja',
20 | },
21 | 'pt-br': {
22 | label: 'Português do Brasil',
23 | lang: 'pt-BR',
24 | },
25 | }
26 |
27 | test('finds locales inlined in the configuration', async () => {
28 | const config = await getStarlightLocalesTestConfigFromCode(`import { defineConfig } from 'astro/config';
29 | import starlight from '@astrojs/starlight';
30 |
31 | export default defineConfig({
32 | integrations: [
33 | starlight({
34 | title: 'Starlight',
35 | locales: ${commonLocales},
36 | }),
37 | ],
38 | });`)
39 |
40 | expect(config.defaultLocale).toBe('en')
41 | expect(config.locales).toEqual(expectedCommonLocales)
42 | })
43 |
44 | test('finds locales referenced in the configuration', async () => {
45 | const config = await getStarlightLocalesTestConfigFromCode(`import { defineConfig } from 'astro/config';
46 | import starlight from '@astrojs/starlight';
47 |
48 | const locales = ${commonLocales}
49 |
50 | export default defineConfig({
51 | integrations: [
52 | starlight({
53 | title: 'Starlight',
54 | locales,
55 | }),
56 | ],
57 | });`)
58 |
59 | expect(config.defaultLocale).toBe('en')
60 | expect(config.locales).toEqual(expectedCommonLocales)
61 | })
62 |
63 | test('finds locales referenced and exported in the configuration', async () => {
64 | const config = await getStarlightLocalesTestConfigFromCode(`import { defineConfig } from 'astro/config';
65 | import starlight from '@astrojs/starlight';
66 |
67 | export const locales = ${commonLocales}
68 |
69 | export default defineConfig({
70 | integrations: [
71 | starlight({
72 | title: 'Starlight',
73 | locales,
74 | }),
75 | ],
76 | });`)
77 |
78 | expect(config.defaultLocale).toBe('en')
79 | expect(config.locales).toEqual(expectedCommonLocales)
80 | })
81 |
82 | test('throws with no locales configuration', async () => {
83 | await expect(
84 | async () =>
85 | await getStarlightLocalesTestConfigFromCode(`import { defineConfig } from 'astro/config';
86 | import starlight from '@astrojs/starlight';
87 |
88 | export default defineConfig({
89 | integrations: [
90 | starlight({
91 | title: 'Starlight',
92 | }),
93 | ],
94 | });`),
95 | ).rejects.toThrowError('Failed to find locales in Starlight configuration.')
96 | })
97 |
98 | test('throws with no locales to translate', async () => {
99 | await expect(
100 | async () =>
101 | await getStarlightLocalesTestConfigFromCode(`import { defineConfig } from 'astro/config';
102 | import starlight from '@astrojs/starlight';
103 |
104 | export default defineConfig({
105 | integrations: [
106 | starlight({
107 | title: 'Starlight',
108 | locales: {
109 | root: { label: 'English', lang: 'en' },
110 | },
111 | }),
112 | ],
113 | });`),
114 | ).rejects.toThrowError('Failed to find any Starlight locale to translate.')
115 | })
116 |
117 | test('throws with no locales to translate when using the `defaultLocale` property', async () => {
118 | await expect(
119 | async () =>
120 | await getStarlightLocalesTestConfigFromCode(`import { defineConfig } from 'astro/config';
121 | import starlight from '@astrojs/starlight';
122 |
123 | export default defineConfig({
124 | integrations: [
125 | starlight({
126 | title: 'Starlight',
127 | defaultLocale: 'en',
128 | locales: {
129 | en: { label: 'English', lang: 'en' },
130 | },
131 | }),
132 | ],
133 | });`),
134 | ).rejects.toThrowError('Failed to find any Starlight locale to translate.')
135 | })
136 |
137 | test('throws with no default locale', async () => {
138 | await expect(
139 | async () =>
140 | await getStarlightLocalesTestConfigFromCode(`import { defineConfig } from 'astro/config';
141 | import starlight from '@astrojs/starlight';
142 |
143 | export default defineConfig({
144 | integrations: [
145 | starlight({
146 | title: 'Starlight',
147 | locales: {
148 | en: { label: 'English', lang: 'en' },
149 | ja: { label: '日本語', lang: 'ja' },
150 | },
151 | }),
152 | ],
153 | });`),
154 | ).rejects.toThrowError('Failed to find Starlight default locale.')
155 | })
156 |
157 | test('throws with no starlight integration', async () => {
158 | await expect(
159 | async () =>
160 | await getStarlightLocalesTestConfigFromCode(`import { defineConfig } from 'astro/config';
161 | import starlight from '@astrojs/starlight';
162 |
163 | export default defineConfig({
164 | integrations: [],
165 | });`),
166 | ).rejects.toThrowError('Failed to find the `starlight` integration in the Astro configuration.')
167 | })
168 |
169 | test('finds locales imported from a relative JSON file', async () => {
170 | expect.assertions(3)
171 |
172 | const config = await getStarlightLocalesTestConfigFromCode(
173 | `import { defineConfig } from 'astro/config';
174 | import starlight from '@astrojs/starlight';
175 | import locales from './locales.json';
176 |
177 | export default defineConfig({
178 | integrations: [
179 | starlight({
180 | title: 'Starlight',
181 | locales,
182 | }),
183 | ],
184 | });`,
185 | (relativePath) => {
186 | expect(relativePath).toBe('./locales.json')
187 |
188 | return Promise.resolve(commonLocales)
189 | },
190 | )
191 |
192 | expect(config.defaultLocale).toBe('en')
193 | expect(config.locales).toEqual(expectedCommonLocales)
194 | })
195 |
196 | test('throws with empty imported JSON locales configuration', async () => {
197 | await expect(
198 | async () =>
199 | await getStarlightLocalesTestConfigFromCode(
200 | `import { defineConfig } from 'astro/config';
201 | import starlight from '@astrojs/starlight';
202 | import locales from './locales.json';
203 |
204 | export default defineConfig({
205 | integrations: [
206 | starlight({
207 | title: 'Starlight',
208 | locales,
209 | }),
210 | ],
211 | });`,
212 | () => Promise.resolve(''),
213 | ),
214 | ).rejects.toThrowError('The imported JSON locales configuration is empty.')
215 | })
216 |
217 | test('throws with invalid imported JSON locales configuration', async () => {
218 | await expect(
219 | async () =>
220 | await getStarlightLocalesTestConfigFromCode(
221 | `import { defineConfig } from 'astro/config';
222 | import starlight from '@astrojs/starlight';
223 | import locales from './locales.json';
224 |
225 | export default defineConfig({
226 | integrations: [
227 | starlight({
228 | title: 'Starlight',
229 | locales,
230 | }),
231 | ],
232 | });`,
233 | () => Promise.resolve('-'),
234 | ),
235 | ).rejects.toThrowError('Failed to parse imported JSON locales configuration.')
236 | })
237 |
238 | test('does not read non JSON locales configuration', async () => {
239 | const readJSONSpy = vi.fn()
240 |
241 | await expect(
242 | async () =>
243 | await getStarlightLocalesTestConfigFromCode(
244 | `import { defineConfig } from 'astro/config';
245 | import starlight from '@astrojs/starlight';
246 | import locales from './locales.js';
247 |
248 | export default defineConfig({
249 | integrations: [
250 | starlight({
251 | title: 'Starlight',
252 | locales,
253 | }),
254 | ],
255 | });`,
256 | readJSONSpy,
257 | ),
258 | ).rejects.toThrowError('Failed to find valid locales configuration in Starlight configuration.')
259 |
260 | expect(readJSONSpy).not.toHaveBeenCalled()
261 | })
262 |
263 | test('does not read non relative JSON locales configuration', async () => {
264 | const readJSONSpy = vi.fn()
265 |
266 | await expect(
267 | async () =>
268 | await getStarlightLocalesTestConfigFromCode(
269 | `import { defineConfig } from 'astro/config';
270 | import starlight from '@astrojs/starlight';
271 | import locales from 'pkg/locales.json';
272 |
273 | export default defineConfig({
274 | integrations: [
275 | starlight({
276 | title: 'Starlight',
277 | locales,
278 | }),
279 | ],
280 | });`,
281 | readJSONSpy,
282 | ),
283 | ).rejects.toThrowError('Failed to find valid locales configuration in Starlight configuration.')
284 |
285 | expect(readJSONSpy).not.toHaveBeenCalled()
286 | })
287 |
288 | function getStarlightLocalesTestConfigFromCode(
289 | code: string,
290 | readJSON?: Parameters[1],
291 | ) {
292 | return getStarlightLocalesConfigFromCode(code, readJSON ?? (() => Promise.resolve('test')))
293 | }
294 |
--------------------------------------------------------------------------------
/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": "@hideoo/tsconfig"
3 | }
4 |
--------------------------------------------------------------------------------
]