├── .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 | Starlight i18n extension icon 3 |

Starlight i18n

4 |
5 | 6 |
7 |

Easily translate Starlight documentation pages.

8 |

9 | 10 | Integration Status 11 | 12 | 13 | License 14 | 15 |

16 |

17 | 18 | Demo of the Starlight i18n extension 19 | 20 |

21 |
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 | --------------------------------------------------------------------------------