diff --git a/.github/assets/lightningcss-plugins.jpg b/.github/assets/lightningcss-plugins.jpg
new file mode 100644
index 0000000..0124404
Binary files /dev/null and b/.github/assets/lightningcss-plugins.jpg differ
diff --git a/.github/assets/pxtorem.jpg b/.github/assets/pxtorem.jpg
new file mode 100644
index 0000000..a9d38a4
Binary files /dev/null and b/.github/assets/pxtorem.jpg differ
diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml
index e976fd0..9ca4f99 100644
--- a/.github/workflows/release.yml
+++ b/.github/workflows/release.yml
@@ -7,35 +7,102 @@ permissions:
on:
push:
tags:
- - "*@*"
+ - "**@**"
jobs:
release:
runs-on: ubuntu-latest
+
steps:
- - uses: actions/checkout@v4
+ - uses: actions/checkout@v6
with:
fetch-depth: 0
- - name: Validate tag format
+ - name: Validate and parse tag
+ id: tag
+ shell: bash
run: |
- if [[ ! $GITHUB_REF =~ ^refs/tags/[a-zA-Z0-9-]+@[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
- echo "Invalid tag format. Expected 'name@x.y.z'."
+ TAG="${GITHUB_REF_NAME}"
+
+ # Format: @scope/name@x.y.z or name@x.y.z
+ if [[ ! "$TAG" =~ ^(@[a-zA-Z0-9-]+/)?[a-zA-Z0-9-]+@[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
+ echo "Invalid tag format. Expected '@scope/name@x.y.z' or 'name@x.y.z'. Got: $TAG"
+ exit 1
+ fi
+
+ TAG_NAME="${TAG%@*}"
+ TAG_VERSION="${TAG##*@}"
+
+ # folder = unscoped package name part
+ if [[ "$TAG_NAME" =~ ^@[a-zA-Z0-9-]+/(.+)$ ]]; then
+ PKG_FOLDER="${BASH_REMATCH[1]}"
+ else
+ PKG_FOLDER="$TAG_NAME"
+ fi
+
+ PKG_DIR="packages/${PKG_FOLDER}"
+
+ if [[ ! -f "${PKG_DIR}/package.json" ]]; then
+ echo "Package manifest not found: ${PKG_DIR}/package.json"
+ exit 1
+ fi
+
+ PKG_JSON_NAME="$(node -p "require('./${PKG_DIR}/package.json').name")"
+ if [[ "${PKG_JSON_NAME}" != "${TAG_NAME}" ]]; then
+ echo "Tag package name (${TAG_NAME}) does not match package.json name (${PKG_JSON_NAME})"
exit 1
fi
- - uses: pnpm/action-setup@v4
- - uses: actions/setup-node@v4
+ echo "pkg_name=${TAG_NAME}" >> "$GITHUB_OUTPUT"
+ echo "pkg_version=${TAG_VERSION}" >> "$GITHUB_OUTPUT"
+ echo "pkg_dir=${PKG_DIR}" >> "$GITHUB_OUTPUT"
+
+ - uses: actions/setup-node@v6
with:
node-version: lts/*
registry-url: https://registry.npmjs.org/
- - run: pnpx changelogithub
+ - uses: pnpm/action-setup@v6
+
+ - name: Install dependencies
+ run: pnpm ci
+
+ - name: Resolve changelog range
+ id: changelog_range
+ shell: bash
+ run: |
+ CURRENT_TAG="${{ github.ref_name }}"
+ PKG="${{ steps.tag.outputs.pkg_name }}"
+
+ PREV_TAG="$(
+ git tag --list "${PKG}@*" --sort=-v:refname \
+ | grep -Fxv "${CURRENT_TAG}" \
+ | head -n 1 || true
+ )"
+
+ if [[ -n "${PREV_TAG}" ]]; then
+ FROM_REF="${PREV_TAG}"
+ else
+ FROM_REF="$(git rev-list --max-parents=0 HEAD | tail -n 1)"
+ fi
+
+ echo "from_ref=${FROM_REF}" >> "$GITHUB_OUTPUT"
+ echo "to_ref=${CURRENT_TAG}" >> "$GITHUB_OUTPUT"
+
+ - name: Generate changelog/release notes
+ run: |
+ pnpx changelogithub@latest \
+ --from "${{ steps.changelog_range.outputs.from_ref }}" \
+ --to "${{ steps.changelog_range.outputs.to_ref }}"
env:
- GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
+ GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
+
+ - name: Build package
+ run: pnpm -C "${{ steps.tag.outputs.pkg_dir }}" build
- - run: pnpm install
- - run: pnpm publish -r --access public --no-git-checks
+ - name: Publish package
+ working-directory: ${{ steps.tag.outputs.pkg_dir }}
+ run: pnpm publish --access public --no-git-checks
env:
- NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}}
+ NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
NPM_CONFIG_PROVENANCE: true
diff --git a/.github/workflows/test.yml b/.github/workflows/tests.yml
similarity index 53%
rename from .github/workflows/test.yml
rename to .github/workflows/tests.yml
index 35f3a68..6a98657 100644
--- a/.github/workflows/test.yml
+++ b/.github/workflows/tests.yml
@@ -13,18 +13,19 @@ jobs:
lint:
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v4
-
- - name: Install pnpm
- uses: pnpm/action-setup@v4
+ - uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
- - name: Set node
- uses: actions/setup-node@v4
+ - uses: actions/setup-node@v6
with:
node-version: lts/*
+ registry-url: https://registry.npmjs.org/
+
+ - uses: pnpm/action-setup@v6
- name: Install
- run: pnpm install
+ run: pnpm ci
- name: Build
run: pnpm build
@@ -45,25 +46,19 @@ jobs:
fail-fast: false
steps:
- - uses: actions/checkout@v4
-
- - name: Install pnpm
- uses: pnpm/action-setup@v4
+ - uses: actions/checkout@v6
+ with:
+ fetch-depth: 0
- - name: Set node ${{ matrix.node }}
- uses: actions/setup-node@v4
+ - uses: actions/setup-node@v6
with:
- node-version: ${{ matrix.node }}
+ node-version: lts/*
+ registry-url: https://registry.npmjs.org/
+
+ - uses: pnpm/action-setup@v6
- name: Install
- run: pnpm install
+ run: pnpm ci
- name: Test
run: pnpm test
-
- - name: Run coverage
- run: pnpm coverage
-
- - uses: coverallsapp/github-action@master
- with:
- github-token: ${{ secrets.GITHUB_TOKEN }}
diff --git a/.gitignore b/.gitignore
index ad2598d..d21fcde 100644
--- a/.gitignore
+++ b/.gitignore
@@ -11,4 +11,3 @@ node_modules
temp
cache
.eslintcache
-pnpm-lock.yaml
diff --git a/.npmrc b/.npmrc
index d95f342..89c0ca0 100644
--- a/.npmrc
+++ b/.npmrc
@@ -1,3 +1,4 @@
-ignore-workspace-root-check=true
-shell-emulator=true
-save-exact=true
+save-exact = true
+ignore-scripts = true
+allow-git = none
+min-release-age = 2
diff --git a/.vscode/extensions.json b/.vscode/extensions.json
new file mode 100644
index 0000000..41e5d57
--- /dev/null
+++ b/.vscode/extensions.json
@@ -0,0 +1,5 @@
+{
+ "recommendations": [
+ "antfu.pnpm-catalog-lens"
+ ]
+}
diff --git a/.vscode/settings.json b/.vscode/settings.json
index 1b7e218..2cf70ff 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -1,28 +1,20 @@
{
"prettier.enable": false,
- "editor.formatOnSave": false,
+
"editor.codeActionsOnSave": {
"source.fixAll.eslint": "explicit",
+ "source.fixAll.oxc": "explicit",
"source.organizeImports": "never"
},
- "eslint.runtime": "node",
- "eslint.rules.customizations": [
- { "rule": "style/*", "severity": "off", "fixable": true },
- { "rule": "*-indent", "severity": "off", "fixable": true },
- { "rule": "*-spacing", "severity": "off", "fixable": true },
- { "rule": "*-spaces", "severity": "off", "fixable": true },
- { "rule": "*-order", "severity": "off", "fixable": true },
- { "rule": "*-dangle", "severity": "off", "fixable": true },
- { "rule": "*-newline", "severity": "off", "fixable": true },
- { "rule": "*quotes", "severity": "off", "fixable": true },
- { "rule": "*semi", "severity": "off", "fixable": true }
- ],
+
"eslint.validate": [
- "javascript",
- "typescript",
"json",
"jsonc",
- "yaml",
- "github-actions-workflow"
- ]
+ "json5",
+ "yaml"
+ ],
+
+ "[yaml]": {
+ "editor.tabSize": 3
+ }
}
diff --git a/README.md b/README.md
index f49e596..b139f50 100644
--- a/README.md
+++ b/README.md
@@ -1,27 +1,17 @@
-# ⚡ LightningCSS Plugins
-
-[](https://github.com/felixicaza/lightningcss-plugins/actions/workflows/test.yml)
-[](https://coveralls.io/github/felixicaza/lightningcss-plugins)
-[](https://github.com/felixicaza/lightningcss-plugins/blob/main/LICENSE)
-
-This repository is dedicated to housing a collection of plugins for [LightningCSS](https://lightningcss.dev), a powerful and efficient CSS processor.
+[](https://github.com/felixicaza/lightningcss-plugins)
-## 📖 Introduction
+# ⚡ LightningCSS Plugins
-[LightningCSS](https://lightningcss.dev) is a modern CSS processor that offers a wide range of features for optimizing and transforming your CSS. This monorepo aims to provide a centralized location for various plugins that extend the functionality of LightningCSS.
+A collection of plugins for [LightningCSS](https://lightningcss.dev).
## 📦 Packages
-This repository currently includes the following packages:
-
-- **[
](packages/pxtorem)** - A plugin to convert pixel units to rem units in your CSS.
-
-Each plugin is located in the [`packages`](packages) directory to follow a consistent structure for ease development and maintenance.
+- [`lightningcss-plugin-pxtorem`](./packages/dts-minify-lite): A plugin to convert pixel units to rem units in your CSS.
## 🤝 Contributing
-If you wish to contribute to this project, you can do so by reading the [contribution guide](CONTRIBUTING.md).
+Contributions to this monorepo are welcome! If you have any ideas for improvements or new features, please feel free to open an issue or submit a pull request, I appreciate your help in making those plugins better for everyone. Please read the [CONTRIBUTING.md](https://github.com/felixicaza/lightningcss-plugins/blob/main/CONTRIBUTING.md) file for guidelines.
## 📄 License
-This project is licensed under the MIT License. See the [license file](LICENSE) for more details.
+This project is licensed under the MIT License. See the [LICENSE](https://github.com/felixicaza/lightningcss-plugins/blob/main/LICENSE) file for details.
diff --git a/eslint.config.ts b/eslint.config.ts
index 378ffa7..4211342 100644
--- a/eslint.config.ts
+++ b/eslint.config.ts
@@ -1,48 +1,3 @@
-import type { Linter } from 'eslint'
+import { felixicaza } from '@felixicaza/eslint-config'
-import { defineConfig, globalIgnores } from 'eslint/config'
-
-import globals from 'globals'
-import eslintPluginJs from '@eslint/js'
-import eslintPluginYml from 'eslint-plugin-yml'
-import eslintPluginJsonc from 'eslint-plugin-jsonc'
-import eslintPluginPackageJson from 'eslint-plugin-package-json'
-import neostandard, { plugins as eslintPlugins, resolveIgnoresFromGitignore } from 'neostandard'
-
-export default defineConfig([
- globalIgnores(resolveIgnoresFromGitignore()),
- { languageOptions: { globals: { ...globals.node } } },
- eslintPluginJs.configs.recommended,
- neostandard({
- noJsx: true,
- ts: true
- }),
- eslintPlugins.promise.configs['flat/recommended'],
- eslintPlugins['@stylistic'].configs['recommended-flat'],
- eslintPlugins.n.configs['flat/recommended'],
- eslintPluginJsonc.configs['flat/recommended-with-json'],
- eslintPluginPackageJson.configs.recommended,
- eslintPluginYml.configs['flat/recommended'],
- {
- rules: {
- '@stylistic/brace-style': ['error', '1tbs', { allowSingleLine: true }],
- '@stylistic/no-multi-spaces': ['error', { ignoreEOLComments: false }],
- '@stylistic/arrow-parens': ['error', 'always'],
- '@stylistic/quote-props': ['error', 'as-needed'],
- '@stylistic/comma-dangle': ['error', 'never'],
- '@stylistic/operator-linebreak': [
- 'error',
- 'after',
- { overrides: { '?': 'before', ':': 'before' } }
- ],
-
- // Disabled due this rule not support workspaces
- // reference: https://github.com/eslint-community/eslint-plugin-n/issues/209
- 'n/no-extraneous-import': ['off'],
- 'n/no-missing-import': ['off'],
-
- 'yml/indent': ['error', 3, { indicatorValueIndent: 2 }],
- 'yml/quotes': ['error', { prefer: 'double' }]
- }
- }
-]) as Linter.Config[]
+export default felixicaza({ astro: false })
diff --git a/oxlint.config.ts b/oxlint.config.ts
new file mode 100644
index 0000000..0d68220
--- /dev/null
+++ b/oxlint.config.ts
@@ -0,0 +1,3 @@
+import { felixicaza } from '@felixicaza/oxlint-config'
+
+export default felixicaza({ complexity: false })
diff --git a/package.json b/package.json
index ebab382..873d3c3 100644
--- a/package.json
+++ b/package.json
@@ -1,7 +1,8 @@
{
- "name": "lightningcss-plugins",
+ "name": "@felixicaza/lightningcss-plugins",
"version": "0.0.0",
"private": true,
+ "description": "A collection of plugins for LightningCSS.",
"keywords": [
"lightningcss",
"lightningcss-plugin",
@@ -15,43 +16,43 @@
"build": "pnpm -r build",
"coverage": "vitest run --coverage",
"dev": "pnpm -r dev",
- "lint": "eslint --cache --fix .",
+ "lint": "oxlint . && eslint . --cache",
+ "lint:fix": "oxlint . --fix --fix-suggestions --fix-dangerously && eslint . --cache --fix",
"prepare": "simple-git-hooks",
"prepublishOnly": "pnpm build",
- "release": "bumpp -r && pnpm -r publish",
+ "release:pxtorem": "pnpm -C packages/pxtorem exec bumpp --tag \"lightningcss-plugin-pxtorem@%s\" --commit \"release(pxtorem): %s\" --no-push",
+ "start": "pnpm -r start",
+ "start:watch": "pnpm -r start:watch",
"test": "vitest",
"test:update": "vitest --update",
- "typecheck": "tsc --noEmit"
+ "typecheck": "oxlint . --type-aware --type-check"
},
"simple-git-hooks": {
- "pre-commit": "nano-staged"
+ "pre-commit": "pnpm nano-staged"
},
"nano-staged": {
- "*": "pnpm lint"
+ "*": [
+ "pnpm lint:fix",
+ "pnpm typecheck"
+ ]
},
"devDependencies": {
- "@eslint/js": "catalog:",
+ "@felixicaza/eslint-config": "catalog:lint",
+ "@felixicaza/oxlint-config": "catalog:lint",
+ "@felixicaza/tsdown-config": "catalog:build",
"@types/node": "catalog:",
- "@vitest/coverage-v8": "catalog:",
- "bumpp": "catalog:",
- "eslint": "catalog:",
- "eslint-plugin-jsonc": "catalog:",
- "eslint-plugin-package-json": "catalog:",
- "eslint-plugin-yml": "catalog:",
- "globals": "catalog:",
- "jiti": "catalog:",
- "lightningcss": "catalog:",
- "nano-staged": "catalog:",
- "neostandard": "catalog:",
- "simple-git-hooks": "catalog:",
- "tsup": "catalog:",
- "tsx": "catalog:",
+ "bumpp": "catalog:releasing",
+ "eslint": "catalog:lint",
+ "jiti": "catalog:lint",
+ "lightningcss": "catalog:peer",
+ "nano-staged": "catalog:lint",
+ "oxlint": "catalog:lint",
+ "oxlint-tsgolint": "catalog:lint",
+ "simple-git-hooks": "catalog:lint",
+ "tsdown": "catalog:build",
+ "tsx": "catalog:dev",
"typescript": "catalog:",
- "vite": "catalog:",
- "vitest": "catalog:"
+ "vitest": "catalog:testing"
},
- "peerDependencies": {
- "lightningcss": "catalog:"
- },
- "packageManager": "pnpm@10.9.0"
+ "packageManager": "pnpm@11.8.0"
}
diff --git a/packages/pxtorem/README.md b/packages/pxtorem/README.md
index eb52b30..c0b3f22 100644
--- a/packages/pxtorem/README.md
+++ b/packages/pxtorem/README.md
@@ -1,54 +1,51 @@
+[](https://npmx.dev/package/lightningcss-plugin-pxtorem)
+
# ⚡ lightningcss-plugin-pxtorem
-[](https://www.npmjs.com/package/lightningcss-plugin-pxtorem)
-[](https://github.com/felixicaza/lightningcss-plugins/actions/workflows/test.yml)
-[](https://coveralls.io/github/felixicaza/lightningcss-plugins)
-[](https://github.com/felixicaza/lightningcss-plugins/blob/main/LICENSE)
+[](https://npmx.dev/package/lightningcss-plugin-pxtorem)
+[](https://github.com/felixicaza/lightningcss-plugins/actions/workflows/tests.yml)
+[](https://github.com/felixicaza/lightningcss-plugins/blob/main/LICENSE)
-The `lightningcss-plugin-pxtorem` plugin is designed to convert pixel units to rem units in your CSS, making it easier to maintain responsive and scalable designs.
+The [`lightningcss-plugin-pxtorem`][pxtorem] plugin is designed to convert pixel units to rem units in your CSS, making it easier to maintain responsive and scalable designs.
## ✨ Features
-- ✅ Converts pixel units to rem units.
-- ✅ Helps maintain responsive and scalable designs.
-- ✅ Works seamlessly with LightningCSS and Vite ecosystem.
-- ✅ Customizable options.
-
-## ⬇️ Installation
-
-You can install the `lightningcss-plugin-pxtorem` plugin using your preferred package manager:
+- 📏 Converts pixel units to rem units.
+- 📱 Helps maintain responsive and scalable designs.
+- ⚡ Works seamlessly with LightningCSS and Vite ecosystem.
+- ⚙️ Customizable options.
-NPM:
-```sh
-npm install lightningcss-plugin-pxtorem
-```
+## 📦 Installation
-PNPM:
-```sh
-pnpm add lightningcss-plugin-pxtorem
-```
+You can install [`lightningcss-plugin-pxtorem`][pxtorem] using npm:
-Yarn:
```sh
-yarn add lightningcss-plugin-pxtorem
+$ npm install lightningcss-plugin-pxtorem
```
-Bun:
-```sh
-bun add lightningcss-plugin-pxtorem
-```
+
+ Using a different package manager?
+
-## ⚙️ Options
+ Using pnpm:
+ ```sh
+ $ pnpm add lightningcss-plugin-pxtorem
+ ```
-The plugin accepts the following options:
+ Using yarn:
+ ```sh
+ $ yarn add lightningcss-plugin-pxtorem
+ ```
-- `rootValue` (default: `16`): The root font size to use for the conversion. This is typically set to `16px`, which is the default font size in most browsers.
-- `unitPrecision` (default: `4`): The number of decimal places to use for the converted values.
-- `minValue` (default: `0`): The minimum value to convert. Also supports `negative` and `float` values.
+ Using bun:
+ ```sh
+ $ bun add lightningcss-plugin-pxtorem
+ ```
+
-## 🚀 Usage
+## ⚡ Usage
-Using `lightningcss-plugin-pxtorem` plugin in your project.
+Add the plugin in your project.
```js
import { transform, composeVisitors } from 'lightningcss';
@@ -62,17 +59,16 @@ const result = transform({
padding: 20px 12px;
}
`),
- visitor: composeVisitors([
- pxtorem(),
- ]),
+ visitor: composeVisitors([pxtorem()]),
});
-console.log(res.code.toString()); // .foo { padding: 1.25rem 0.75rem; }
+console.log(result.code.toString()); // .foo { padding: 1.25rem 0.75rem; }
```
-Using `lightningcss-plugin-pxtorem` in your `vite.config.js` file:
+Add the plugin in your `vite.config.js` file:
```js
+// vite.config.js
import { defineConfig } from "vite";
import { composeVisitors } from "lightningcss";
import pxtorem from "lightningcss-plugin-pxtorem";
@@ -87,73 +83,87 @@ export default defineConfig({
});
```
-With custom options:
+> [!TIP]
+> Since it's a LightningCSS plugin, it's compatible with the Vite ecosystem like [UI Frameworks](https://patak.dev/vite/ecosystem.html) and [App Frameworks](https://patak.dev/vite/ecosystem.html#app-frameworks), allowing you to use it seamlessly in your projects.
-```js
-import { defineConfig } from "vite";
-import { composeVisitors } from "lightningcss";
-import pxtorem from "lightningcss-plugin-pxtorem";
+### ⚙️ Options
-export default defineConfig({
- css: {
- transformer: "lightningcss",
- lightningcss: {
- visitor: composeVisitors([
- pxtorem({
- rootValue: 18,
- unitPrecision: 2,
- minValue: 10,
- }),
- ]),
- },
- },
-});
-```
+The plugin accepts an object options:
-This plugin is designed to work with [LightningCSS](https://lightningcss.dev/), a CSS processor that provides advanced features and optimizations. It's compatible with the Vite ecosystem like [UI Frameworks](https://patak.dev/vite/ecosystem.html) and [App Frameworks](https://patak.dev/vite/ecosystem.html#app-frameworks), allowing you to use it seamlessly in your projects.
+#### `rootValue` (number) — optional (default: 16)
-## 📜 Example
+The root font size to use for the conversion. This is typically set to `16px`, which is the default font size in most browsers.
-With default options:
+#### `unitPrecision` (number) — optional (default: 4)
-```css
-/* input.css */
-body {
- font-size: 16px;
- padding: 20px;
- margin: 10px;
-}
+The number of decimal places to use for the converted values.
-h1 {
- font-size: 32px;
- line-height: 40px;
-}
-```
+#### `minValue` (number) — optional (default: 0)
-```css
-/* output.css */
-body {
- font-size: 1rem;
- padding: 1.25rem;
- margin: 0.625rem;
-}
-
-h1 {
- font-size: 2rem;
- line-height: 2.5rem;
-}
-```
+The minimum value to convert. Also supports `negative` and `float` values.
-See others examples in the [test folder](https://github.com/felixicaza/lightningcss-plugins/blob/main/packages/pxtorem/test).
+#### `propList` (string | RegExp)[] — optional (default: ['font', 'font-size', 'line-height', 'letter-spacing', 'word-spacing'])
-## 🤝 Contributing
+A list of properties to convert. You can use a string or an array of strings and/or regex patterns.
+
+- Use `*` as a wildcard to match every property. Example: `['*']`
+- Place `*` before or after a term to match partial property names. Example: `['*position*']` matches `background-position-y`
+- Prefix a property with `!` to exclude it from matching. Example: `['*', '!letter-spacing']`
+- The exclusion prefix can be combined with wildcard patterns. Example: `['*', '!font*']`
+
+#### `ignoreSelectors` (string | RegExp)[] — optional (default: [])
+
+A list of selectors to ignore conversion. You can use a string or an array of strings and/or regex patterns.
+
+- When the value is a string, the selector is considered a match if it includes that string. Example: `['body']` matches `.body-class`.
+- When the value is a regular expression, the selector is tested against that pattern. Example: `[/^body$/]` matches `body`, but does not match `.body`.
+
+#### `mediaQuery` (boolean) — optional (default: false)
-If you wish to contribute to this project, you can do so by reading the [contribution guide](https://github.com/felixicaza/lightningcss-plugins/blob/main/CONTRIBUTING.md).
+Whether to convert pixel units in media queries.
-## 🙌 Credits
+
+ Example
+
-This plugin was highly inspired by [postcss-pxtorem](https://github.com/cuth/postcss-pxtorem).
+ ```js
+ // vite.config.js
+ import { defineConfig } from "vite";
+ import { composeVisitors } from "lightningcss";
+ import pxtorem from "lightningcss-plugin-pxtorem";
+
+ export default defineConfig({
+ css: {
+ transformer: "lightningcss",
+ lightningcss: {
+ visitor: composeVisitors([
+ pxtorem({
+ rootValue: 18,
+ unitPrecision: 2,
+ minValue: 10,
+ propList: ['*', '!letter-spacing'],
+ ignoreSelectors: ['body', /^\.no-convert$/],
+ mediaQuery: true,
+ }),
+ ]),
+ },
+ },
+ });
+ ```
+
+
+See more examples in [tests folder](https://github.com/felixicaza/lightningcss-plugins/blob/main/packages/pxtorem/tests).
+
+## 🏆 Credits
+
+This plugin is the LightningCSS version of [@cuth/postcss-pxtorem](https://github.com/cuth/postcss-pxtorem).
+
+## 🤝 Contributing
+
+Contributions to this library are welcome! If you have any ideas for improvements or new features, please feel free to open an issue or submit a pull request, I appreciate your help in making [lightningcss-plugin-pxtorem][pxtorem] better for everyone. Please read the [CONTRIBUTING.md](https://github.com/felixicaza/lightningcss-plugins/blob/main/CONTRIBUTING.md) for guidelines.
## 📄 License
-This project is licensed under the MIT License. See the [license file](https://github.com/felixicaza/lightningcss-plugins/blob/main/LICENSE) for more details.
+This project is licensed under the MIT License. See the [LICENSE](https://github.com/felixicaza/lightningcss-plugins/blob/main/LICENSE) file for details.
+
+[pxtorem]: https://npmx.dev/package/lightningcss-plugin-pxtorem
diff --git a/packages/pxtorem/package.json b/packages/pxtorem/package.json
index 9cbb117..9043f18 100644
--- a/packages/pxtorem/package.json
+++ b/packages/pxtorem/package.json
@@ -1,7 +1,7 @@
{
"name": "lightningcss-plugin-pxtorem",
"version": "0.0.8",
- "description": "Convert px to rem in css files with LightningCSS.",
+ "description": "⚡ Convert px to rem in css files with LightningCSS.",
"keywords": [
"lightningcss",
"lightningcss-plugin",
@@ -17,28 +17,36 @@
},
"repository": {
"type": "git",
- "url": "git+https://github.com/felixicaza/lightningcss-plugins.git"
+ "url": "git+https://github.com/felixicaza/lightningcss-plugins.git",
+ "directory": "packages/pxtorem"
},
"license": "MIT",
"author": "Felix Icaza ",
+ "sideEffects": false,
"type": "module",
"exports": {
- ".": "./dist/index.js"
+ ".": {
+ "types": "./dist/index.d.mts",
+ "import": "./dist/index.mjs"
+ }
},
- "main": "./dist/index.js",
- "module": "./dist/index.js",
- "types": "./dist/index.d.ts",
+ "main": "./dist/index.mjs",
+ "module": "./dist/index.mjs",
+ "types": "./dist/index.d.mts",
"files": [
"dist"
],
"scripts": {
- "build": "tsup",
- "dev": "tsup --watch",
+ "build": "tsdown",
+ "dev": "tsdown --watch",
"prepublishOnly": "pnpm build",
- "start": "tsx src/index.ts"
+ "start": "tsx src/index.ts",
+ "start:watch": "tsx watch src/index.ts"
+ },
+ "devDependencies": {
+ "lightningcss": "catalog:peer"
},
"peerDependencies": {
"lightningcss": ">=1.18.0"
- },
- "packageManager": "pnpm@10.5.2"
+ }
}
diff --git a/packages/pxtorem/src/contracts/config.type.ts b/packages/pxtorem/src/contracts/config.type.ts
deleted file mode 100644
index 608b1f0..0000000
--- a/packages/pxtorem/src/contracts/config.type.ts
+++ /dev/null
@@ -1,5 +0,0 @@
-export interface Config {
- rootValue: number
- unitPrecision: number
- minValue: number
-}
diff --git a/packages/pxtorem/src/index.ts b/packages/pxtorem/src/index.ts
index ec381d2..90248ad 100644
--- a/packages/pxtorem/src/index.ts
+++ b/packages/pxtorem/src/index.ts
@@ -1,46 +1,140 @@
-import { type LengthValue, type LengthUnit } from 'lightningcss'
-import { type Config } from './contracts/config.type'
+import type { Config, DeclarationLike, StyleSheetLike, RuleLike, MediaQueryLike } from './types/index.ts'
-import { validateIsNumber, validatePositiveInteger } from './utils/errorHandler'
+import { createPxToRemWalker } from './utils/conversion.ts'
+import { createPropertyMatcher, createSelectorMatcher } from './utils/propRules.ts'
+import { validateIsArray, validateIsBoolean, validateIsNumber, validatePositiveInteger } from './utils/errorHandler.ts'
+import {
+ collectUsedCustomPropsInAst,
+ isCustomDeclarationLike,
+ isCustomPropertyLike,
+ normalizeCustomName,
+ getEffectiveProperty,
+ getPropertyValueNode,
+ hasIgnoredSelectorInRule
+} from './utils/factory.ts'
-const defultConfig: Config = {
+const defaultConfig: Config = {
rootValue: 16,
unitPrecision: 4,
- minValue: 0
+ propList: ['font', 'font-size', 'line-height', 'letter-spacing', 'word-spacing'],
+ minValue: 0,
+ ignoreSelectors: [],
+ mediaQuery: false
}
-/**
- * Convert pixel units to rem units.
- * @param {Object} config - The configuration object.
- * @param {number} [config.rootValue=16] - The root value for conversion. (default is 16)
- * @param {number} [config.unitPrecision=4] - The decimal precision for the converted value. (default is 4)
- * @param {number} [config.minValue=0] - The minimum value to be converted. (default is 0)
- * @returns {Function} `Length` function to convert pixel values to rem values used by LightningCSS.
- */
-function pxtorem(config: Partial = {}) {
- const { rootValue, unitPrecision, minValue } = { ...defultConfig, ...config }
-
- validatePositiveInteger(rootValue, 'rootValue')
- validatePositiveInteger(unitPrecision, 'unitPrecision')
- validateIsNumber(rootValue, 'rootValue')
- validateIsNumber(unitPrecision, 'unitPrecision')
- validateIsNumber(minValue, 'minValue')
-
- const toFixed = (value: number, precision: number): number => {
- const factor = Math.pow(10, precision)
-
- return Math.round(value * factor) / factor
+export default function pxtorem(config: Partial = {}) {
+ const userConfig = { ...defaultConfig, ...config }
+
+ validatePositiveInteger(userConfig.rootValue, 'rootValue')
+ validatePositiveInteger(userConfig.unitPrecision, 'unitPrecision')
+ validateIsNumber(userConfig.rootValue, 'rootValue')
+ validateIsNumber(userConfig.unitPrecision, 'unitPrecision')
+ validateIsNumber(userConfig.minValue, 'minValue')
+ validateIsArray(userConfig.propList, 'propList')
+ validateIsArray(userConfig.ignoreSelectors, 'ignoreSelectors')
+ validateIsBoolean(userConfig.mediaQuery, 'mediaQuery')
+
+ const shouldConvertProperty = createPropertyMatcher(userConfig.propList)
+ const shouldIgnoreSelector = createSelectorMatcher(userConfig.ignoreSelectors)
+
+ const walkAndConvert: (node: unknown) => boolean = createPxToRemWalker({
+ rootValue: userConfig.rootValue,
+ unitPrecision: userConfig.unitPrecision,
+ minValue: userConfig.minValue
+ })
+
+ const usedCustomProps = new Set()
+ const cache = new Map()
+ const ignoreContextStack: boolean[] = []
+
+ const MediaQuery = (query: MediaQueryLike) => {
+ if (!userConfig.mediaQuery) return undefined
+
+ const changed = walkAndConvert(query.condition)
+ if (!changed) return
+
+ return query
}
- return {
- Length({ unit, value }: LengthValue): { unit: LengthUnit, value: number } {
- if (unit === 'px' && value >= minValue) {
- return { unit: 'rem', value: toFixed(value / rootValue, unitPrecision) }
- } else {
- return { unit, value }
- }
+ // Pre-scan once (before declaration visitors mutate anything)
+ let scanned = false
+ const StyleSheet = (sheet: StyleSheetLike) => {
+ if (!scanned) {
+ collectUsedCustomPropsInAst(sheet, shouldConvertProperty, usedCustomProps, {
+ shouldIgnoreSelector
+ })
+ scanned = true
}
+ return undefined
}
-}
-export default pxtorem
+ const Rule = (rule: RuleLike) => {
+ const parentIgnored = ignoreContextStack[ignoreContextStack.length - 1] === true
+ const currentIgnored = parentIgnored || hasIgnoredSelectorInRule(rule, shouldIgnoreSelector)
+ ignoreContextStack.push(currentIgnored)
+ return undefined
+ }
+
+ const RuleExit = () => {
+ ignoreContextStack.pop()
+ return undefined
+ }
+
+ const Declaration = new Proxy({} as Record, {
+ get(_, prop: string | symbol): DeclarationLike | undefined {
+ if (typeof prop !== 'string') return undefined
+
+ let handler = cache.get(prop)
+ if (!handler) {
+ const created: DeclarationLike = (value) => {
+ const ignoreCurrentDeclaration = ignoreContextStack[ignoreContextStack.length - 1] === true
+ if (ignoreCurrentDeclaration) return undefined
+
+ if (prop === 'custom') {
+ let custom = null
+
+ if (isCustomPropertyLike(value)) {
+ custom = value
+ } else if (isCustomDeclarationLike(value)) {
+ custom = value.value
+ }
+
+ if (!custom) return undefined
+
+ const customName = normalizeCustomName(custom.name)
+ if (!customName) return undefined
+
+ if (!usedCustomProps.has(customName)) return undefined
+
+ const changed = walkAndConvert(custom.value)
+ if (!changed) return undefined
+
+ return {
+ property: 'custom',
+ value: {
+ name: customName,
+ value: custom.value
+ }
+ }
+ }
+
+ const effectiveProp = getEffectiveProperty(prop, value)
+ if (shouldConvertProperty(effectiveProp)) {
+ const valueNode = getPropertyValueNode(prop, value)
+ const changed = walkAndConvert(valueNode)
+ return changed ? value : undefined
+ }
+
+ return undefined
+ }
+
+ cache.set(prop, created)
+ handler = created
+ }
+
+ return handler
+ }
+ })
+
+ return { MediaQuery, StyleSheet, Rule, RuleExit, Declaration }
+}
diff --git a/packages/pxtorem/src/types/index.ts b/packages/pxtorem/src/types/index.ts
new file mode 100644
index 0000000..1ad44cd
--- /dev/null
+++ b/packages/pxtorem/src/types/index.ts
@@ -0,0 +1,59 @@
+import type { Rule, MediaQuery, StyleSheet, UnparsedProperty, CustomProperty, Declaration } from 'lightningcss'
+
+export type RuleLike = Rule
+export type MediaQueryLike = MediaQuery
+export type StyleSheetLike = StyleSheet
+export type UnparsedLike = UnparsedProperty
+export type CustomPropertyLike = CustomProperty
+export type CustomDeclarationLike = Extract
+export type DeclarationLike = (value: Declaration) => Declaration | undefined
+
+export type MutableNode = Record
+
+export interface PropRule {
+ negate: boolean;
+ test: (property: string) => boolean;
+}
+
+export interface Options {
+ /**
+ * Root font size used to convert px to rem.
+ * @default 16
+ */
+ rootValue: number
+
+ /**
+ * Number of decimal places in generated rem values.
+ * @default 4
+ */
+ unitPrecision: number
+
+ /**
+ * Minimum pixel value to convert.
+ * @default 0
+ */
+ minValue: number
+}
+
+export interface Config extends Options {
+ /**
+ * CSS properties eligible for px to rem conversion.
+ * Supports property names and regular expressions.
+ * @see https://github.com/felixicaza/lightningcss-plugins/blob/main/packages/pxtorem#options-object--opcional
+ * @default ['font', 'font-size', 'line-height', 'letter-spacing', 'word-spacing']
+ */
+ propList: (string | RegExp)[]
+ /**
+ * Selectors where px values should be ignored.
+ * Supports CSS Selectors and regular expressions.
+ * @example ['body'] => matches '.body' (you can use '.body' or '#app')
+ * @example [/^body$/] => matches 'body' but not '.body'
+ * @default []
+ */
+ ignoreSelectors: (string | RegExp)[]
+ /**
+ * Allow px values to be converted inside media queries.
+ * @default false
+ */
+ mediaQuery: boolean
+}
diff --git a/packages/pxtorem/src/utils/conversion.ts b/packages/pxtorem/src/utils/conversion.ts
new file mode 100644
index 0000000..938cf99
--- /dev/null
+++ b/packages/pxtorem/src/utils/conversion.ts
@@ -0,0 +1,41 @@
+import type { MutableNode, Options } from '../types/index.ts'
+
+import { toFixed, isObject } from './factory.ts'
+
+function convertPxLength(node: MutableNode, options: Options): boolean {
+ if (node.unit === 'px' && typeof node.value === 'number' && node.value >= options.minValue) {
+ node.unit = 'rem'
+ node.value = toFixed(node.value / options.rootValue, options.unitPrecision)
+ return true
+ }
+ return false
+}
+
+export function createPxToRemWalker(options: Options) {
+ function walkAndConvert(node: unknown): boolean {
+ if (!isObject(node)) return false
+
+ if (Array.isArray(node)) {
+ let changed = false
+ for (const item of node) {
+ if (walkAndConvert(item)) changed = true
+ }
+ return changed
+ }
+
+ if (convertPxLength(node, options)) return true
+
+ if (node.type === 'dimension' && isObject(node.value)) {
+ if (convertPxLength(node.value, options)) return true
+ }
+
+ let changed = false
+ for (const value of Object.values(node)) {
+ if (walkAndConvert(value)) changed = true
+ }
+
+ return changed
+ }
+
+ return walkAndConvert
+}
diff --git a/packages/pxtorem/src/utils/errorHandler.ts b/packages/pxtorem/src/utils/errorHandler.ts
index b1937d1..2d87f08 100644
--- a/packages/pxtorem/src/utils/errorHandler.ts
+++ b/packages/pxtorem/src/utils/errorHandler.ts
@@ -1,3 +1,15 @@
+export function validateIsArray(value: (string | RegExp)[], name: string) {
+ if (!Array.isArray(value)) {
+ throw new Error(`Invalid ${name}: must be an array of strings or RegExp.`)
+ }
+}
+
+export function validateIsBoolean(value: unknown, name: string): void {
+ if (typeof value !== 'boolean') {
+ throw new TypeError(`Invalid ${name}: must be a boolean.`)
+ }
+}
+
export function validateIsNumber(value: number, name: string) {
if (typeof value !== 'number' || isNaN(value)) {
throw new Error(`Invalid ${name}: must be a valid number.`)
diff --git a/packages/pxtorem/src/utils/factory.ts b/packages/pxtorem/src/utils/factory.ts
new file mode 100644
index 0000000..0a5035e
--- /dev/null
+++ b/packages/pxtorem/src/utils/factory.ts
@@ -0,0 +1,191 @@
+import type { CustomDeclarationLike, CustomPropertyLike, UnparsedLike, MutableNode as UnknownRecord } from '../types/index.ts'
+
+const COMBINATOR_TEXT: Record = {
+ child: ' > ',
+ descendant: ' ',
+ 'next-sibling': ' + ',
+ 'later-sibling': ' ~ '
+}
+
+function isNonEmptyString(value: unknown): value is string {
+ return typeof value === 'string' && value.trim().length > 0
+}
+
+function selectorComponentToText(component: unknown): string {
+ if (!isObject(component) || typeof component.type !== 'string') return ''
+
+ switch (component.type) {
+ case 'class':
+ return typeof component.name === 'string' ? `.${component.name}` : ''
+ case 'id':
+ return typeof component.name === 'string' ? `#${component.name}` : ''
+ case 'type':
+ return typeof component.name === 'string' ? component.name : ''
+ case 'universal':
+ return '*'
+ case 'nesting':
+ return '&'
+ case 'combinator':
+ return typeof component.value === 'string' ? (COMBINATOR_TEXT[component.value] ?? ' ') : ' '
+ case 'attribute':
+ return typeof component.name === 'string' ? `[${component.name}]` : '[]'
+ case 'pseudo-class':
+ if (typeof component.kind === 'string') return `:${component.kind}`
+ if (typeof component.name === 'string') return `:${component.name}`
+ return ':'
+ case 'pseudo-element':
+ if (typeof component.kind === 'string') return `::${component.kind}`
+ if (typeof component.name === 'string') return `::${component.name}`
+ return '::'
+ default:
+ return ''
+ }
+}
+
+function selectorToText(selector: unknown): string {
+ if (!Array.isArray(selector)) return ''
+ return selector.map(selectorComponentToText).join('')
+}
+
+function pushSelectorTexts(raw: unknown, out: string[]): void {
+ if (!Array.isArray(raw)) return
+
+ for (const item of raw) {
+ if (isNonEmptyString(item)) {
+ out.push(item)
+ continue
+ }
+
+ const text = selectorToText(item)
+ if (text.trim()) out.push(text)
+ }
+}
+
+function extractSelectorTextsFromRuleLike(node: UnknownRecord): string[] {
+ const out: string[] = []
+
+ if (node.type === 'style' && isObject(node.value)) {
+ pushSelectorTexts(node.value.selectors, out)
+ }
+
+ if ('selectors' in node) {
+ pushSelectorTexts(node.selectors, out)
+ }
+
+ return out
+}
+
+function toUnparsedLike(value: unknown): UnparsedLike | null {
+ return isObject(value) ? (value as unknown as UnparsedLike) : null
+}
+
+export function hasIgnoredSelectorInRule(
+ node: unknown,
+ shouldIgnoreSelector: (selector: string) => boolean
+): boolean {
+ if (!isObject(node)) return false
+ return extractSelectorTextsFromRuleLike(node).some(shouldIgnoreSelector)
+}
+
+export function isObject(value: unknown): value is UnknownRecord {
+ return typeof value === 'object' && value !== null
+}
+
+export function toFixed(value: number, precision: number): number {
+ const factor = Math.pow(10, precision)
+ return Math.round(value * factor) / factor
+}
+
+export function isCustomPropertyLike(value: unknown): value is CustomPropertyLike {
+ return isObject(value) && typeof value.name !== 'undefined' && Array.isArray(value.value)
+}
+
+export function isCustomDeclarationLike(value: unknown): value is CustomDeclarationLike {
+ return isObject(value) && value.property === 'custom' && isCustomPropertyLike(value.value)
+}
+
+export function getEffectiveProperty(prop: string, value: unknown): string {
+ if (prop !== 'unparsed') return prop
+ const unparsed = toUnparsedLike(value)
+ if (!unparsed) return prop
+
+ return typeof unparsed.propertyId?.property === 'string' ? unparsed.propertyId.property : prop
+}
+
+export function getPropertyValueNode(prop: string, value: unknown): unknown {
+ if (prop !== 'unparsed') return value
+ const unparsed = toUnparsedLike(value)
+ if (!unparsed) return value
+
+ return unparsed.value ?? value
+}
+
+export function normalizeCustomName(name: unknown): string | null {
+ if (typeof name === 'string') {
+ return name.startsWith('--') ? name : `--${name}`
+ }
+
+ if (isObject(name) && typeof name.ident === 'string') {
+ return name.ident.startsWith('--') ? name.ident : `--${name.ident}`
+ }
+
+ return null
+}
+
+export function collectVarReferences(node: unknown, out: Set): void {
+ if (Array.isArray(node)) {
+ for (const item of node) collectVarReferences(item, out)
+ return
+ }
+
+ if (!isObject(node)) return
+
+ if (node.type === 'var') {
+ const varName = isObject(node.value) ? normalizeCustomName(node.value.name) : normalizeCustomName(node.name)
+ if (varName) out.add(varName)
+ }
+
+ for (const value of Object.values(node)) {
+ collectVarReferences(value, out)
+ }
+}
+
+export function collectUsedCustomPropsInAst(
+ node: unknown,
+ shouldConvertProperty: (property: string) => boolean,
+ out: Set,
+ options?: {
+ shouldIgnoreSelector?: (selector: string) => boolean
+ }
+): void {
+ const shouldIgnoreSelector = options?.shouldIgnoreSelector
+
+ function walk(current: unknown, inIgnoredSelector: boolean): void {
+ if (Array.isArray(current)) {
+ for (const item of current) walk(item, inIgnoredSelector)
+ return
+ }
+
+ if (!isObject(current)) return
+
+ const currentIgnored =
+ inIgnoredSelector ||
+ (shouldIgnoreSelector ? hasIgnoredSelectorInRule(current, shouldIgnoreSelector) : false)
+
+ if (!currentIgnored && typeof current.property === 'string' && 'value' in current) {
+ const prop = current.property
+ const value = current.value
+ const effectiveProp = getEffectiveProperty(prop, value)
+
+ if (shouldConvertProperty(effectiveProp)) {
+ collectVarReferences(getPropertyValueNode(prop, value), out)
+ }
+ }
+
+ for (const value of Object.values(current)) {
+ walk(value, currentIgnored)
+ }
+ }
+
+ walk(node, false)
+}
diff --git a/packages/pxtorem/src/utils/propRules.ts b/packages/pxtorem/src/utils/propRules.ts
new file mode 100644
index 0000000..c225037
--- /dev/null
+++ b/packages/pxtorem/src/utils/propRules.ts
@@ -0,0 +1,67 @@
+import type { PropRule } from '../types/index.ts'
+
+function escapeRegex(input: string): string {
+ return input.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')
+}
+
+export function createRule(rawPattern: string | RegExp): PropRule | null {
+ const pattern = typeof rawPattern === 'string' ? rawPattern.trim() : rawPattern
+ if (!pattern) return null
+
+ const negate = typeof pattern === 'string' && pattern.startsWith('!')
+ const body = negate ? (pattern as string).slice(1).trim() : pattern
+ if (!body) return null
+
+ if (body === '*') {
+ return { negate, test: () => true }
+ }
+
+ if (typeof body === 'string' && !body.includes('*')) {
+ return { negate, test: (property) => property === body }
+ }
+
+ if (body instanceof RegExp) {
+ return { negate, test: (property) => body.test(property) }
+ }
+
+ const regex = new RegExp(`^${escapeRegex(body).replace(/\\\*/g, '.*')}$`)
+ return { negate, test: (property) => regex.test(property) }
+}
+
+export function createPropertyMatcher(propList: (string | RegExp)[]): (property: string) => boolean {
+ const propRules = propList.map(createRule).filter((rule): rule is PropRule => rule !== null)
+
+ return function(property: string): boolean {
+ let matched = false
+ for (const rule of propRules) {
+ if (rule.test(property)) {
+ matched = !rule.negate
+ }
+ }
+ return matched
+ }
+}
+
+export function createSelectorMatcher(ignoreSelectors: (string | RegExp)[] = []): (selector: string) => boolean {
+ const matchers = ignoreSelectors
+ .map((item) => {
+ if (typeof item === 'string') {
+ const needle = item.trim()
+ if (!needle) return null
+ return (selector: string) => selector.includes(needle)
+ }
+
+ if (item instanceof RegExp) {
+ return (selector: string) => item.test(selector)
+ }
+
+ return null
+ })
+ .filter((fn): fn is (selector: string) => boolean => fn !== null)
+
+ if (matchers.length === 0) {
+ return () => false
+ }
+
+ return (selector: string): boolean => matchers.some((fn) => fn(selector))
+}
diff --git a/packages/pxtorem/test/__snapshots__/index.test.ts.snap b/packages/pxtorem/test/__snapshots__/index.test.ts.snap
deleted file mode 100644
index 16c38eb..0000000
--- a/packages/pxtorem/test/__snapshots__/index.test.ts.snap
+++ /dev/null
@@ -1,162 +0,0 @@
-// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
-
-exports[`pxtorem plugin > should convert pixel to rem in custom properties 1`] = `
-":root {
- --margin: 1rem;
-}
-
-div {
- margin: var(--margin);
-}
-"
-`;
-
-exports[`pxtorem plugin > should convert pixel to rem in keyframes 1`] = `
-"@keyframes fadeIn {
- from {
- margin: 1rem;
- }
-
- to {
- margin: 2rem;
- }
-}
-"
-`;
-
-exports[`pxtorem plugin > should convert pixel to rem in media queries 1`] = `
-"@media (width >= 48rem) {
- div {
- margin: 1rem;
- }
-}
-"
-`;
-
-exports[`pxtorem plugin > should convert pixel to rem using default configuration 1`] = `
-"div {
- margin: 1rem;
-}
-"
-`;
-
-exports[`pxtorem plugin > should handle custom configuration 1`] = `
-"div {
- margin: 2rem;
-}
-
-.foo {
- padding: 8px;
-}
-"
-`;
-
-exports[`pxtorem plugin > should handle custom configuration with unitPrecision 1`] = `
-"div {
- margin: 2.71rem;
-}
-"
-`;
-
-exports[`pxtorem plugin > should handle extreme pixel values 1`] = `
-"div {
- margin: 625rem;
-}
-"
-`;
-
-exports[`pxtorem plugin > should handle float pixel units 1`] = `
-"div {
- margin: 2.7087rem;
-}
-"
-`;
-
-exports[`pxtorem plugin > should handle minimum float value 1`] = `
-"div {
- margin: .0344rem;
-}
-
-.foo {
- top: .25px;
-}
-"
-`;
-
-exports[`pxtorem plugin > should handle minimum negative value 1`] = `
-"div {
- margin: -.3125rem;
-}
-
-.foo {
- top: -20px;
-}
-"
-`;
-
-exports[`pxtorem plugin > should handle minimum positive value 1`] = `
-"div {
- margin: 1.875rem;
-}
-
-.foo {
- padding: 8px;
-}
-"
-`;
-
-exports[`pxtorem plugin > should handle minimum zero value 1`] = `
-"div {
- margin: 0;
-}
-
-.foo {
- padding: .625rem;
-}
-
-.bar {
- left: .0156rem;
-}
-
-.baz {
- top: -.55px;
-}
-"
-`;
-
-exports[`pxtorem plugin > should handle multiple pixel values 1`] = `
-"div {
- margin: 1rem 2rem;
-}
-"
-`;
-
-exports[`pxtorem plugin > should handle nested selectors 1`] = `
-"div {
- & > span {
- margin: 1rem;
- }
-}
-"
-`;
-
-exports[`pxtorem plugin > should handle very small pixel values 1`] = `
-"div {
- margin: .0001rem;
-}
-"
-`;
-
-exports[`pxtorem plugin > should not convert other units 1`] = `
-"div {
- margin: 1em;
-}
-"
-`;
-
-exports[`pxtorem plugin > should use custom rootValue 1`] = `
-"div {
- margin: 1rem;
-}
-"
-`;
diff --git a/packages/pxtorem/test/index.test.ts b/packages/pxtorem/test/index.test.ts
deleted file mode 100644
index 6945880..0000000
--- a/packages/pxtorem/test/index.test.ts
+++ /dev/null
@@ -1,283 +0,0 @@
-import { describe, expect, it } from 'vitest'
-import { composeVisitors, transform } from 'lightningcss'
-import pxtorem from '../src/index'
-import { validatePositiveInteger, validateIsNumber } from '../src/utils/errorHandler'
-
-describe('pxtorem plugin', () => {
- it('should convert pixel to rem using default configuration', () => {
- const css = 'div { margin: 16px; }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem()])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should not convert other units', () => {
- const css = 'div { margin: 1em; }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem()])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should convert pixel to rem in media queries', () => {
- const css = '@media (min-width: 768px) { div { margin: 16px; } }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem()])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should convert pixel to rem in keyframes', () => {
- const css = '@keyframes fadeIn { from { margin: 16px; } to { margin: 32px; } }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem()])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should convert pixel to rem in custom properties', () => {
- const css = ':root { --margin: 16px; } div { margin: var(--margin); }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem()])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should handle multiple pixel values', () => {
- const css = 'div { margin: 16px 32px; }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem()])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should handle nested selectors', () => {
- const css = 'div { & > span { margin: 16px; } }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem()])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should handle float pixel units', () => {
- const css = 'div { margin: 43.3398589px; }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem()])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should handle custom configuration', () => {
- const css = 'div { margin: 16px; } .foo { padding: 8px; }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem({ rootValue: 8, unitPrecision: 2, minValue: 10 })])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should handle custom configuration with unitPrecision', () => {
- const css = 'div { margin: 43.3398589px; }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem({ unitPrecision: 2 })])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should use custom rootValue', () => {
- const css = 'div { margin: 32px; }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem({ rootValue: 32 })])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should handle extreme pixel values', () => {
- const css = 'div { margin: 10000px; }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem()])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should handle very small pixel values', () => {
- const css = 'div { margin: 0.001px; }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem()])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should handle minimum positive value', () => {
- const css = 'div { margin: 30px; } .foo { padding: 8px; }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem({ minValue: 10 })])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should handle minimum negative value', () => {
- const css = 'div { margin: -5px; } .foo { top: -20px; }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem({ minValue: -10 })])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should handle minimum float value', () => {
- const css = 'div { margin: 0.55px; } .foo { top: 0.25px; }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem({ minValue: 0.5 })])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should handle minimum zero value', () => {
- const css = 'div { margin: 0px; } .foo { padding: 10px; } .bar { left: 0.25px; } .baz { top: -0.55px; }'
-
- const output = transform({
- filename: 'input.css',
- code: Buffer.from(css),
- minify: false,
- sourceMap: false,
- visitor: composeVisitors([pxtorem({ minValue: 0 })])
- }).code.toString()
-
- expect(output).toMatchSnapshot()
- })
-
- it('should throw error for negative rootValue', () => {
- expect(() => pxtorem({ rootValue: -1 })).toThrowError('Invalid rootValue: must not be negative.')
- })
-
- it('should throw error for negative unitPrecision', () => {
- expect(() => pxtorem({ unitPrecision: -1 })).toThrowError('Invalid unitPrecision: must not be negative.')
- })
-})
-
-describe('validate errors', () => {
- it('should throw error for negative value', () => {
- expect(() => validatePositiveInteger(-1, 'rootValue')).toThrowError('Invalid rootValue: must not be negative.')
- })
-
- it('should throw error for decimal value', () => {
- expect(() => validatePositiveInteger(1.5, 'unitPrecision')).toThrowError('Invalid unitPrecision: must not be a decimal.')
- })
-
- it('should pass for valid integer value', () => {
- expect(() => validatePositiveInteger(1, 'minValue')).not.toThrow()
- })
-
- it('should throw error for non-number value', () => {
- // @ts-expect-error
- expect(() => validateIsNumber('10', 'rootValue')).toThrowError('Invalid rootValue: must be a valid number.')
- })
-
- it('should pass for valid number value', () => {
- expect(() => validateIsNumber(1, 'unitPrecision')).not.toThrow()
- })
-
- it('should pass for valid negative number value', () => {
- expect(() => validateIsNumber(-10, 'rootValue')).not.toThrow()
- })
-
- it('should pass for valid float number value', () => {
- expect(() => validateIsNumber(10.50, 'minValue')).not.toThrow()
- })
-})
diff --git a/packages/pxtorem/tests/__snapshots__/custom-config.test.ts.snap b/packages/pxtorem/tests/__snapshots__/custom-config.test.ts.snap
new file mode 100644
index 0000000..28e636a
--- /dev/null
+++ b/packages/pxtorem/tests/__snapshots__/custom-config.test.ts.snap
@@ -0,0 +1,275 @@
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`custom configs > should handle all props 1`] = `
+"div {
+ letter-spacing: .3125rem;
+ word-spacing: .625rem;
+ width: 6.25rem;
+ height: 3.125rem;
+ margin: 1rem;
+ padding: .5rem;
+ font-size: 1.5rem;
+ line-height: 1.875rem;
+}
+"
+`;
+
+exports[`custom configs > should handle convert media queries 1`] = `
+"@media (width >= 48rem) {
+ .foo {
+ margin: 16px;
+ font-size: 1rem;
+ }
+}
+
+@media (width >= 30rem) {
+ .bar {
+ margin: 12px;
+ font-size: .75rem;
+ }
+}
+
+#app {
+ margin: 14px;
+ font-size: .875rem;
+
+ @media (width >= 37.5rem) {
+ & .baz {
+ margin: 18px;
+ font-size: 1.125rem;
+ }
+ }
+}
+"
+`;
+
+exports[`custom configs > should handle custom configuration 1`] = `
+"div {
+ margin: 16px;
+ font-size: 3rem;
+}
+
+.foo {
+ word-spacing: 5px;
+ padding: 8px;
+ line-height: 3.75rem;
+}
+"
+`;
+
+exports[`custom configs > should handle custom ignoreSelectors 1`] = `
+"div {
+ letter-spacing: .3125rem;
+ word-spacing: .625rem;
+ width: 100px;
+ height: 50px;
+ margin: 16px;
+ padding: 8px;
+ font-size: 1.5rem;
+ line-height: 1.875rem;
+}
+
+.foo {
+ letter-spacing: 6px;
+ word-spacing: 8px;
+ width: 100px;
+ height: 50px;
+ margin: 15px;
+ padding: 10px;
+ font-size: 20px;
+ line-height: 32px;
+}
+
+#app {
+ letter-spacing: .25rem;
+ word-spacing: .75rem;
+ width: 100px;
+ height: 50px;
+ margin: 14px;
+ padding: 9px;
+ font-size: 1.375rem;
+ line-height: 1.75rem;
+}
+
+#bar {
+ letter-spacing: 7px;
+ word-spacing: 9px;
+ width: 100px;
+ height: 50px;
+ margin: 13px;
+ padding: 7px;
+ font-size: 26px;
+ line-height: 26px;
+}
+
+body {
+ letter-spacing: 8px;
+ word-spacing: 7px;
+ width: 100px;
+ height: 50px;
+ margin: 12px;
+ padding: 6px;
+ font-size: 28px;
+ line-height: 24px;
+}
+
+.body {
+ letter-spacing: .5625rem;
+ word-spacing: .375rem;
+ width: 100px;
+ height: 50px;
+ margin: 11px;
+ padding: 5px;
+ font-size: 1.875rem;
+ line-height: 1.375rem;
+}
+"
+`;
+
+exports[`custom configs > should handle custom propList 1`] = `
+"div {
+ letter-spacing: 5px;
+ word-spacing: 10px;
+ width: 100px;
+ height: 50px;
+ margin: 1rem;
+ padding: .5rem;
+ font-size: 24px;
+ line-height: 30px;
+}
+"
+`;
+
+exports[`custom configs > should handle minimum float value 1`] = `
+"div {
+ margin: .55px;
+ font-size: .0344rem;
+}
+
+.foo {
+ line-height: .25px;
+ top: .25px;
+}
+"
+`;
+
+exports[`custom configs > should handle minimum negative value 1`] = `
+"div {
+ margin: -5px;
+ font-size: -.625rem;
+}
+
+.foo {
+ line-height: -40px;
+ top: -20px;
+}
+"
+`;
+
+exports[`custom configs > should handle minimum positive value 1`] = `
+"div {
+ margin: 30px;
+ font-size: 3.75rem;
+}
+
+.foo {
+ padding: 8px;
+ line-height: 1rem;
+}
+"
+`;
+
+exports[`custom configs > should handle minimum zero value 1`] = `
+"div {
+ margin: 0;
+ font-size: 0;
+}
+
+.foo {
+ padding: 10px;
+ line-height: 1.25rem;
+}
+
+.bar {
+ left: .25px;
+}
+
+.baz {
+ top: -.55px;
+}
+"
+`;
+
+exports[`custom configs > should handle negation patterns 1`] = `
+"div {
+ letter-spacing: .3125rem;
+ word-spacing: .625rem;
+ background-position-y: 100px;
+ width: 6.25rem;
+ height: 3.125rem;
+ margin: 1rem;
+ padding: .5rem;
+ font-size: 24px;
+ line-height: 30px;
+}
+"
+`;
+
+exports[`custom configs > should handle pattern for props 1`] = `
+"div {
+ letter-spacing: 5px;
+ word-spacing: 10px;
+ background-position-y: 6.25rem;
+ width: 100px;
+ height: 50px;
+ margin: 1rem 1.125rem 1.0625rem 1.1875rem;
+ padding: .5rem .6875rem .5625rem .625rem;
+ font-size: 24px;
+ line-height: 30px;
+}
+"
+`;
+
+exports[`custom configs > should not convert media queries by default 1`] = `
+"@media (width >= 768px) {
+ .foo {
+ margin: 16px;
+ font-size: 1rem;
+ }
+}
+
+@media (width >= 480px) {
+ .bar {
+ margin: 12px;
+ font-size: .75rem;
+ }
+}
+
+#app {
+ margin: 14px;
+ font-size: .875rem;
+
+ @media (width >= 600px) {
+ & .baz {
+ margin: 18px;
+ font-size: 1.125rem;
+ }
+ }
+}
+"
+`;
+
+exports[`custom configs > should use custom rootValue 1`] = `
+"div {
+ margin: 32px;
+ font-size: 2rem;
+}
+"
+`;
+
+exports[`custom configs > should use custom unitPrecision 1`] = `
+"div {
+ font-size: 2.71rem;
+}
+"
+`;
diff --git a/packages/pxtorem/tests/__snapshots__/index.test.ts.snap b/packages/pxtorem/tests/__snapshots__/index.test.ts.snap
new file mode 100644
index 0000000..3ff5534
--- /dev/null
+++ b/packages/pxtorem/tests/__snapshots__/index.test.ts.snap
@@ -0,0 +1,99 @@
+// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html
+
+exports[`pxtorem plugin > should convert pixel to rem in custom properties 1`] = `
+":root {
+ --m: 16px;
+ --fs: 1.5rem;
+ --lh: 1.875rem;
+}
+
+div {
+ margin: var(--m);
+ font-size: var(--fs);
+ line-height: var(--lh);
+}
+"
+`;
+
+exports[`pxtorem plugin > should convert pixel to rem inside keyframes 1`] = `
+"@keyframes fadeIn {
+ from {
+ margin: 16px;
+ font-size: 1.5rem;
+ }
+
+ to {
+ margin: 32px;
+ font-size: 3rem;
+ }
+}
+"
+`;
+
+exports[`pxtorem plugin > should convert pixel to rem inside media queries 1`] = `
+"@media (width >= 768px) {
+ div {
+ margin: 16px;
+ font-size: 1.5rem;
+ }
+}
+"
+`;
+
+exports[`pxtorem plugin > should convert pixel to rem using default configuration 1`] = `
+"div {
+ margin: 16px;
+ font-size: 1.5rem;
+}
+"
+`;
+
+exports[`pxtorem plugin > should handle css nesting 1`] = `
+"div {
+ & > span {
+ margin: 16px;
+ font-size: 1.5rem;
+ }
+}
+"
+`;
+
+exports[`pxtorem plugin > should handle extreme pixel values 1`] = `
+"div {
+ margin: 10000px;
+ font-size: 1250rem;
+}
+"
+`;
+
+exports[`pxtorem plugin > should handle float pixel units 1`] = `
+"div {
+ font-size: 2.7087rem;
+}
+"
+`;
+
+exports[`pxtorem plugin > should handle multiple pixel values 1`] = `
+"div {
+ margin: 16px 32px;
+ font: italic small-caps bold .9375rem / 1.875rem Georgia, serif;
+}
+"
+`;
+
+exports[`pxtorem plugin > should handle very small pixel values 1`] = `
+"div {
+ margin: .001px;
+ font-size: .0001rem;
+}
+"
+`;
+
+exports[`pxtorem plugin > should not convert other units 1`] = `
+"div {
+ width: 100%;
+ height: 50vh;
+ margin: 1em;
+}
+"
+`;
diff --git a/packages/pxtorem/tests/custom-config.test.ts b/packages/pxtorem/tests/custom-config.test.ts
new file mode 100644
index 0000000..8f6c844
--- /dev/null
+++ b/packages/pxtorem/tests/custom-config.test.ts
@@ -0,0 +1,210 @@
+import { describe, expect, it } from 'vitest'
+import { composeVisitors, transform } from 'lightningcss'
+
+import pxtorem from '../src/index'
+
+describe('custom configs', () => {
+ it('should handle custom configuration', () => {
+ const css = 'div { margin: 16px; font-size: 24px; } .foo { padding: 8px; line-height: 30px; word-spacing: 5px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem({ rootValue: 8, unitPrecision: 2, minValue: 10 })])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should use custom unitPrecision', () => {
+ const css = 'div { font-size: 43.3398589px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem({ unitPrecision: 2 })])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should use custom rootValue', () => {
+ const css = 'div { margin: 32px; font-size: 64px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem({ rootValue: 32 })])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle minimum positive value', () => {
+ const css = 'div { margin: 30px; font-size: 60px; } .foo { padding: 8px; line-height: 16px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem({ minValue: 10 })])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle minimum negative value', () => {
+ const css = 'div { margin: -5px; font-size: -10px; } .foo { top: -20px; line-height: -40px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem({ minValue: -10 })])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle minimum float value', () => {
+ const css = 'div { margin: 0.55px; font-size: 0.55px; } .foo { top: 0.25px; line-height: 0.25px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem({ minValue: 0.5 })])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle minimum zero value', () => {
+ const css = 'div { margin: 0px; font-size: 0px; } .foo { padding: 10px; line-height: 20px; } .bar { left: 0.25px; } .baz { top: -0.55px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem({ minValue: 0 })])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle custom propList', () => {
+ const css = 'div { margin: 16px; padding: 8px; font-size: 24px; line-height: 30px; letter-spacing: 5px; word-spacing: 10px; width: 100px; height: 50px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem({ propList: ['margin', 'padding'] })])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle all props', () => {
+ const css = 'div { margin: 16px; padding: 8px; font-size: 24px; line-height: 30px; letter-spacing: 5px; word-spacing: 10px; width: 100px; height: 50px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem({ propList: ['*'] })])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle pattern for props', () => {
+ const css = 'div { margin-top: 16px; margin-bottom: 17px; margin-right: 18px; margin-left: 19px; padding-top: 8px; padding-bottom: 9px; padding-left: 10px; padding-right: 11px; font-size: 24px; line-height: 30px; letter-spacing: 5px; word-spacing: 10px; width: 100px; height: 50px; background-position-y: 100px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem({ propList: ['margin*', /^padding/, '*position*'] })])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle custom ignoreSelectors', () => {
+ const css = 'div { margin: 16px; padding: 8px; font-size: 24px; line-height: 30px; letter-spacing: 5px; word-spacing: 10px; width: 100px; height: 50px; } .foo { margin: 15px; padding: 10px; font-size: 20px; line-height: 32px; letter-spacing: 6px; word-spacing: 8px; width: 100px; height: 50px; } #app { margin: 14px; padding: 9px; font-size: 22px; line-height: 28px; letter-spacing: 4px; word-spacing: 12px; width: 100px; height: 50px; } #bar { margin: 13px; padding: 7px; font-size: 26px; line-height: 26px; letter-spacing: 7px; word-spacing: 9px; width: 100px; height: 50px; } body { margin: 12px; padding: 6px; font-size: 28px; line-height: 24px; letter-spacing: 8px; word-spacing: 7px; width: 100px; height: 50px; } .body { margin: 11px; padding: 5px; font-size: 30px; line-height: 22px; letter-spacing: 9px; word-spacing: 6px; width: 100px; height: 50px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem({ ignoreSelectors: ['foo', 'bar', /^body/] })])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle negation patterns', () => {
+ const css = 'div { margin: 16px; padding: 8px; font-size: 24px; line-height: 30px; letter-spacing: 5px; word-spacing: 10px; width: 100px; height: 50px; background-position-y: 100px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem({ propList: ['*', '!font-size', '!line-*', '!*position*'] })])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should not convert media queries by default', () => {
+ const css = '@media (min-width: 768px) { .foo { font-size: 16px; margin: 16px; } } @media (width >= 480px) { .bar { font-size: 12px; margin: 12px; } } #app { font-size: 14px; margin: 14px; @media (min-width: 600px) { .baz { font-size: 18px; margin: 18px; } }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem()])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle convert media queries', () => {
+ const css = '@media (min-width: 768px) { .foo { font-size: 16px; margin: 16px; } } @media (width >= 480px) { .bar { font-size: 12px; margin: 12px; } } #app { font-size: 14px; margin: 14px; @media (min-width: 600px) { .baz { font-size: 18px; margin: 18px; } } }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem({ mediaQuery: true })])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should throw error for negative rootValue', () => {
+ expect(() => pxtorem({ rootValue: -1 })).toThrow('Invalid rootValue: must not be negative.')
+ })
+
+ it('should throw error for negative unitPrecision', () => {
+ expect(() => pxtorem({ unitPrecision: -1 })).toThrow('Invalid unitPrecision: must not be negative.')
+ })
+})
diff --git a/packages/pxtorem/tests/errors.test.ts b/packages/pxtorem/tests/errors.test.ts
new file mode 100644
index 0000000..7c344a3
--- /dev/null
+++ b/packages/pxtorem/tests/errors.test.ts
@@ -0,0 +1,56 @@
+import { describe, expect, it } from 'vitest'
+
+import { validateIsArray, validateIsBoolean, validatePositiveInteger, validateIsNumber } from '../src/utils/errorHandler'
+
+describe('validate errors', () => {
+ it('`propList` should throw error for non-array value', () => {
+ // @ts-expect-error - Testing non-array value
+ expect(() => validateIsArray('not an array', 'propList')).toThrow('Invalid propList: must be an array of strings or RegExp.')
+ })
+
+ it('`propList` should pass for valid array value', () => {
+ expect(() => validateIsArray(['font-size', /line-height/], 'propList')).not.toThrow()
+ })
+
+ it('`ignoreSelectors` should throw error for non-array value', () => {
+ // @ts-expect-error - Testing non-array value
+ expect(() => validateIsArray('not an array', 'ignoreSelectors')).toThrow('Invalid ignoreSelectors: must be an array of strings or RegExp.')
+ })
+
+ it('`ignoreSelectors` should pass for valid array value', () => {
+ expect(() => validateIsArray(['.no-convert', /ignore-this/], 'ignoreSelectors')).not.toThrow()
+ })
+
+ it('`mediaQuery` should throw error for non-boolean value', () => {
+ expect(() => validateIsBoolean('not a boolean', 'mediaQuery')).toThrow('Invalid mediaQuery: must be a boolean.')
+ })
+
+ it('`rootValue` should throw error for negative value', () => {
+ expect(() => validatePositiveInteger(-1, 'rootValue')).toThrow('Invalid rootValue: must not be negative.')
+ })
+
+ it('`unitPrecision` should throw error for decimal value', () => {
+ expect(() => validatePositiveInteger(1.5, 'unitPrecision')).toThrow('Invalid unitPrecision: must not be a decimal.')
+ })
+
+ it('`minValue` should pass for valid integer value', () => {
+ expect(() => validatePositiveInteger(1, 'minValue')).not.toThrow()
+ })
+
+ it('`rootValue` should throw error for non-number value', () => {
+ // @ts-expect-error - Testing non-number value
+ expect(() => validateIsNumber('10', 'rootValue')).toThrow('Invalid rootValue: must be a valid number.')
+ })
+
+ it('`unitPrecision` should pass for valid number value', () => {
+ expect(() => validateIsNumber(1, 'unitPrecision')).not.toThrow()
+ })
+
+ it('`rootValue` should pass for valid negative number value', () => {
+ expect(() => validateIsNumber(-10, 'rootValue')).not.toThrow()
+ })
+
+ it('`minValue` should pass for valid float number value', () => {
+ expect(() => validateIsNumber(10.50, 'minValue')).not.toThrow()
+ })
+})
diff --git a/packages/pxtorem/tests/index.test.ts b/packages/pxtorem/tests/index.test.ts
new file mode 100644
index 0000000..fb121dd
--- /dev/null
+++ b/packages/pxtorem/tests/index.test.ts
@@ -0,0 +1,146 @@
+import { describe, expect, it } from 'vitest'
+import { composeVisitors, transform } from 'lightningcss'
+
+import pxtorem from '../src/index'
+
+describe('pxtorem plugin', () => {
+ it('should convert pixel to rem using default configuration', () => {
+ const css = 'div { margin: 16px; font-size: 24px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem()])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should not convert other units', () => {
+ const css = 'div { margin: 1em; width: 100%; height: 50vh; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem()])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should convert pixel to rem inside media queries', () => {
+ const css = '@media (min-width: 768px) { div { margin: 16px; font-size: 24px; } }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem()])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should convert pixel to rem inside keyframes', () => {
+ const css = '@keyframes fadeIn { from { margin: 16px; font-size: 24px; } to { margin: 32px; font-size: 48px; } }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem()])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should convert pixel to rem in custom properties', () => {
+ const css = ':root { --m: 16px; --fs: 24px; --lh: 30px; } div { margin: var(--m); font-size: var(--fs); line-height: var(--lh); }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem()])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle multiple pixel values', () => {
+ const css = 'div { margin: 16px 32px; font: italic small-caps bold 15px/30px Georgia, serif; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem()])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle css nesting', () => {
+ const css = 'div { & > span { margin: 16px; font-size: 24px; } }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem()])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle float pixel units', () => {
+ const css = 'div { font-size: 43.3398589px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem()])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle extreme pixel values', () => {
+ const css = 'div { margin: 10000px; font-size: 20000px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem()])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+
+ it('should handle very small pixel values', () => {
+ const css = 'div { margin: 0.001px; font-size: 0.002px; }'
+
+ const output = transform({
+ filename: 'input.css',
+ code: Buffer.from(css),
+ minify: false,
+ sourceMap: false,
+ visitor: composeVisitors([pxtorem()])
+ }).code.toString()
+
+ expect(output).toMatchSnapshot()
+ })
+})
diff --git a/packages/pxtorem/tsdown.config.ts b/packages/pxtorem/tsdown.config.ts
new file mode 100644
index 0000000..0d4acc8
--- /dev/null
+++ b/packages/pxtorem/tsdown.config.ts
@@ -0,0 +1,3 @@
+import { felixicaza } from '@felixicaza/tsdown-config'
+
+export default felixicaza()
diff --git a/packages/pxtorem/tsup.config.ts b/packages/pxtorem/tsup.config.ts
deleted file mode 100644
index 60b6441..0000000
--- a/packages/pxtorem/tsup.config.ts
+++ /dev/null
@@ -1,11 +0,0 @@
-import { defineConfig } from 'tsup'
-
-export default defineConfig([
- {
- entry: ['src/index.ts'],
- format: ['esm'],
- dts: true,
- minify: true,
- target: 'esnext'
- }
-])
diff --git a/packages/pxtorem/vitest.config.ts b/packages/pxtorem/vitest.config.ts
new file mode 100644
index 0000000..adfd635
--- /dev/null
+++ b/packages/pxtorem/vitest.config.ts
@@ -0,0 +1,7 @@
+import { defineConfig } from 'vitest/config'
+
+export default defineConfig({
+ test: {
+ include: ['tests/**/*.test.ts']
+ }
+})
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
new file mode 100644
index 0000000..5520f9e
--- /dev/null
+++ b/pnpm-lock.yaml
@@ -0,0 +1,4851 @@
+lockfileVersion: '9.0'
+
+settings:
+ autoInstallPeers: false
+ dedupePeers: true
+ excludeLinksFromLockfile: false
+
+catalogs:
+ build:
+ '@felixicaza/tsdown-config':
+ specifier: 0.1.3
+ version: 0.1.3
+ tsdown:
+ specifier: 0.22.3
+ version: 0.22.3
+ default:
+ '@types/node':
+ specifier: 25.9.3
+ version: 25.9.3
+ typescript:
+ specifier: 6.0.3
+ version: 6.0.3
+ dev:
+ tsx:
+ specifier: 4.22.4
+ version: 4.22.4
+ lint:
+ '@felixicaza/eslint-config':
+ specifier: 0.1.2
+ version: 0.1.2
+ '@felixicaza/oxlint-config':
+ specifier: 0.1.3
+ version: 0.1.3
+ eslint:
+ specifier: 9.39.4
+ version: 9.39.4
+ jiti:
+ specifier: 2.7.0
+ version: 2.7.0
+ nano-staged:
+ specifier: 1.0.2
+ version: 1.0.2
+ oxlint:
+ specifier: 1.67.0
+ version: 1.67.0
+ oxlint-tsgolint:
+ specifier: 0.23.0
+ version: 0.23.0
+ simple-git-hooks:
+ specifier: 2.13.1
+ version: 2.13.1
+ peer:
+ lightningcss:
+ specifier: 1.32.0
+ version: 1.32.0
+ releasing:
+ bumpp:
+ specifier: 11.1.0
+ version: 11.1.0
+ testing:
+ vitest:
+ specifier: 4.1.9
+ version: 4.1.9
+
+packageExtensionsChecksum: sha256-EkNJHDn/VGMUMpQBtIpe39dtQ3mPU+qrKMNRdmbEc50=
+
+importers:
+
+ .:
+ devDependencies:
+ '@felixicaza/eslint-config':
+ specifier: catalog:lint
+ version: 0.1.2(@types/estree@1.0.9)(eslint@9.39.4)(oxlint@1.67.0)
+ '@felixicaza/oxlint-config':
+ specifier: catalog:lint
+ version: 0.1.3(eslint@9.39.4)(estree-walker@3.0.3)(oxc-parser@0.126.0)(oxlint@1.67.0)
+ '@felixicaza/tsdown-config':
+ specifier: catalog:build
+ version: 0.1.3(rolldown@1.1.2)(tsdown@0.22.3)
+ '@types/node':
+ specifier: 'catalog:'
+ version: 25.9.3
+ bumpp:
+ specifier: catalog:releasing
+ version: 11.1.0
+ eslint:
+ specifier: catalog:lint
+ version: 9.39.4(jiti@2.7.0)
+ jiti:
+ specifier: catalog:lint
+ version: 2.7.0
+ lightningcss:
+ specifier: catalog:peer
+ version: 1.32.0
+ nano-staged:
+ specifier: catalog:lint
+ version: 1.0.2
+ oxlint:
+ specifier: catalog:lint
+ version: 1.67.0(oxlint-tsgolint@0.23.0)
+ oxlint-tsgolint:
+ specifier: catalog:lint
+ version: 0.23.0
+ simple-git-hooks:
+ specifier: catalog:lint
+ version: 2.13.1
+ tsdown:
+ specifier: catalog:build
+ version: 0.22.3(tsx@4.22.4)(typescript@6.0.3)
+ tsx:
+ specifier: catalog:dev
+ version: 4.22.4
+ typescript:
+ specifier: 'catalog:'
+ version: 6.0.3
+ vitest:
+ specifier: catalog:testing
+ version: 4.1.9(@types/node@25.9.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0)
+
+ packages/pxtorem:
+ devDependencies:
+ lightningcss:
+ specifier: catalog:peer
+ version: 1.32.0
+
+packages:
+
+ '@altano/repository-tools@2.0.3':
+ resolution: {integrity: sha512-cSR/ZYDF6Wp9OeAJMyLYYN1GenAAhV17W+w38ELP+3c5Ltsy9jkkCymi33nz/qnXyef3n6Fbr1h2yt3dvUN5sQ==}
+
+ '@astrojs/compiler@3.0.1':
+ resolution: {integrity: sha512-z97oYbdebO5aoWzuJ/8q5hLK232+17KcLZ7cJ8BCWk6+qNzVxn/gftC0KzMBUTD8WAaBkPpNSQK6PXLnNrZ0CA==}
+
+ '@babel/generator@8.0.0':
+ resolution: {integrity: sha512-NT9NrVwJsbSV6Y2FSstWa71EETOnzrjkL5/wX3D2mYHtKM+qvqB1DvR4D0Setb/gDBsHzRICifwEWMO8CnTF6g==}
+ engines: {node: ^22.18.0 || >=24.11.0}
+
+ '@babel/helper-string-parser@8.0.0':
+ resolution: {integrity: sha512-6mJgmFFFIIO82vvoLt9XtRC7/TkzXfts1t/SpRX4IHSzMgqoPYCWesVu1udUPUWioAE/2fcG6WuI8zrkE1gwrg==}
+ engines: {node: ^22.18.0 || >=24.11.0}
+
+ '@babel/helper-validator-identifier@8.0.2':
+ resolution: {integrity: sha512-9Fr9QeyCAyi1BR1jKZ6uYQ24EIhQUx5ReHfQU7drOE+TPOb+w11/dsqLkMOT2U29OdCT71XajrOT8xDc1C7orA==}
+ engines: {node: ^22.18.0 || >=24.11.0}
+
+ '@babel/parser@8.0.0':
+ resolution: {integrity: sha512-aLxAE+imI9bCcyaPrUDjBv3uSkWieifjLe0kuFOZF0zli0L6GCsTmsePnTr55adbIAgYz2zhN1vnFimCBUYcRQ==}
+ engines: {node: ^22.18.0 || >=24.11.0}
+ hasBin: true
+
+ '@babel/types@8.0.0':
+ resolution: {integrity: sha512-K8ponJDxBwDHigkeFqaqT5wLGl4bTlwMafR8k7b5CPxr6Ww+UG9ls8Yx6Tcpboxu97eeGVEEyKcHmEyOwN1vSw==}
+ engines: {node: ^22.18.0 || >=24.11.0}
+
+ '@emnapi/core@1.10.0':
+ resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==}
+
+ '@emnapi/core@1.11.1':
+ resolution: {integrity: sha512-RSvbQmHzdKzNsLYa/wHrbc3KN4sYLKAdPZxqiM2HATqv/SBk2/ENSHpvXGaLOMcsAyz0poEGqkmmKYG3OWiJEQ==}
+
+ '@emnapi/core@1.9.2':
+ resolution: {integrity: sha512-UC+ZhH3XtczQYfOlu3lNEkdW/p4dsJ1r/bP7H8+rhao3TTTMO1ATq/4DdIi23XuGoFY+Cz0JmCbdVl0hz9jZcA==}
+
+ '@emnapi/runtime@1.10.0':
+ resolution: {integrity: sha512-ewvYlk86xUoGI0zQRNq/mC+16R1QeDlKQy21Ki3oSYXNgLb45GV1P6A0M+/s6nyCuNDqe5VpaY84BzXGwVbwFA==}
+
+ '@emnapi/runtime@1.11.1':
+ resolution: {integrity: sha512-vgj7R3y3Wgx24IQaGPA/R6YFXLHVMOZ0uVEyIQPaWs+rd1AzfEMXlAC22FYwO1XkKR6NPsq7mUandH8oIRdZFw==}
+
+ '@emnapi/runtime@1.9.2':
+ resolution: {integrity: sha512-3U4+MIWHImeyu1wnmVygh5WlgfYDtyf0k8AbLhMFxOipihf6nrWC4syIm/SwEeec0mNSafiiNnMJwbza/Is6Lw==}
+
+ '@emnapi/wasi-threads@1.2.1':
+ resolution: {integrity: sha512-uTII7OYF+/Mes/MrcIOYp5yOtSMLBWSIoLPpcgwipoiKbli6k322tcoFsxoIIxPDqW01SQGAgko4EzZi2BNv2w==}
+
+ '@emnapi/wasi-threads@1.2.2':
+ resolution: {integrity: sha512-c95qOXkHdydNKhscBTebqEC1CVAZpyqOfVfBzQ1qgzyl3gfeldUjIggDbIZgDKsHLgnsM+igH7TJ/eAasaVuMA==}
+
+ '@es-joy/jsdoccomment@0.86.0':
+ resolution: {integrity: sha512-ukZmRQ81WiTpDWO6D/cTBM7XbrNtutHKvAVnZN/8pldAwLoJArGOvkNyxPTBGsPjsoaQBJxlH+tE2TNA/92Qgw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@es-joy/resolve.exports@1.2.0':
+ resolution: {integrity: sha512-Q9hjxWI5xBM+qW2enxfe8wDKdFWMfd0Z29k5ZJnuBqD/CasY5Zryj09aCA6owbGATWz+39p5uIdaHXpopOcG8g==}
+ engines: {node: '>=10'}
+
+ '@esbuild/aix-ppc64@0.28.1':
+ resolution: {integrity: sha512-Svl7tq8k/08+p6CXPpRjQ1fKX+1odH/BQbb48fV6fj3CWHhsoIOoY87w1oHXm0qEpkIK3ZfVgp0hed3XBXzXMQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [aix]
+
+ '@esbuild/android-arm64@0.28.1':
+ resolution: {integrity: sha512-34EGEbCIAgosYz6goLcopX6Mo7NyGv9tfwEM2/7Ce2VcVRk568iSvniGWcUXIy7wEDR1wzolcxcriFVrWYcwBg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [android]
+
+ '@esbuild/android-arm@0.28.1':
+ resolution: {integrity: sha512-0k2F129Xdio1TdJfzJ8sy1Q47vUD2NnwdhiAf7drUN1EBTfPf4hsFCtmMgu/6m8JSzsBrlmVjudMBQqOfG8usQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [android]
+
+ '@esbuild/android-x64@0.28.1':
+ resolution: {integrity: sha512-dbwY7ltSMDWsRatcRpCnES4F+im88OCUgGZjy52shC7GqHRE/cYlxNbB4Z4UpJswpcc4Qxd2oE/ufM0p61IKng==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [android]
+
+ '@esbuild/darwin-arm64@0.28.1':
+ resolution: {integrity: sha512-TZbWkQY7kvTAXbXUT7uVACR5cMHsDiSz9z7ZKAX/RTq/WJEk3QyRr0wZpNhBDX+/0CtdqUIJlOiodQcta6tY3Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@esbuild/darwin-x64@0.28.1':
+ resolution: {integrity: sha512-zfdzgK9ACBNZLI/CyHTOx81SyNbM6YXn7rxSgX97VjyiPl9W1i4Ka4fgKECEoFCKGpvBj5qArWIGgQjOwkgskQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [darwin]
+
+ '@esbuild/freebsd-arm64@0.28.1':
+ resolution: {integrity: sha512-wG2EA8ENdEI0qhkSZMjfqrdY+ziCYCPMmtZjjIwOmXFjmyzEHn+UUxk5of+SYsjtfs3VpnlC7QLzSI5hY/rOAw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [freebsd]
+
+ '@esbuild/freebsd-x64@0.28.1':
+ resolution: {integrity: sha512-i7dZ9vQgnvSCzi/rYCXNgtF/U+eKZNJBzu3eTQbRgHnM7tNSizLOkRFAl3qzVc/Op/u5YkHHa4pf/3DOYHthLQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@esbuild/linux-arm64@0.28.1':
+ resolution: {integrity: sha512-yHs+0uc8+nvEAfAfxrWQKK5peSNzBc4PegcMO0EJ2hT71uA7vB8Ihg2e77R2P7SG5uYjPbHlLLmve4LLLRCf0g==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [linux]
+
+ '@esbuild/linux-arm@0.28.1':
+ resolution: {integrity: sha512-qVXBOHQS+d5Y722GwJzJUtOLlX7km3CraOaGormF1pDtPd2C/l1SHRPgjLunLGe51Sh5YYWKMFDyV4SxgMQYTQ==}
+ engines: {node: '>=18'}
+ cpu: [arm]
+ os: [linux]
+
+ '@esbuild/linux-ia32@0.28.1':
+ resolution: {integrity: sha512-d1z4ZuP0ajrfz/FhGT4vv278rX8KnPPJx8i5+AtK7TYbx9Le9F1hyzurZpkEyjkGa9dUGhQow4C1NmeGvqxN2w==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [linux]
+
+ '@esbuild/linux-loong64@0.28.1':
+ resolution: {integrity: sha512-M5sRjUVZrkm1OAPR3dlOYzNmN+loZKGVi1VUQGrwuqLcbR6qeAz+famMhjASeH3YVKvZz+zT1jlh/keC3Rj/lg==}
+ engines: {node: '>=18'}
+ cpu: [loong64]
+ os: [linux]
+
+ '@esbuild/linux-mips64el@0.28.1':
+ resolution: {integrity: sha512-mRObBZeHh2OxcBFPWE/FjylkRgZdYuiTR3vaTozquCGOH14iP9oN4x4Ge81CoIDYQrXmIxpFumJBu5MtZpnQJQ==}
+ engines: {node: '>=18'}
+ cpu: [mips64el]
+ os: [linux]
+
+ '@esbuild/linux-ppc64@0.28.1':
+ resolution: {integrity: sha512-slScBsMAb3GFDcdrCgLwZtPYRoH2H/youv10QiZyRjmsP48fznoveWytSgCI/R0ZcUgpc0ZhIUEx6LHts8yrfQ==}
+ engines: {node: '>=18'}
+ cpu: [ppc64]
+ os: [linux]
+
+ '@esbuild/linux-riscv64@0.28.1':
+ resolution: {integrity: sha512-kw0owk1o0GFETUJyW0jc0G4Yzs0BHZn0JDZ8JRT088vjJYX777BAs1fDGxAC+q831qOs2DTC96mNsG2opdfyyQ==}
+ engines: {node: '>=18'}
+ cpu: [riscv64]
+ os: [linux]
+
+ '@esbuild/linux-s390x@0.28.1':
+ resolution: {integrity: sha512-/lAIjX8aYFRByhh6L5rYtPEDRqa9de/4V/juOXcta5frjvzXO4/sqEtyytse0g3zZFuWu5cDN0MkLz2qRDD2Ag==}
+ engines: {node: '>=18'}
+ cpu: [s390x]
+ os: [linux]
+
+ '@esbuild/linux-x64@0.28.1':
+ resolution: {integrity: sha512-u/anNYF2mmVOEDwLtnQ1wOr3EZ9sTNGLWrsYGYwHWzGA3Si84IOkHXlbWTD1NB+9/1lcnweYKO54uhxZydNzfA==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [linux]
+
+ '@esbuild/netbsd-arm64@0.28.1':
+ resolution: {integrity: sha512-oks0DYbLwWMmaakTsCb+zL4E+aHRVLom9IJZOAthMQEPiQmydXHkziYEsGYRx0uNV/IjEKGAV941JzH02pflqw==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [netbsd]
+
+ '@esbuild/netbsd-x64@0.28.1':
+ resolution: {integrity: sha512-aeL6lAnN89Hz43Mlh1G8ARasbuoYvSITDEx0tHh5b7jJnHcssqgjy9Yx430GDpmCa6OyrKoS0aNRjKundRizGg==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [netbsd]
+
+ '@esbuild/openbsd-arm64@0.28.1':
+ resolution: {integrity: sha512-MEFJe5C3R8pwXdZ5Y21oo6m7ePiS0d9pWucn99O/wvyJZChoIQKrQDxKrGeW8F5+T0okTHesAmDeiHDTIq0V/Q==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openbsd]
+
+ '@esbuild/openbsd-x64@0.28.1':
+ resolution: {integrity: sha512-i/ZLIOafE0Z8cI/XANJAixoJL/uRAoS2xOA3rb0xN+KK0K177cMAsQYkzHtBrtMXAKuAc7HGgcWiZ/sRC1Nxgw==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [openbsd]
+
+ '@esbuild/openharmony-arm64@0.28.1':
+ resolution: {integrity: sha512-ge+Z7EXFNt2BO1oAMsVpiQ8EwndV9i1xXerAeTIK7AtPs3bKFXQM7nlRxDSIUIMeueR1CNXxqztLzdNeReKBJg==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@esbuild/sunos-x64@0.28.1':
+ resolution: {integrity: sha512-BEjgtECkL3vY+SaSQ6nzVfiALUeFxpawyp8Jmf5PtYhf1Ug40N1h/hxlhts+f1FvSvarEigdxS3BlSMI2PJLcQ==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [sunos]
+
+ '@esbuild/win32-arm64@0.28.1':
+ resolution: {integrity: sha512-lCv9eK/H6ZJWbE7bh2nw54CZ9M2nupBxJcTsdk/QQnWkdSjKGuxmmH8/GWrlT1eMmZfn4dGcCjRte397WqfQXA==}
+ engines: {node: '>=18'}
+ cpu: [arm64]
+ os: [win32]
+
+ '@esbuild/win32-ia32@0.28.1':
+ resolution: {integrity: sha512-zvb/mB2bSCoJOpoCBgYKKpX6YM6mJBlBUVUtVj41DlZJVEB6/0CKlRYxP5wWl1C1ILiCoAU5wZZ4q1P3qeS6Eg==}
+ engines: {node: '>=18'}
+ cpu: [ia32]
+ os: [win32]
+
+ '@esbuild/win32-x64@0.28.1':
+ resolution: {integrity: sha512-bm4Mowrv+GXMlpWX++EcXw/iLyd1o3+bJkC2DkWXYVvgZCqD/bSj9ctZeAMC3cIxgjRVR2Dufaiu4YPxr5gW1A==}
+ engines: {node: '>=18'}
+ cpu: [x64]
+ os: [win32]
+
+ '@eslint-community/eslint-utils@4.9.1':
+ resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+ peerDependencies:
+ eslint: ^6.0.0 || ^7.0.0 || >=8.0.0
+
+ '@eslint-community/regexpp@4.12.2':
+ resolution: {integrity: sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==}
+ engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0}
+
+ '@eslint/config-array@0.21.2':
+ resolution: {integrity: sha512-nJl2KGTlrf9GjLimgIru+V/mzgSK0ABCDQRvxw5BjURL7WfH5uoWmizbH7QB6MmnMBd8cIC9uceWnezL1VZWWw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/config-helpers@0.4.2':
+ resolution: {integrity: sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@0.17.0':
+ resolution: {integrity: sha512-yL/sLrpmtDaFEiUj1osRP4TI2MDz1AddJL+jZ7KSqvBuliN4xqYY54IfdN8qD8Toa6g1iloph1fxQNkjOxrrpQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/core@1.2.1':
+ resolution: {integrity: sha512-MwcE1P+AZ4C6DWlpin/OmOA54mmIZ/+xZuJiQd4SyB29oAJjN30UW9wkKNptW2ctp4cEsvhlLY/CsQ1uoHDloQ==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@eslint/eslintrc@3.3.5':
+ resolution: {integrity: sha512-4IlJx0X0qftVsN5E+/vGujTRIFtwuLbNsVUe7TO6zYPDR1O6nFwvwhIKEKSrl6dZchmYBITazxKoUYOjdtjlRg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/js@9.39.4':
+ resolution: {integrity: sha512-nE7DEIchvtiFTwBw4Lfbu59PG+kCofhjsKaCWzxTpt4lfRjRMqG6uMBzKXuEcyXhOHoUp9riAm7/aWYGhXZ9cw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/object-schema@2.1.7':
+ resolution: {integrity: sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/plugin-kit@0.4.1':
+ resolution: {integrity: sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@eslint/plugin-kit@0.7.2':
+ resolution: {integrity: sha512-+CNAzxglkrpNf/kKywqQfk74QjtceuOE7Qm+AF8miRvPF/wmmK5+OJOgVh3AVTT3RP2mH3+FOaxlE5v72owk0A==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@felixicaza/eslint-config@0.1.2':
+ resolution: {integrity: sha512-/YmOASIeO/zyCnWlLu6xufRhaWGb5HJmRwYQ8AdSzvIwhizteeofG/wNuiyKTDM4l9ulXz1iltz/QWoJUK60Ww==}
+ peerDependencies:
+ eslint: '>=9.38.0'
+
+ '@felixicaza/oxlint-config@0.1.3':
+ resolution: {integrity: sha512-A0XUaWbxqc0DEolcNmRWZZkedIbJWh8FubiJoGtLMwj5nexaJINs8QvSZcoU/ptly5IySSwpeCgomKoN30IcNA==}
+ peerDependencies:
+ oxlint: '>=1.0.0'
+
+ '@felixicaza/tsdown-config@0.1.3':
+ resolution: {integrity: sha512-SVbKV2QqW7+Xiv42JKIOVE4bOsz3B4Xk8Omf3b4yPwaH8HqXA0PU8TmYlT7WeiumnQWxUbOc75f9AmGZspRhQA==}
+ peerDependencies:
+ tsdown: ^0.22.0
+
+ '@humanfs/core@0.19.2':
+ resolution: {integrity: sha512-UhXNm+CFMWcbChXywFwkmhqjs3PRCmcSa/hfBgLIb7oQ5HNb1wS0icWsGtSAUNgefHeI+eBrA8I1fxmbHsGdvA==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/node@0.16.8':
+ resolution: {integrity: sha512-gE1eQNZ3R++kTzFUpdGlpmy8kDZD/MLyHqDwqjkVQI0JMdI1D51sy1H958PNXYkM2rAac7e5/CnIKZrHtPh3BQ==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanfs/types@0.15.0':
+ resolution: {integrity: sha512-ZZ1w0aoQkwuUuC7Yf+7sdeaNfqQiiLcSRbfI08oAxqLtpXQr9AIVX7Ay7HLDuiLYAaFPu8oBYNq/QIi9URHJ3Q==}
+ engines: {node: '>=18.18.0'}
+
+ '@humanwhocodes/module-importer@1.0.1':
+ resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==}
+ engines: {node: '>=12.22'}
+
+ '@humanwhocodes/retry@0.4.3':
+ resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==}
+ engines: {node: '>=18.18'}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ resolution: {integrity: sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==}
+
+ '@jridgewell/remapping@2.3.5':
+ resolution: {integrity: sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==}
+
+ '@jridgewell/resolve-uri@3.1.2':
+ resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==}
+ engines: {node: '>=6.0.0'}
+
+ '@jridgewell/sourcemap-codec@1.5.5':
+ resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ resolution: {integrity: sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==}
+
+ '@napi-rs/wasm-runtime@1.1.5':
+ resolution: {integrity: sha512-AWPoBRJ9tsnVhor4sjO7rkni+7p+2IAEFj6cx06UgP10jkQHqay/36uRV/bFkgrh18D9vb4cr8Q0Pthskgzy+Q==}
+ peerDependencies:
+ '@emnapi/core': ^1.7.1
+ '@emnapi/runtime': ^1.7.1
+
+ '@nodelib/fs.scandir@2.1.5':
+ resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.stat@2.0.5':
+ resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==}
+ engines: {node: '>= 8'}
+
+ '@nodelib/fs.walk@1.2.8':
+ resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==}
+ engines: {node: '>= 8'}
+
+ '@ota-meshi/ast-token-store@0.3.0':
+ resolution: {integrity: sha512-XRO0zi2NIUKq2lUk3T1ecFSld1fMWRKE6naRFGkgkdeosx7IslyUKNv5Dcb5PJTja9tHJoFu0v/7yEpAkrkrTg==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ '@oxc-parser/binding-android-arm-eabi@0.126.0':
+ resolution: {integrity: sha512-svyoHt25J4741QJ5aa4R+h0iiBeSRt63Lr3aAZcxy2c/NeSE1IfDeMnSij6rIg7EjxkdlXzz613wUjeCeilBNA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxc-parser/binding-android-arm64@0.126.0':
+ resolution: {integrity: sha512-hPEBRKgplp1mG9GkINFsr4JVMDNrGJLOqfDaadTWpAoTnzYR5Rmv8RMvB3hJZpiNvbk1aacopdHUP1pggMQ/cw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxc-parser/binding-darwin-arm64@0.126.0':
+ resolution: {integrity: sha512-ccRpu9sdYmznePJQG5halhs0FW5tw5a8zRSoZXOzM1OjoeZ4jiRRruFiPclsD59edoVAK1l83dvfjWz1nQi6lg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxc-parser/binding-darwin-x64@0.126.0':
+ resolution: {integrity: sha512-CHB4zVjNSKqx8Fw9pHowzQQnjjuq04i4Ng0Avj+DixlwhwAoMYqlFbocYIlbg+q3zOLGlm7vEHm83jqEMitnyg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxc-parser/binding-freebsd-x64@0.126.0':
+ resolution: {integrity: sha512-RQ3nEJdcDKBfBjmLJ3Vl1d0KQERPV1P8eUrnBm7+VTYyoaJSPLVFuPg1mlD1hk3n0/879VLFMfusFkBal4ssWQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.126.0':
+ resolution: {integrity: sha512-onipc2wCDA7Bauzb4KK1mab0GsEDf4ujiIfWECdnmY/2LlzAoX3xdQRLAUyEDB1kn3yilHBrkmXDdHluyHXxiw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-parser/binding-linux-arm-musleabihf@0.126.0':
+ resolution: {integrity: sha512-5BuJJPohrV5NJ8lmcYOMbfRCUGoYH5J9HZHeuqOLwkHXWAuPMN3X1h8bC/2mWjmosdbfTtmyIdX3spS/TkqKNg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxc-parser/binding-linux-arm64-gnu@0.126.0':
+ resolution: {integrity: sha512-r2KApRgm2pOJaduRm6GOT8x0whcr67AyejNkSdzPt34GJ+Y3axcXN2mwlTs+8lfO/SSmpO5ZJGYiHYnxEE0jkw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-arm64-musl@0.126.0':
+ resolution: {integrity: sha512-FQ+MMh7MT0Dr/u8+RWmWKlfoeWPQyHDbhhxJShJlYtROXXPHsRs9EvmQOZZ3sx4Nn7JU8NX+oyw2YzQ7anBJcA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-ppc64-gnu@0.126.0':
+ resolution: {integrity: sha512-Wv/T8C98hRQhGTlx2XFyLn5raRMp9U1lOQD+YnXNgAr7wHbJJpZ8mDBU7Rw+M3WytGcGTFcr6kqgfyQeHVtLbQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.126.0':
+ resolution: {integrity: sha512-DHx1rT1zauW0ZbLHOiQh5AC9Xs3UkWx2XmfZHs+7nnWYr3sagrufoUQC+/XPwwjMIlCFXiFGM0sFh3TyOCZwqA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.126.0':
+ resolution: {integrity: sha512-umDc2mTShH0U2zcEYf8mIJ163seLJNn54ZUZYeI5jD4qlg9izPwoLrC2aNPKlMJTu6u/ysmQWiEvIiaAG+INkw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.126.0':
+ resolution: {integrity: sha512-PXXeWayclRtO1pxQEeCpiqIglQdhK2mAI2VX5xnsWdImzSB5GpoQ8TNw7vTCKk2k+GZuxl+q1knncidjCyUP9w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-x64-gnu@0.126.0':
+ resolution: {integrity: sha512-wzocjxm34TbB3bFlqG65JiLtvf6ZDg2ZxRkLLbgXwDQUNU+0MPjQN8zy/0jBKNA5fnPLk3XeVdZ7Uin+7+CVkg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxc-parser/binding-linux-x64-musl@0.126.0':
+ resolution: {integrity: sha512-e83uftP60jmkPs2+CW6T6A1GYzN2H6IumDAiTntv9WyHR73PI3ImHNBkYqnA3ukeKI3xjcCbhSh9QeJWmufxGQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxc-parser/binding-openharmony-arm64@0.126.0':
+ resolution: {integrity: sha512-4WiOILHnPrTDY2/L4mE6PZCYwLN1d3ghma6BuTJ452CCgzRMt3uFplCtR+o3r9zdUWJYb370UizpI9CUcWXr1A==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxc-parser/binding-wasm32-wasi@0.126.0':
+ resolution: {integrity: sha512-Y17hhnrQTrxgAxAyAq401vnN9URsAL4s5AjqpG1NDsXSlhe1yBNnns+rC2P6xcMoitgX5nKH2ryYt9oiFRlzLw==}
+ engines: {node: '>=14.0.0'}
+ cpu: [wasm32]
+
+ '@oxc-parser/binding-win32-arm64-msvc@0.126.0':
+ resolution: {integrity: sha512-Znug1u1iRvT4VC3jANz6nhGBHsFwEFMxuimYpJFwMtsB6H5FcEoZRMmH26tHkSTD03JvDmG+gB65W3ajLjPcSw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-ia32-msvc@0.126.0':
+ resolution: {integrity: sha512-qrw7mx5hFFTxVSXToOA40hpnjgNB/DJprZchtB4rDKNLKqkD3F26HbzaQeH1nxAKej0efSZfJd5Sw3qdtOLGhw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxc-parser/binding-win32-x64-msvc@0.126.0':
+ resolution: {integrity: sha512-ibB1s+mPUFXvS7MFJO2jpw/aCNs/P6ifnWlRyTYB+WYBpniOiCcHQQskZneJtwcjQMDRol3RGG3ihoYnzXSY4w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxc-project/types@0.126.0':
+ resolution: {integrity: sha512-oGfVtjAgwQVVpfBrbtk4e1XDyWHRFta6BS3GWVzrF8xYBT2VGQAk39yJS/wFSMrZqoiCU4oghT3Ch0HaHGIHcQ==}
+
+ '@oxc-project/types@0.133.0':
+ resolution: {integrity: sha512-KzkdCd6Uxqnf6l3HOw1xfatAlUURA0g14cvBYFyJ5SaNOQbOUvBr9PKArcPcrNIeRsBdgcUzOGrhKveVpvOIGA==}
+
+ '@oxc-project/types@0.137.0':
+ resolution: {integrity: sha512-WT+Gb24i8hmvo85AIv2oEYouEXkRlKAlT9WaCa3TfLgNCN+GhrJOGZuIlMouAh38Qe4QOx26eUOVsq70qXrywA==}
+
+ '@oxlint-tsgolint/darwin-arm64@0.23.0':
+ resolution: {integrity: sha512-gOs9PVr2wEg4ox9z0aJo+RKhhImW86YL5N6yav8BK/rgPsIrwN/igSZ+pbRr723NFvUNKde9fgMhRA6JrXAOZw==}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxlint-tsgolint/darwin-x64@0.23.0':
+ resolution: {integrity: sha512-kjJ8B+7n4tB9VJdxS5A9GdJt6/bYpzbu4lXp2uO1S3sRmCB5gDEABlGoiePNApRWaW+xqL4b4xgiE727jSLhuA==}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxlint-tsgolint/linux-arm64@0.23.0':
+ resolution: {integrity: sha512-6dCZuKNu135seMXilkRk9SpCx6i1XgmiipYGalLij5WVRX6ZYS8c4xI7preN/zv9fCXhsQclTIMDu2Y/cytTjw==}
+ cpu: [arm64]
+ os: [linux]
+
+ '@oxlint-tsgolint/linux-x64@0.23.0':
+ resolution: {integrity: sha512-3bdilnyA7kmSTjK27rvjIjSxL5SIg3wt7vwNiRkouWB83ytssyKnuGvxSYJxgMEmFpSutzaBzcCUM2jDtPGcgA==}
+ cpu: [x64]
+ os: [linux]
+
+ '@oxlint-tsgolint/win32-arm64@0.23.0':
+ resolution: {integrity: sha512-j+OEp44SVYiQ+ZD+uttsX7u6L9SvmbbQ77SO1pSFCcJlsVMeCk8qZsjhKfGKuT/jIA+ipOJMVs/+pqUfObBWNw==}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxlint-tsgolint/win32-x64@0.23.0':
+ resolution: {integrity: sha512-5MyjFuqf+g8OUPJBSGWHJtmoWnzFJYyOg4To9WMQshZYEWig/vtu7JtJ03VWnzHv9LJkAUeApY0gVCOywFR/iQ==}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxlint/binding-android-arm-eabi@1.67.0':
+ resolution: {integrity: sha512-VrSi571rDv1N8HaEDM+DEX8nmT0y9jJo8tzzW13vsOWTx59xQczCIJx68n2zWOXRT5YKZsOZXp4qkHN/10x4mw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [android]
+
+ '@oxlint/binding-android-arm64@1.67.0':
+ resolution: {integrity: sha512-l6+NdYxMoRohix5r5bbigW16LPicceCwGcQ6LKKuE1kUdjgFfQolJjrJsQYPFetIs78Gxj/G/f5TEGoTCwj9nQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@oxlint/binding-darwin-arm64@1.67.0':
+ resolution: {integrity: sha512-jOzXxS1AxFxhImLIRbtGIMrEwaXcgMw3gR57WB1cRk8ai+vpr6726kxXqVvlNsrXtJ/FrmOm8RxlC0m8SW24Qg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@oxlint/binding-darwin-x64@1.67.0':
+ resolution: {integrity: sha512-3DFAVY94OqjIZHXIPz37yGRSWwOFTAqChQ64/M69GYLawzP0KiwdhDNfqdKKYT0bTR/DNxmMnQsj3ns+8+X/Lg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@oxlint/binding-freebsd-x64@1.67.0':
+ resolution: {integrity: sha512-e4dDKZuLu8TR9DEBssWSDahlPgZBwojTTHZUvnjBRJfJJbpxYCjfjKfi0Z1+CSLMiJBwI2yCDtRM1XJQaARjmg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@oxlint/binding-linux-arm-gnueabihf@1.67.0':
+ resolution: {integrity: sha512-BKytFdcQzbITV3xlnzDUDTEDtbUMCCiC4EaNTDZ4FyT8gdNvBC4gfiLucXp/sQl0XU3p7syTlorUWVVVBZab2g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxlint/binding-linux-arm-musleabihf@1.67.0':
+ resolution: {integrity: sha512-XYAv0esBDX7BpTzRDjVX2Vdj+zndd8ll2dFQiaeQ6zTZr7A8GRDTN7fH3FP3jU+O0vCDx85oH/EtG7BzPgAXuw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@oxlint/binding-linux-arm64-gnu@1.67.0':
+ resolution: {integrity: sha512-zizRMjA0i6u/2B0evgda04iycu+MoNuf1pBy6Eh+1CjC5wMEG7qN5zdDKTCvFc0KSYSDM9QTG3gjZHirgtQuKg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-arm64-musl@1.67.0':
+ resolution: {integrity: sha512-zB/Tf6sUjmmvvbva9Gj3JTJ8rJ9t4I8/U0o6vSRtd0DRIsIuyegBwJAzhSUFQHdMijIRJkW0exs/yBhpw2S20w==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxlint/binding-linux-ppc64-gnu@1.67.0':
+ resolution: {integrity: sha512-kgU40Gt74CK0TCsF51KZymkIwN9U0BajKsMijB52zPqOeZU9NAHkA/NSQkZDHEaCakx42DxhXkODiAqf2b4Gug==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-riscv64-gnu@1.67.0':
+ resolution: {integrity: sha512-tOYhkk/iaG9aD3FvGpBFd1Lrw0x0RaVoJBxjUkfNzS50rC5NS5BteNCwgr8A2zCdADrIIoze6D7u6U5Ic++/iQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-riscv64-musl@1.67.0':
+ resolution: {integrity: sha512-sEtywrPb+0b+tHYl1SDCrw903fiC4eyKoNqzP3v+f2JT3Xcv4NEYG+P8rj+eEnX7IWhqV/xj8/JmcmVj21CXaA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [riscv64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxlint/binding-linux-s390x-gnu@1.67.0':
+ resolution: {integrity: sha512-BvR8Moa0zCLxroOx4vZaZN9nUfwAUpSTwjZdxZyKy4bv3PrzrXrxKR/ZQ0L9wNSvlPhnMJeZfa3q5w6ZCTuN6Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-x64-gnu@1.67.0':
+ resolution: {integrity: sha512-mm2cxM6fksOpq6l0uFws8BUGKAR4dNa/cZCn37Npq7PFbhD5HDJqWfnoIvTaeRKMy5XdS2tO0MA0qbHDrnXAAA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@oxlint/binding-linux-x64-musl@1.67.0':
+ resolution: {integrity: sha512-WmbMuLapKyDlobMkXAaAL0Y+Uczh4LETfIfQsUpbId4Ip8Ai82/jqeYTOoUCkuuhBFapgqP253+d83tLKOksJg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@oxlint/binding-openharmony-arm64@1.67.0':
+ resolution: {integrity: sha512-9g/PqxYJelzzTAOR5Y+RiRqdeydhEuXv2KxNeFcAKQ7UsvnWSY1OP4MsuPMbTO2Pf70tz7mFhl1j13H3fyh+8g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@oxlint/binding-win32-arm64-msvc@1.67.0':
+ resolution: {integrity: sha512-2VhwE6Gatb0vJGnN0TBuQMbKCOiZlSQ/zJvVWYLK4a9d4iDiJOen/yVQkGpmsJ90MuH66fzi0kEKI0jRQMDxGA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@oxlint/binding-win32-ia32-msvc@1.67.0':
+ resolution: {integrity: sha512-EQ3VExXfeM1InbE5+JjufhZZTWy+kHUwgt3yZR7gQ47Je/mE0WspQPan0OJznh493L5anM210YNJtH1PXjTSFg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ia32]
+ os: [win32]
+
+ '@oxlint/binding-win32-x64-msvc@1.67.0':
+ resolution: {integrity: sha512-bw24y+/1MHS4QDkons3YyHkPT9uCMoLHHgQhb+mb8NOjTYwub1CZ+K9Ngr8aO5DMrDrkqHwTzlTwFP2vS8Y/ZQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@oxlint/plugins@1.71.0':
+ resolution: {integrity: sha512-bxWZ6oPcrrsrQ0dhTyche3sOQDI5s3mEMGcOez3drE7gLbRXtsq9rY1va95IRCt4q167M9zHJCm0y1UJIFEo1g==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ '@pkgr/core@0.3.6':
+ resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+
+ '@quansync/fs@1.0.0':
+ resolution: {integrity: sha512-4TJ3DFtlf1L5LDMaM6CanJ/0lckGNtJcMjQ1NAV6zDmA0tEHKZtxNKin8EgPaVX1YzljbxckyT2tJrpQKAtngQ==}
+
+ '@rolldown/binding-android-arm64@1.0.3':
+ resolution: {integrity: sha512-454rs7jHngixp/NMxd5srYD57OnzSlZ/eFTETjORQHLwJG1lRtmNOJcBerZlfu4GjKqeq8aCCIQrMdHyhI51Hw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-android-arm64@1.1.2':
+ resolution: {integrity: sha512-2cZ+7xRS+DBcuJBJKnfzsbleumJhBqSlJVpuzHC0nTqfd3QQ7Vx2/x5YR/D7cBamKSeWplwo82Fn9lqYUDEMfA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [android]
+
+ '@rolldown/binding-darwin-arm64@1.0.3':
+ resolution: {integrity: sha512-PcAhP+ynjURNyy8SKGl5DQP94aGuB/7JrXJb/t7P+hanXvQVMWzUvRRhBAcg/lNRadBhoUPqSoP4xw5tR/KBEA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-arm64@1.1.2':
+ resolution: {integrity: sha512-RkPMJnygxsgOYdkfqgpwY0/Fzm8d0VQe6HGU2/B00Xa9eqdLbrII+DOKAodbJAn3ZL1AJxGHkZRPYazgGY6Ljw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.0.3':
+ resolution: {integrity: sha512-9YpfeUvSE2RS7wysJ81uOZkXJz7f7Q55H2Gvp3VEw/EsahqDtrphrZ0EwDLK5vvKOzaCrBsjF8JmnMLcUt78Gg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-darwin-x64@1.1.2':
+ resolution: {integrity: sha512-Uiczh6vFhwyfd7WNe7Q7mCA4KxAiLdz7jPE/WGizfRpIieoyFuNVMmM8HqZ9HwudTkY6/AeMQwlNJ9NJijguWw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [darwin]
+
+ '@rolldown/binding-freebsd-x64@1.0.3':
+ resolution: {integrity: sha512-yB1IlAsSNHncV6SCTL27/MVGR5htvQsoGxIv5KMGXALp+Ll1wYsn+x98M9MW7qa+NdSbvrrY7ANI4wLJ0n1e6g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-freebsd-x64@1.1.2':
+ resolution: {integrity: sha512-+TpdtTRgHiJFjCVFbw311SuLk3KfytPOQQn+VlAEv+gBxYPtL7E6JS9e/tk+8CwxhIZvemJKo4rTKgfWNsKkkA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [freebsd]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.3':
+ resolution: {integrity: sha512-Yi30IVAAfLUCy2MseFjbB1jAMDl1VMCAas5StnYp8da9+CKvMd2H2cbEjWcw5NPaPqzvYkVIaF1nNUG+b7u/sw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.1.2':
+ resolution: {integrity: sha512-4lv1/tkmi7ueIVHnyreaOeUpiZP26BH9rRy6hoYfR9310A2B9nUEVRDvBx69vx64Nr3eTPPRkyciqJJs+j9Jmw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm]
+ os: [linux]
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.3':
+ resolution: {integrity: sha512-jsO7R8To+AdlYgUmN5sHSCZbfhtMBkO0WUx8iORQnPcMMdgr7qM2DQmMwgabs3GhNztdmoKkMKQFHD6DTMCIQw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-arm64-gnu@1.1.2':
+ resolution: {integrity: sha512-gBSUVO0eaWgw1JMjK3gB8BMlX2Mk148s2lTiVT3e9vjVxbl7UDfMWWY8CfIaaqiXuM9fVTMxIpUz6CAo/B6Vlw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-arm64-musl@1.0.3':
+ resolution: {integrity: sha512-VWkUHwWriDciit80wleYwKILoR/KMvxh/IdwS/paX+ZgpuRpCrKLUdadJbc0NpBEiyhpYawsJ73j9aCvOH+f7Q==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-arm64-musl@1.1.2':
+ resolution: {integrity: sha512-LjQP/iZLBu8o8PjIfk4x3At0/mT6h282pvz8Z5LAyhGbu/kDezyO7ea62rF5uoqmgnIYqbN/MqJ3Si3Aymi7xQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.3':
+ resolution: {integrity: sha512-5f1laC0SlIR0yDbFCd8acUhvJIag6N3zC5P7oUPN6wX0aOma+uKJ0wBDH5aq7I1PVI2ttTlhJwzwRIBnLiSGEg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-ppc64-gnu@1.1.2':
+ resolution: {integrity: sha512-X/7bVLWelEsbyWDUSXt7zVsTniLLPIY2n1rH58qr78l9i7MNbbxBWD8gI2vRfBWf4NUXJCUuQnfZDsp32LqsfQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [ppc64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.3':
+ resolution: {integrity: sha512-Iq4ko0r4XsgbrF/LunNgHtAGLRRVE2kXonAXQ/MV0mC6jQpMOhW1SvtZja2EhC/kd05++bP78dsqBeIQyYJ6Yg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-s390x-gnu@1.1.2':
+ resolution: {integrity: sha512-gb6dYKW/1KDorGXyy48glEBJs/sxVSC5pcVrox/pFGV4mvwSFeg2sK5L2tRkVsVlh7kueqOgg4GEcuipJcGuKg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [s390x]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-gnu@1.0.3':
+ resolution: {integrity: sha512-B8m6tD5+/N5FeNQFbKlLA/2yVq9ycQP1SeedyEYYKWBNR3ZQbkvIUcNnDNM03lO1l5F2roiiFJGgvoLLyZXtSg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-gnu@1.1.2':
+ resolution: {integrity: sha512-JY4w85pU3iAiJVMh5nuk4/Mh9GjMsupe8MrIN53rwxAZW64GKrWeJBuN6SxQg9QTU5uB1cxyhDzW8jqRn1EABw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ '@rolldown/binding-linux-x64-musl@1.0.3':
+ resolution: {integrity: sha512-pSdpdUJHkuCxun9LE7jvgUB9qsRgaiyNNCX7m/AvHTcq67AiT/Yhoxvw5zPfhrM8k/BfP8ce/hMOpthKDpEUow==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-linux-x64-musl@1.1.2':
+ resolution: {integrity: sha512-xvpA7o5KCYLB0Rwscmuylb1/zHHSUx4g4xilm4prC5jP76pEUlzBmMbgpbh7bVDbId4NcfT96gN5i6mE6UDaiw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ '@rolldown/binding-openharmony-arm64@1.0.3':
+ resolution: {integrity: sha512-OXXS3RKJgX2uLwM+gYyuH5omcH8fL1LJs96pZGgtetVCahON57+d4SJHzTgZiOjxgGkSnpXpOsWuPDGAKAigEg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-openharmony-arm64@1.1.2':
+ resolution: {integrity: sha512-p/ts6KBLjuk49Bp21XH77poQGt02iNz7ChgHep7tudPOaLinR/De/RHdxF8w8Yj4r/bF/bqXwH6PZrB2sA+Nvw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [openharmony]
+
+ '@rolldown/binding-wasm32-wasi@1.0.3':
+ resolution: {integrity: sha512-JTtb8BWFynicNSoPrehsCzBtOKjZ6jhMiPFEmOiuXg1Fl8dn2KHQob+GuPSGR0dryQa1PQJbzjF3dqO/whhjLg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
+
+ '@rolldown/binding-wasm32-wasi@1.1.2':
+ resolution: {integrity: sha512-VMu/wmrZ9hJzYlRhbw7jK5PODlugyKZ5mOdX78+lS8OvuFkWNQdz1pFLrI2p3P0pjXOmUZ7B48o5VnMH9QOGtg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [wasm32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.3':
+ resolution: {integrity: sha512-gEdFFEN70A/jxb2svrWsN3aDL7OUtmvlOy+6fa2jxG8K0wQ1ZbdeLGnidov6Yu5/733dI5ySfzFlQ/cb0bSz1g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-arm64-msvc@1.1.2':
+ resolution: {integrity: sha512-xtUJqs8qEkuSviS0n1tsohaPuz3a1SPhZywOji4Oo+sgrJs8daEDMZ0QtqL0OS7dx8PoVpg2J/ZZycPY5I2+Zg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [arm64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.0.3':
+ resolution: {integrity: sha512-eXB7CHuaQdqmJcc3koCNtNPmT/bj2gc999kUFgBxG8Ac0NdgXc4rkCHhqrgrhN3zddvvvrgzj1e90SuSfmyIXA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/binding-win32-x64-msvc@1.1.2':
+ resolution: {integrity: sha512-85YiLQqjUKgSO/Zjnf9e0XIn5Ymrh1fLDWBeAkZqpuBR/3R8TpfoHXuyblqyQrftSSgWO9qpcHN8mkyKsLraoA==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ cpu: [x64]
+ os: [win32]
+
+ '@rolldown/pluginutils@1.0.1':
+ resolution: {integrity: sha512-2j9bGt5Jh8hj+vPtgzPtl72j0yRxHAyumoo6TNfAjsLB04UtpSvPbPcDcBMxz7n+9CYB0c1GxQFxYRg2jimqGw==}
+
+ '@sindresorhus/base62@1.0.0':
+ resolution: {integrity: sha512-TeheYy0ILzBEI/CO55CP6zJCSdSWeRtGnHy8U8dWSUH4I68iqTsy7HkMktR4xakThc9jotkPQUXT4ITdbV7cHA==}
+ engines: {node: '>=18'}
+
+ '@standard-schema/spec@1.1.0':
+ resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==}
+
+ '@stylistic/eslint-plugin@5.10.0':
+ resolution: {integrity: sha512-nPK52ZHvot8Ju/0A4ucSX1dcPV2/1clx0kLcH5wDmrE4naKso7TUC/voUyU1O9OTKTrR6MYip6LP0ogEMQ9jPQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: ^9.0.0 || ^10.0.0
+
+ '@tybys/wasm-util@0.10.2':
+ resolution: {integrity: sha512-RoBvJ2X0wuKlWFIjrwffGw1IqZHKQqzIchKaadZZfnNpsAYp2mM0h36JtPCjNDAHGgYez/15uMBpfGwchhiMgg==}
+
+ '@types/chai@5.2.3':
+ resolution: {integrity: sha512-Mw558oeA9fFbv65/y4mHtXDs9bPnFMZAL/jxdPFUpOHHIXX91mcgEHbS5Lahr+pwZFR8A7GQleRWeI6cGFC2UA==}
+
+ '@types/deep-eql@4.0.2':
+ resolution: {integrity: sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw==}
+
+ '@types/estree@1.0.9':
+ resolution: {integrity: sha512-GhdPgy1el4/ImP05X05Uw4cw2/M93BCUmnEvWZNStlCzEKME4Fkk+YpoA5OiHNQmoS7Cafb8Xa3Pya8m1Qrzeg==}
+
+ '@types/jsesc@2.5.1':
+ resolution: {integrity: sha512-9VN+6yxLOPLOav+7PwjZbxiID2bVaeq0ED4qSQmdQTdjnXJSaCVKTR58t15oqH1H5t8Ng2ZX1SabJVoN9Q34bw==}
+
+ '@types/json-schema@7.0.15':
+ resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==}
+
+ '@types/node@25.9.3':
+ resolution: {integrity: sha512-603BddQMv3pUcr4U2dhujk83N2tTDVr/34wII2B6bJy6g+8WD6yUb11jszNs0gdi4PesVWl7ABt8nYMVpnLUcg==}
+
+ '@typescript-eslint/scope-manager@8.61.1':
+ resolution: {integrity: sha512-L2bdIeoQS8FlKAvONAr20w6OcLXeB+qiDKbAooS9A0Ben+iSIkBef0FxqwKWYqt5sa0i4KJtxVyVmhMylKzF5w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/types@8.61.1':
+ resolution: {integrity: sha512-G+CRlPqLv7Bz1IZVs03x5K59F1veqL0EJUROAdGhKsEq8qOiRiZbI+HUojPq5l0fEGOKModD9br6lObhB8zkoA==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@typescript-eslint/visitor-keys@8.61.1':
+ resolution: {integrity: sha512-6fJ9MHWtK14C1DSkiMlHUSOmrVebL7150xZJBlJiL62jjhIA4JmOq6flwBgDxIdBKKdoiZRel+dfPD5MLfny3w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ '@vitest/expect@4.1.9':
+ resolution: {integrity: sha512-vl/rYsUKcBr3SnQn166+XR5ZQcgMx3DQhFWdfli/cWpLnLUmbxZvyrJZotLFUryib+LtArYMSTJ5RbQ57ZqrlA==}
+
+ '@vitest/mocker@4.1.9':
+ resolution: {integrity: sha512-EVkXzBjrPGM+cK8/ANWgBrkUCfJfb38/EfTSO8h7pWvKkyPkpWxvR7BkD2MyItMF62C97zAEoqdpUixwR/e+Rw==}
+ peerDependencies:
+ msw: ^2.4.9
+ vite: ^6.0.0 || ^7.0.0 || ^8.0.0
+ peerDependenciesMeta:
+ msw:
+ optional: true
+ vite:
+ optional: true
+
+ '@vitest/pretty-format@4.1.9':
+ resolution: {integrity: sha512-s0iufns3iIFitdgm+YR7g1whCAaGtXz459VS9/PqyKDEEFgYIhsHOQmXgIgDuYCt7DeQmiZT0Qe2OA2p4ZPu5A==}
+
+ '@vitest/runner@4.1.9':
+ resolution: {integrity: sha512-KXLMDtc7oe70+3mJfGrPUWPesswH+3sTxAMAMl8DG7I8IUQT4XW718dY5ID3vPUcmlu27CcKfY4P3h3I29SLJg==}
+
+ '@vitest/snapshot@4.1.9':
+ resolution: {integrity: sha512-Jc7RKGNBo8Z28WYIm0Niej4xdSPByRf6mU58VpHQkd6Zh05rlnA+twjbK5HyeIGHxrzsc3mJgS43uM0CZKzaIA==}
+
+ '@vitest/spy@4.1.9':
+ resolution: {integrity: sha512-fHpsS6mIi+PiEW+vcRVOMkX1oSaPKne3VOclSFICPcGOmfKgXPU5iAah+wcNcj2xPrCCmfq99IDGf+EojhhvhA==}
+
+ '@vitest/utils@4.1.9':
+ resolution: {integrity: sha512-A51o8ymO5PpqlWNnBP9ZHPXDIpuMtTLlGSjN7la4US+LJzoUMyhwjA5QXlm39JexgwHKW4Xjs8Z2d3dLCXOeuA==}
+
+ acorn-jsx@5.3.2:
+ resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==}
+ peerDependencies:
+ acorn: ^6.0.0 || ^7.0.0 || ^8.0.0
+
+ acorn@8.17.0:
+ resolution: {integrity: sha512-xRQbDb9BnwDafYNn6Vwl839DYVjqXYb1XVGtWAZ1kcDc6iwAL4hg3B1dZlRiuENFeO2H53gFG3in621AdERVAg==}
+ engines: {node: '>=0.4.0'}
+ hasBin: true
+
+ ajv@6.15.0:
+ resolution: {integrity: sha512-fgFx7Hfoq60ytK2c7DhnF8jIvzYgOMxfugjLOSMHjLIPgenqa7S7oaagATUq99mV6IYvN2tRmC0wnTYX6iPbMw==}
+
+ ansi-styles@4.3.0:
+ resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==}
+ engines: {node: '>=8'}
+
+ ansis@4.3.1:
+ resolution: {integrity: sha512-BJ8/l4R5LRE7hW9WdSuGYrLSHi2ynxeFpDFbH0K/CgNeY/tyhk+vO6TYxXC5r5CpUhNVX310xzPsN/H9lCdfOA==}
+ engines: {node: '>=14'}
+
+ are-docs-informative@0.0.2:
+ resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==}
+ engines: {node: '>=14'}
+
+ argparse@2.0.1:
+ resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==}
+
+ args-tokenizer@0.3.0:
+ resolution: {integrity: sha512-xXAd7G2Mll5W8uo37GETpQ2VrE84M181Z7ugHFGQnJZ50M2mbOv0osSZ9VsSgPfJQ+LVG0prSi0th+ELMsno7Q==}
+
+ aria-query@5.3.2:
+ resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==}
+ engines: {node: '>= 0.4'}
+
+ array-buffer-byte-length@1.0.2:
+ resolution: {integrity: sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw==}
+ engines: {node: '>= 0.4'}
+
+ array-includes@3.1.9:
+ resolution: {integrity: sha512-FmeCCAenzH0KH381SPT5FZmiA/TmpndpcaShhfgEN9eCVjnFBqq3l1xrI42y8+PPLI6hypzou4GXw00WHmPBLQ==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.flat@1.3.3:
+ resolution: {integrity: sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==}
+ engines: {node: '>= 0.4'}
+
+ array.prototype.flatmap@1.3.3:
+ resolution: {integrity: sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==}
+ engines: {node: '>= 0.4'}
+
+ arraybuffer.prototype.slice@1.0.4:
+ resolution: {integrity: sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==}
+ engines: {node: '>= 0.4'}
+
+ assertion-error@2.0.1:
+ resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==}
+ engines: {node: '>=12'}
+
+ ast-kit@3.0.0:
+ resolution: {integrity: sha512-8OG92q3R35qjC/4i6BLBMg8IB+fClWu/1PEwg2Z9Rn+BuNaiEgJzpzn+pxWOdHJWDCAwu2JP0wCDTozAM4QirQ==}
+ engines: {node: ^22.18.0 || >=24.11.0}
+
+ ast-types-flow@0.0.8:
+ resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==}
+
+ astro-eslint-parser@1.4.0:
+ resolution: {integrity: sha512-+QDcgc7e+au6EZ0YjMmRRjNoQo5bDMlaR45aWDoFsuxQTCM9qmCHRoiKJPELgckJ8Wmr7vcfpa9eCDHBFh6G4w==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ astrojs-compiler-sync@1.1.1:
+ resolution: {integrity: sha512-0mKvB9sDQRIZPsEJadw6OaFbGJ92cJPPR++ICca9XEyiUAZqgVuk25jNmzHPT0KF80rI94trSZrUR5iHFXGGOQ==}
+ engines: {node: ^18.18.0 || >=20.9.0}
+ peerDependencies:
+ '@astrojs/compiler': '>=0.27.0'
+
+ async-function@1.0.0:
+ resolution: {integrity: sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA==}
+ engines: {node: '>= 0.4'}
+
+ available-typed-arrays@1.0.7:
+ resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==}
+ engines: {node: '>= 0.4'}
+
+ axe-core@4.12.1:
+ resolution: {integrity: sha512-s7iGf5GaVMxEG0ENN9x+xTr7GFZCb1ZP/1uATUpCEK2X78nDB3RwbtFCo9pGAf9ru+VwoQ464DkaLEeRM08wJA==}
+ engines: {node: '>=4'}
+
+ axobject-query@4.1.0:
+ resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==}
+ engines: {node: '>= 0.4'}
+
+ balanced-match@1.0.2:
+ resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==}
+
+ birpc@4.0.0:
+ resolution: {integrity: sha512-LShSxJP0KTmd101b6DRyGBj57LZxSDYWKitQNW/mi8GRMvZb078Uf9+pveax1DrVL89vm7mWe+TovdI/UDOuPw==}
+
+ brace-expansion@1.1.15:
+ resolution: {integrity: sha512-EwOCDEex4quD37XhqM3omwtMoJjr//isUZz1JopUNWms+4Z2ViyM/k1YIRePpoVNnQhENnxtFjLaxNHrT7xIUg==}
+
+ braces@3.0.3:
+ resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==}
+ engines: {node: '>=8'}
+
+ bumpp@11.1.0:
+ resolution: {integrity: sha512-jdwOGMyX8JIqpQ0N2RMRR87DHZaoJnUtui5lU9LqFfFK5JC0H8qY9uWqXoa+dEWt/K7rOmmsoyiZB8RBM7RPBQ==}
+ engines: {node: '>=20.19.0'}
+ hasBin: true
+
+ cac@7.0.0:
+ resolution: {integrity: sha512-tixWYgm5ZoOD+3g6UTea91eow5z6AAHaho3g0V9CNSNb45gM8SmflpAc+GRd1InC4AqN/07Unrgp56Y94N9hJQ==}
+ engines: {node: '>=20.19.0'}
+
+ call-bind-apply-helpers@1.0.2:
+ resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==}
+ engines: {node: '>= 0.4'}
+
+ call-bind@1.0.9:
+ resolution: {integrity: sha512-a/hy+pNsFUTR+Iz8TCJvXudKVLAnz/DyeSUo10I5yvFDQJBFU2s9uqQpoSrJlroHUKoKqzg+epxyP9lqFdzfBQ==}
+ engines: {node: '>= 0.4'}
+
+ call-bound@1.0.4:
+ resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==}
+ engines: {node: '>= 0.4'}
+
+ callsites@3.1.0:
+ resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==}
+ engines: {node: '>=6'}
+
+ chai@6.2.2:
+ resolution: {integrity: sha512-NUPRluOfOiTKBKvWPtSD4PhFvWCqOi0BGStNWs57X9js7XGTprSmFoz5F0tWhR4WPjNeR9jXqdC7/UpSJTnlRg==}
+ engines: {node: '>=18'}
+
+ chalk@4.1.2:
+ resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==}
+ engines: {node: '>=10'}
+
+ change-case@5.4.4:
+ resolution: {integrity: sha512-HRQyTk2/YPEkt9TnUPbOpr64Uw3KOicFWPVBb+xiHvd6eBx/qPr9xqfBFDT8P2vWsvvz4jbEkfDe71W3VyNu2w==}
+
+ color-convert@2.0.1:
+ resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==}
+ engines: {node: '>=7.0.0'}
+
+ color-name@1.1.4:
+ resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==}
+
+ comment-parser@1.4.6:
+ resolution: {integrity: sha512-ObxuY6vnbWTN6Od72xfwN9DbzC7Y2vv8u1Soi9ahRKL37gb6y1qk6/dgjs+3JWuXJHWvsg3BXIwzd/rkmAwavg==}
+ engines: {node: '>= 12.0.0'}
+
+ concat-map@0.0.1:
+ resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==}
+
+ convert-source-map@2.0.0:
+ resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==}
+
+ cross-spawn@7.0.6:
+ resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==}
+ engines: {node: '>= 8'}
+
+ cssesc@3.0.0:
+ resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
+ engines: {node: '>=4'}
+ hasBin: true
+
+ damerau-levenshtein@1.0.8:
+ resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==}
+
+ data-view-buffer@1.0.2:
+ resolution: {integrity: sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-length@1.0.2:
+ resolution: {integrity: sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==}
+ engines: {node: '>= 0.4'}
+
+ data-view-byte-offset@1.0.1:
+ resolution: {integrity: sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ==}
+ engines: {node: '>= 0.4'}
+
+ debug@4.4.3:
+ resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==}
+ engines: {node: '>=6.0'}
+ peerDependencies:
+ supports-color: '*'
+ peerDependenciesMeta:
+ supports-color:
+ optional: true
+
+ deep-is@0.1.4:
+ resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==}
+
+ define-data-property@1.1.4:
+ resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==}
+ engines: {node: '>= 0.4'}
+
+ define-properties@1.2.1:
+ resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==}
+ engines: {node: '>= 0.4'}
+
+ defu@6.1.7:
+ resolution: {integrity: sha512-7z22QmUWiQ/2d0KkdYmANbRUVABpZ9SNYyH5vx6PZ+nE5bcC0l7uFvEfHlyld/HcGBFTL536ClDt3DEcSlEJAQ==}
+
+ detect-indent@7.0.2:
+ resolution: {integrity: sha512-y+8xyqdGLL+6sh0tVeHcfP/QDd8gUgbasolJJpY7NgeQGSZ739bDtSiaiDgtoicy+mtYB81dKLxO9xRhCyIB3A==}
+ engines: {node: '>=12.20'}
+
+ detect-libc@2.1.2:
+ resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==}
+ engines: {node: '>=8'}
+
+ detect-newline@4.0.1:
+ resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+
+ diff-sequences@29.6.3:
+ resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+
+ dts-minify-lite@0.5.6:
+ resolution: {integrity: sha512-picwwbBZk2VS9iM5wBinIo6G2yf/wnU+JY5xDacTF8kFMSiVeXq8w40xpV9eiGT/HHMWihUN4tgusdY0Y417VA==}
+
+ dts-resolver@3.0.0:
+ resolution: {integrity: sha512-1T1f+z+4tl9XD+m+0HBgWoL/nm0bOIffyWaUuUSBlFg/86IWvfx+wjNaO/ybU0AJzG9/Mi5hBUgGV6zCmWEN7Q==}
+ engines: {node: ^22.18.0 || >=24.0.0}
+ peerDependencies:
+ oxc-resolver: '>=11.0.0'
+ peerDependenciesMeta:
+ oxc-resolver:
+ optional: true
+
+ dunder-proto@1.0.1:
+ resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==}
+ engines: {node: '>= 0.4'}
+
+ emoji-regex@9.2.2:
+ resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==}
+
+ empathic@2.0.1:
+ resolution: {integrity: sha512-YGRs8knHhKHVShLkFET/rWAU8kmHbOV5LwN938RHI0pljAJ1Gf6SzXsSmRaEzcXTtOOmVqJ5+WtQPL5uigY50Q==}
+ engines: {node: '>=14'}
+
+ entities@7.0.1:
+ resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==}
+ engines: {node: '>=0.12'}
+
+ es-abstract-get@1.0.0:
+ resolution: {integrity: sha512-6PMWXpdhshVvFp+FoWYs1EvG1Nj0tvk0dZM+XcK0xMEM1czRVcP6ohqPWHy6qPagSpC8j4+p89WXlT+xXJs/fg==}
+ engines: {node: '>= 0.4'}
+
+ es-abstract@1.24.2:
+ resolution: {integrity: sha512-2FpH9Q5i2RRwyEP1AylXe6nYLR5OhaJTZwmlcP0dL/+JCbgg7yyEo/sEK6HeGZRf3dFpWwThaRHVApXSkW3xeg==}
+ engines: {node: '>= 0.4'}
+
+ es-define-property@1.0.1:
+ resolution: {integrity: sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==}
+ engines: {node: '>= 0.4'}
+
+ es-errors@1.3.0:
+ resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==}
+ engines: {node: '>= 0.4'}
+
+ es-module-lexer@2.1.0:
+ resolution: {integrity: sha512-n27zTYMjYu1aj4MjCWzSP7G9r75utsaoc8m61weK+W8JMBGGQybd43GstCXZ3WNmSFtGT9wi59qQTW6mhTR5LQ==}
+
+ es-object-atoms@1.1.2:
+ resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==}
+ engines: {node: '>= 0.4'}
+
+ es-set-tostringtag@2.1.0:
+ resolution: {integrity: sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==}
+ engines: {node: '>= 0.4'}
+
+ es-shim-unscopables@1.1.0:
+ resolution: {integrity: sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw==}
+ engines: {node: '>= 0.4'}
+
+ es-to-primitive@1.3.1:
+ resolution: {integrity: sha512-CxN9N56HYfd2m/acc/NOFrZQsN9kU4eh+2kk6A707Kz1krH8tKmfrs5RnftB8WNX80T0NS7vSQsDOlg23diR2g==}
+ engines: {node: '>= 0.4'}
+
+ esbuild@0.28.1:
+ resolution: {integrity: sha512-HrJrvZv5ayxBzPfwphOoNzkzOIIlifzk0KJrGK2c8R4+LKpMtpYLQeUdjnwjWv/LZlkH2laZk+4w78pi99D4Vw==}
+ engines: {node: '>=18'}
+ hasBin: true
+
+ escape-string-regexp@4.0.0:
+ resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==}
+ engines: {node: '>=10'}
+
+ escape-string-regexp@5.0.0:
+ resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
+ engines: {node: '>=12'}
+
+ eslint-compat-utils@0.6.5:
+ resolution: {integrity: sha512-vAUHYzue4YAa2hNACjB8HvUQj5yehAZgiClyFVVom9cP8z5NSFq3PwB/TtJslN2zAMgRX6FCFCjYBbQh71g5RQ==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ eslint: '>=6.0.0'
+
+ eslint-fix-utils@0.4.2:
+ resolution: {integrity: sha512-n7ZTcwwkP5scedlhvWMcqxED+O1NzXcj5Rxn/0kJQMP88k02vRcBfQ1qsk/JHb6Aw8bajFoetFCCBiNIcNCsvA==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
+ peerDependencies:
+ '@types/estree': '>=1'
+ eslint: '>=8'
+ peerDependenciesMeta:
+ '@types/estree':
+ optional: true
+
+ eslint-json-compat-utils@0.2.3:
+ resolution: {integrity: sha512-RbBmDFyu7FqnjE8F0ZxPNzx5UaptdeS9Uu50r7A+D7s/+FCX+ybiyViYEgFUaFIFqSWJgZRTpL5d8Kanxxl2lQ==}
+ engines: {node: '>=12'}
+ peerDependencies:
+ '@eslint/json': '*'
+ eslint: '*'
+ jsonc-eslint-parser: ^2.4.0 || ^3.0.0
+ peerDependenciesMeta:
+ '@eslint/json':
+ optional: true
+
+ eslint-plugin-astro@1.7.0:
+ resolution: {integrity: sha512-89xpAn528UKCdmyysbg0AHHqi6sqcK89wXnJIpu4F0mFBN03zATEBNK7pRtMfl6gwtMOm5ECXs+Wz5qDHhwTFw==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ peerDependencies:
+ eslint: '>=8.57.0'
+
+ eslint-plugin-jsdoc@63.0.0:
+ resolution: {integrity: sha512-eDHuVGyZydr4BKgjXouU7bsn5qaqUlObXBSWRJk3vXcQgXVFnrwWIqpP7uBhRX9NQpk6NIIFyRc6F6omZNi/8g==}
+ engines: {node: ^22.13.0 || >=24}
+ peerDependencies:
+ eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 || ^10.0.0
+
+ eslint-plugin-jsonc@3.2.0:
+ resolution: {integrity: sha512-eQSxJypkpNycQAFE/ph/j+bDD2MiCcojxNb+7nugYzuQZvELYg4YO1Cv1y/8MbjPIEw5u3Lx0VPOTlqJJIhPPw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+ peerDependencies:
+ eslint: '>=9.38.0'
+
+ eslint-plugin-jsx-a11y@6.10.2:
+ resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==}
+ engines: {node: '>=4.0'}
+ peerDependencies:
+ eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9
+
+ eslint-plugin-oxlint@1.67.0:
+ resolution: {integrity: sha512-tS/RGy8x2+rIUp7gV8ICgEeSAgFH6Qg7phzCbUblW/dPUsqXkcedrzO0nOaKhce4fvUVDR9uTmWlLkCNSDKcsw==}
+ peerDependencies:
+ oxlint: ~1.67.0
+
+ eslint-plugin-package-json@1.2.0:
+ resolution: {integrity: sha512-3BszsD7XVddaUNbMfK+1lF1Qg8ck0nO3bNT/7IjXP8wrGzPThHZpkhm5UnbY1Nb/s3o6DUNgHI4aEqQV/t83fw==}
+ engines: {node: ^22.22.2 || >=24.15.0}
+ peerDependencies:
+ '@eslint/json': '>=1.0.0'
+ eslint: '>=9.0.0'
+ peerDependenciesMeta:
+ '@eslint/json':
+ optional: true
+
+ eslint-plugin-yml@3.4.0:
+ resolution: {integrity: sha512-j6U3ESrAkidkvNb3HFN2UMxke46GNp6bsJokabXCICcgomSy3YU4oED9cjzkZ58nYxWD5qnWV1b/2YlqyWMOxA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24.0.0}
+ peerDependencies:
+ eslint: '>=9.38.0'
+
+ eslint-scope@8.4.0:
+ resolution: {integrity: sha512-sNXOfKCn74rt8RICKMvJS7XKV/Xk9kA7DyJr8mJik3S7Cwgy3qlkkmyS2uQB3jiJg6VNdZd/pDBJu0nvG2NlTg==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint-visitor-keys@3.4.3:
+ resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==}
+ engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
+
+ eslint-visitor-keys@4.2.1:
+ resolution: {integrity: sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ eslint-visitor-keys@5.0.1:
+ resolution: {integrity: sha512-tD40eHxA35h0PEIZNeIjkHoDR4YjjJp34biM0mDvplBe//mB+IHCqHDGV7pxF+7MklTvighcCPPZC7ynWyjdTA==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ eslint@9.39.4:
+ resolution: {integrity: sha512-XoMjdBOwe/esVgEvLmNsD3IRHkm7fbKIUGvrleloJXUZgDHig2IPWNniv+GwjyJXzuNqVjlr5+4yVUZjycJwfQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+ hasBin: true
+ peerDependencies:
+ jiti: '*'
+ peerDependenciesMeta:
+ jiti:
+ optional: true
+
+ espree@10.4.0:
+ resolution: {integrity: sha512-j6PAQ2uUr79PZhBjP5C5fhl8e39FmRnOjsD5lGnWrFU8i2G776tBK7+nP8KuQUTTyAZUwfQqXAgrVH5MbH9CYQ==}
+ engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0}
+
+ espree@11.2.0:
+ resolution: {integrity: sha512-7p3DrVEIopW1B1avAGLuCSh1jubc01H2JHc8B4qqGblmg5gI9yumBgACjWo4JlIc04ufug4xJ3SQI8HkS/Rgzw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ esquery@1.7.0:
+ resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==}
+ engines: {node: '>=0.10'}
+
+ esrecurse@4.3.0:
+ resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==}
+ engines: {node: '>=4.0'}
+
+ estraverse@5.3.0:
+ resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==}
+ engines: {node: '>=4.0'}
+
+ estree-walker@3.0.3:
+ resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==}
+
+ esutils@2.0.3:
+ resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==}
+ engines: {node: '>=0.10.0'}
+
+ expect-type@1.3.0:
+ resolution: {integrity: sha512-knvyeauYhqjOYvQ66MznSMs83wmHrCycNEN6Ao+2AeYEfxUIkuiVxdEa1qlGEPK+We3n0THiDciYSsCcgW/DoA==}
+ engines: {node: '>=12.0.0'}
+
+ fast-deep-equal@3.1.3:
+ resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==}
+
+ fast-glob@3.3.3:
+ resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==}
+ engines: {node: '>=8.6.0'}
+
+ fast-json-stable-stringify@2.1.0:
+ resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
+
+ fast-levenshtein@2.0.6:
+ resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==}
+
+ fastq@1.20.1:
+ resolution: {integrity: sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==}
+
+ fdir@6.5.0:
+ resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==}
+ engines: {node: '>=12.0.0'}
+ peerDependencies:
+ picomatch: ^3 || ^4
+ peerDependenciesMeta:
+ picomatch:
+ optional: true
+
+ file-entry-cache@8.0.0:
+ resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==}
+ engines: {node: '>=16.0.0'}
+
+ fill-range@7.1.1:
+ resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==}
+ engines: {node: '>=8'}
+
+ find-up@5.0.0:
+ resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==}
+ engines: {node: '>=10'}
+
+ flat-cache@4.0.1:
+ resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==}
+ engines: {node: '>=16'}
+
+ flatted@3.4.2:
+ resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==}
+
+ for-each@0.3.5:
+ resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==}
+ engines: {node: '>= 0.4'}
+
+ fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
+ engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
+ os: [darwin]
+
+ function-bind@1.1.2:
+ resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==}
+
+ function.prototype.name@1.2.0:
+ resolution: {integrity: sha512-jObKIik1P2QjPHP5nz5BaOtUlfgS0fWo8IUByNXkM+o+02sJOi94em77GwJKQSJ3gfPHdgzLNrHc1uokV4P/ew==}
+ engines: {node: '>= 0.4'}
+
+ functions-have-names@1.2.3:
+ resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==}
+
+ generator-function@2.0.1:
+ resolution: {integrity: sha512-SFdFmIJi+ybC0vjlHN0ZGVGHc3lgE0DxPAT0djjVg+kjOnSqclqmj0KQ7ykTOLP6YxoqOvuAODGdcHJn+43q3g==}
+ engines: {node: '>= 0.4'}
+
+ get-intrinsic@1.3.0:
+ resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==}
+ engines: {node: '>= 0.4'}
+
+ get-proto@1.0.1:
+ resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==}
+ engines: {node: '>= 0.4'}
+
+ get-symbol-description@1.1.0:
+ resolution: {integrity: sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg==}
+ engines: {node: '>= 0.4'}
+
+ get-tsconfig@5.0.0-beta.5:
+ resolution: {integrity: sha512-/6gFNr0N04nob252sTQxyFLi3eKFRqIg1I87YcqAMT1i6SQrSF6KujUEQrtrjMV0H/eejTCltLdDSTEMzHbnsQ==}
+ engines: {node: '>=20.20.0'}
+
+ git-hooks-list@4.2.1:
+ resolution: {integrity: sha512-WNvqJjOxxs/8ZP9+DWdwWJ7cDsd60NHf39XnD82pDVrKO5q7xfPqpkK6hwEAmBa/ZSEE4IOoR75EzbbIuwGlMw==}
+
+ glob-parent@5.1.2:
+ resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==}
+ engines: {node: '>= 6'}
+
+ glob-parent@6.0.2:
+ resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==}
+ engines: {node: '>=10.13.0'}
+
+ globals@14.0.0:
+ resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==}
+ engines: {node: '>=18'}
+
+ globals@16.5.0:
+ resolution: {integrity: sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==}
+ engines: {node: '>=18'}
+
+ globalthis@1.0.4:
+ resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==}
+ engines: {node: '>= 0.4'}
+
+ gopd@1.2.0:
+ resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==}
+ engines: {node: '>= 0.4'}
+
+ has-bigints@1.1.0:
+ resolution: {integrity: sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg==}
+ engines: {node: '>= 0.4'}
+
+ has-flag@4.0.0:
+ resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==}
+ engines: {node: '>=8'}
+
+ has-property-descriptors@1.0.2:
+ resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==}
+
+ has-proto@1.2.0:
+ resolution: {integrity: sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==}
+ engines: {node: '>= 0.4'}
+
+ has-symbols@1.1.0:
+ resolution: {integrity: sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==}
+ engines: {node: '>= 0.4'}
+
+ has-tostringtag@1.0.2:
+ resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==}
+ engines: {node: '>= 0.4'}
+
+ hasown@2.0.4:
+ resolution: {integrity: sha512-T2UbfbBEF32wiepXIsMlTW9+dDYC6wMh/t/vYA4tuOMKqWz/n3vr1NFSxQiyP+zk2mXsoMA/i/7qV6LKut1t1A==}
+ engines: {node: '>= 0.4'}
+
+ hookable@6.1.1:
+ resolution: {integrity: sha512-U9LYDy1CwhMCnprUfeAZWZGByVbhd54hwepegYTK7Pi5NvqEj63ifz5z+xukznehT7i6NIZRu89Ay1AZmRsLEQ==}
+
+ hosted-git-info@9.0.3:
+ resolution: {integrity: sha512-Hc+ghLoSt6QaYZUv0WBiIvmMDZuZZ7oaDvdH8MbfOO4lOsxdXLEvuC6ePoGs9H1X9oCLyq6+NVN0MKqD+ydxyg==}
+ engines: {node: ^20.17.0 || >=22.9.0}
+
+ html-entities@2.6.0:
+ resolution: {integrity: sha512-kig+rMn/QOVRvr7c86gQ8lWXq+Hkv6CbAH1hLu+RG338StTpE8Z0b44SDVaqVu7HGKf27frdmUYEs9hTUX/cLQ==}
+
+ ignore@5.3.2:
+ resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==}
+ engines: {node: '>= 4'}
+
+ import-fresh@3.3.1:
+ resolution: {integrity: sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==}
+ engines: {node: '>=6'}
+
+ import-without-cache@0.4.0:
+ resolution: {integrity: sha512-NkJQA7oZ4YHQhd2+H3BoRFKF3d/XNsiKpHZCQEMH9pDX27hQQLsTyOocyRgaIVtf8gHX3Nt3LPkR4e5EdtPAGQ==}
+ engines: {node: ^22.18.0 || >=24.0.0}
+
+ imurmurhash@0.1.4:
+ resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==}
+ engines: {node: '>=0.8.19'}
+
+ internal-slot@1.1.0:
+ resolution: {integrity: sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==}
+ engines: {node: '>= 0.4'}
+
+ is-array-buffer@3.0.5:
+ resolution: {integrity: sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==}
+ engines: {node: '>= 0.4'}
+
+ is-async-function@2.1.1:
+ resolution: {integrity: sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ==}
+ engines: {node: '>= 0.4'}
+
+ is-bigint@1.1.0:
+ resolution: {integrity: sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==}
+ engines: {node: '>= 0.4'}
+
+ is-boolean-object@1.2.2:
+ resolution: {integrity: sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A==}
+ engines: {node: '>= 0.4'}
+
+ is-callable@1.2.7:
+ resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==}
+ engines: {node: '>= 0.4'}
+
+ is-data-view@1.0.2:
+ resolution: {integrity: sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==}
+ engines: {node: '>= 0.4'}
+
+ is-date-object@1.1.0:
+ resolution: {integrity: sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==}
+ engines: {node: '>= 0.4'}
+
+ is-document.all@1.0.0:
+ resolution: {integrity: sha512-+XSoyS05OdBbhFuELhgTCpFNHkpBOJqtsZfUFFpe5QTw+9Sjbh8zitxhQkYAo6wV7e1Vb8cAPvpCk9jGam/82g==}
+ engines: {node: '>= 0.4'}
+
+ is-extglob@2.1.1:
+ resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==}
+ engines: {node: '>=0.10.0'}
+
+ is-finalizationregistry@1.1.1:
+ resolution: {integrity: sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==}
+ engines: {node: '>= 0.4'}
+
+ is-generator-function@1.1.2:
+ resolution: {integrity: sha512-upqt1SkGkODW9tsGNG5mtXTXtECizwtS2kA161M+gJPc1xdb/Ax629af6YrTwcOeQHbewrPNlE5Dx7kzvXTizA==}
+ engines: {node: '>= 0.4'}
+
+ is-glob@4.0.3:
+ resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==}
+ engines: {node: '>=0.10.0'}
+
+ is-map@2.0.3:
+ resolution: {integrity: sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw==}
+ engines: {node: '>= 0.4'}
+
+ is-negative-zero@2.0.3:
+ resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==}
+ engines: {node: '>= 0.4'}
+
+ is-number-object@1.1.1:
+ resolution: {integrity: sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==}
+ engines: {node: '>= 0.4'}
+
+ is-number@7.0.0:
+ resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==}
+ engines: {node: '>=0.12.0'}
+
+ is-plain-obj@4.1.0:
+ resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==}
+ engines: {node: '>=12'}
+
+ is-regex@1.2.1:
+ resolution: {integrity: sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==}
+ engines: {node: '>= 0.4'}
+
+ is-set@2.0.3:
+ resolution: {integrity: sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg==}
+ engines: {node: '>= 0.4'}
+
+ is-shared-array-buffer@1.0.4:
+ resolution: {integrity: sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A==}
+ engines: {node: '>= 0.4'}
+
+ is-string@1.1.1:
+ resolution: {integrity: sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==}
+ engines: {node: '>= 0.4'}
+
+ is-symbol@1.1.1:
+ resolution: {integrity: sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==}
+ engines: {node: '>= 0.4'}
+
+ is-typed-array@1.1.15:
+ resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==}
+ engines: {node: '>= 0.4'}
+
+ is-weakmap@2.0.2:
+ resolution: {integrity: sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w==}
+ engines: {node: '>= 0.4'}
+
+ is-weakref@1.1.1:
+ resolution: {integrity: sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew==}
+ engines: {node: '>= 0.4'}
+
+ is-weakset@2.0.4:
+ resolution: {integrity: sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==}
+ engines: {node: '>= 0.4'}
+
+ isarray@2.0.5:
+ resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==}
+
+ isexe@2.0.0:
+ resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==}
+
+ jiti@2.7.0:
+ resolution: {integrity: sha512-AC/7JofJvZGrrneWNaEnJeOLUx+JlGt7tNa0wZiRPT4MY1wmfKjt2+6O2p2uz2+skll8OZZmJMNqeke7kKbNgQ==}
+ hasBin: true
+
+ js-yaml@4.2.0:
+ resolution: {integrity: sha512-ePWsvanv0DWuDRsW8dnt+R4jQ31SCRCQ7hhNcPXZPsoBZiemuZNYGf7adZdqX2D86j6rvKp3RpCxVTSb8WQlOw==}
+ hasBin: true
+
+ jsdoc-type-pratt-parser@7.2.0:
+ resolution: {integrity: sha512-dh140MMgjyg3JhJZY/+iEzW+NO5xR2gpbDFKHqotCmexElVntw7GjWjt511+C/Ef02RU5TKYrJo/Xlzk+OLaTw==}
+ engines: {node: '>=20.0.0'}
+
+ jsesc@3.1.0:
+ resolution: {integrity: sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==}
+ engines: {node: '>=6'}
+ hasBin: true
+
+ json-buffer@3.0.1:
+ resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==}
+
+ json-schema-traverse@0.4.1:
+ resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==}
+
+ json-stable-stringify-without-jsonify@1.0.1:
+ resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==}
+
+ jsonc-eslint-parser@3.1.0:
+ resolution: {integrity: sha512-75EA7EWZExL/j+MDKQrRbdzcRI2HOkRlmUw8fZJc1ioqFEOvBsq7Rt+A6yCxOt9w/TYNpkt52gC6nm/g5tFIng==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ jsonc-parser@3.3.1:
+ resolution: {integrity: sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==}
+
+ jsx-ast-utils@3.3.5:
+ resolution: {integrity: sha512-ZZow9HBI5O6EPgSJLUb8n2NKgmVWTwCvHGwFuJlMjvLFqlGG6pjirPhtdsseaLZjSibD8eegzmYpUZwoIlj2cQ==}
+ engines: {node: '>=4.0'}
+
+ keyv@4.5.4:
+ resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==}
+
+ language-subtag-registry@0.3.23:
+ resolution: {integrity: sha512-0K65Lea881pHotoGEa5gDlMxt3pctLi2RplBb7Ezh4rRdLEOtgi7n4EwK9lamnUCkKBqaeKRVebTq6BAxSkpXQ==}
+
+ language-tags@1.0.9:
+ resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==}
+ engines: {node: '>=0.10'}
+
+ levn@0.4.1:
+ resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==}
+ engines: {node: '>= 0.8.0'}
+
+ lightningcss-android-arm64@1.32.0:
+ resolution: {integrity: sha512-YK7/ClTt4kAK0vo6w3X+Pnm0D2cf2vPHbhOXdoNti1Ga0al1P4TBZhwjATvjNwLEBCnKvjJc2jQgHXH0NEwlAg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [android]
+
+ lightningcss-darwin-arm64@1.32.0:
+ resolution: {integrity: sha512-RzeG9Ju5bag2Bv1/lwlVJvBE3q6TtXskdZLLCyfg5pt+HLz9BqlICO7LZM7VHNTTn/5PRhHFBSjk5lc4cmscPQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [darwin]
+
+ lightningcss-darwin-x64@1.32.0:
+ resolution: {integrity: sha512-U+QsBp2m/s2wqpUYT/6wnlagdZbtZdndSmut/NJqlCcMLTWp5muCrID+K5UJ6jqD2BFshejCYXniPDbNh73V8w==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [darwin]
+
+ lightningcss-freebsd-x64@1.32.0:
+ resolution: {integrity: sha512-JCTigedEksZk3tHTTthnMdVfGf61Fky8Ji2E4YjUTEQX14xiy/lTzXnu1vwiZe3bYe0q+SpsSH/CTeDXK6WHig==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [freebsd]
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ resolution: {integrity: sha512-x6rnnpRa2GL0zQOkt6rts3YDPzduLpWvwAF6EMhXFVZXD4tPrBkEFqzGowzCsIWsPjqSK+tyNEODUBXeeVHSkw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm]
+ os: [linux]
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ resolution: {integrity: sha512-0nnMyoyOLRJXfbMOilaSRcLH3Jw5z9HDNGfT/gwCPgaDjnx0i8w7vBzFLFR1f6CMLKF8gVbebmkUN3fa/kQJpQ==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ resolution: {integrity: sha512-UpQkoenr4UJEzgVIYpI80lDFvRmPVg6oqboNHfoH4CQIfNA+HOrZ7Mo7KZP02dC6LjghPQJeBsvXhJod/wnIBg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ resolution: {integrity: sha512-V7Qr52IhZmdKPVr+Vtw8o+WLsQJYCTd8loIfpDaMRWGUZfBOYEJeyJIkqGIDMZPwPx24pUMfwSxxI8phr/MbOA==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [glibc]
+
+ lightningcss-linux-x64-musl@1.32.0:
+ resolution: {integrity: sha512-bYcLp+Vb0awsiXg/80uCRezCYHNg1/l3mt0gzHnWV9XP1W5sKa5/TCdGWaR/zBM2PeF/HbsQv/j2URNOiVuxWg==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [linux]
+ libc: [musl]
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ resolution: {integrity: sha512-8SbC8BR40pS6baCM8sbtYDSwEVQd4JlFTOlaD3gWGHfThTcABnNDBda6eTZeqbofalIJhFx0qKzgHJmcPTnGdw==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [arm64]
+ os: [win32]
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ resolution: {integrity: sha512-Amq9B/SoZYdDi1kFrojnoqPLxYhQ4Wo5XiL8EVJrVsB8ARoC1PWW6VGtT0WKCemjy8aC+louJnjS7U18x3b06Q==}
+ engines: {node: '>= 12.0.0'}
+ cpu: [x64]
+ os: [win32]
+
+ lightningcss@1.32.0:
+ resolution: {integrity: sha512-NXYBzinNrblfraPGyrbPoD19C1h9lfI/1mzgWYvXUTe414Gz/X1FD2XBZSZM7rRTrMA8JL3OtAaGifrIKhQ5yQ==}
+ engines: {node: '>= 12.0.0'}
+
+ locate-path@6.0.0:
+ resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==}
+ engines: {node: '>=10'}
+
+ lodash.merge@4.6.2:
+ resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==}
+
+ logs-sdk@0.0.6:
+ resolution: {integrity: sha512-G4M1C9aLLBOIWpmw/Lqk4zrap/T2IJsoUOuUDjRcVSLy6lHQqxr3wCqIT1FvvpYTUYpEwvu4utsMY42jTNvx8Q==}
+
+ lru-cache@11.5.1:
+ resolution: {integrity: sha512-RPimw/7aMdv2oqRrxKwvZXcPfwBrn/JZ2xYcY9Hus/6LaS3VOAKVWKWgNLCFSiOm1ESXinjsDlidVU7JlnCN2A==}
+ engines: {node: 20 || >=22}
+
+ magic-string@0.30.21:
+ resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==}
+
+ math-intrinsics@1.1.0:
+ resolution: {integrity: sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==}
+ engines: {node: '>= 0.4'}
+
+ merge2@1.4.1:
+ resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==}
+ engines: {node: '>= 8'}
+
+ micromatch@4.0.8:
+ resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==}
+ engines: {node: '>=8.6'}
+
+ minimatch@3.1.5:
+ resolution: {integrity: sha512-VgjWUsnnT6n+NUk6eZq77zeFdpW2LWDzP6zFGrCbHXiYNul5Dzqk2HHQ5uFH2DNW5Xbp8+jVzaeNt94ssEEl4w==}
+
+ ms@2.1.3:
+ resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==}
+
+ nano-staged@1.0.2:
+ resolution: {integrity: sha512-Fytar3zHLY99nlMfqPPbraxZodqQAHPpdPRyYaplL+lB9DCR6pUrafxbG+Btz4+7fO5Rm/+DO4ZeDO/nLSUMhw==}
+ engines: {node: ^22 || >= 24}
+ hasBin: true
+
+ nanoid@3.3.15:
+ resolution: {integrity: sha512-y7Wygv/7mEOvxTuEQDB8StXdMRBWf1kR/tlhAzBRUFkB2jfcLOAxO/SHmOO2zgz1pVgK29/kyupn059/bCHdjA==}
+ engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1}
+ hasBin: true
+
+ natural-compare@1.4.0:
+ resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==}
+
+ npm-package-arg@13.0.2:
+ resolution: {integrity: sha512-IciCE3SY3uE84Ld8WZU23gAPPV9rIYod4F+rc+vJ7h7cwAJt9Vk6TVsK60ry7Uj3SRS3bqRRIGuTp9YVlk6WNA==}
+ engines: {node: ^20.17.0 || >=22.9.0}
+
+ object-deep-merge@2.0.1:
+ resolution: {integrity: sha512-aKttDKcU3pyZqKcCkDhsMn70WmZFG2JGDQLP9EcLyTSIFQRCPWLAmBZRLJnrVUrhPG1jETEEbfdgbNtJf1LyMg==}
+
+ object-inspect@1.13.4:
+ resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==}
+ engines: {node: '>= 0.4'}
+
+ object-keys@1.1.1:
+ resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==}
+ engines: {node: '>= 0.4'}
+
+ object.assign@4.1.7:
+ resolution: {integrity: sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw==}
+ engines: {node: '>= 0.4'}
+
+ object.fromentries@2.0.8:
+ resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==}
+ engines: {node: '>= 0.4'}
+
+ object.values@1.2.1:
+ resolution: {integrity: sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA==}
+ engines: {node: '>= 0.4'}
+
+ obug@2.1.3:
+ resolution: {integrity: sha512-9miFgM2OFba7hB+pRgvtV84pYTBaoTHohvmIgiRt6dRIzbwEOIaNaP+dIlGs2fNFoB0SeISs0Jz5WFVRid6Xyg==}
+ engines: {node: '>=12.20.0'}
+
+ optionator@0.9.4:
+ resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==}
+ engines: {node: '>= 0.8.0'}
+
+ own-keys@1.0.1:
+ resolution: {integrity: sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg==}
+ engines: {node: '>= 0.4'}
+
+ oxc-parser@0.126.0:
+ resolution: {integrity: sha512-FktCvLby/mOHyuijZt22+nOt10dS24gGUZE3XwIbUg7Kf4+rer3/5T7RgwzazlNuVsCjPloZ3p8E+4ONT3A8Kw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxlint-plugin-complexity@2.1.3:
+ resolution: {integrity: sha512-oZBW7weeJqt4kqRQiHJEkqsA1nHfyijiUET38N3uPh+GGVmtqYgDkQEAD0FtJbEWIjgyvJ8jSCR9IA/gzI1EdA==}
+ engines: {node: '>=20.0.0'}
+ peerDependencies:
+ diff: '>=5.0.0'
+ estree-walker: '>=3.0.0'
+ oxc-parser: '>=0.60.0'
+ peerDependenciesMeta:
+ diff:
+ optional: true
+ estree-walker:
+ optional: true
+ oxc-parser:
+ optional: true
+
+ oxlint-plugin-eslint@1.67.0:
+ resolution: {integrity: sha512-MfpO9t/l/1qWVKym4sTkz0bhErAkUn/cOOQsFegI5ngQkR1cZEp6G23FKIhGcALoYytPBRmu47yjiEa6XWFBRw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ oxlint-tsgolint@0.23.0:
+ resolution: {integrity: sha512-3mBv3CoPbh8dFbzfDGIWa2ytZjn2v+3EX4aKRXjIhsoGFzG8GCjfRirz3rwZf1wYbZzsNLTSgpw8VjQuWdp/jA==}
+ hasBin: true
+
+ oxlint@1.67.0:
+ resolution: {integrity: sha512-blwwaHPdoH8piQ5/z0KHeoHFR7FZgl12WluKJfu4qFLPkZl6mK04PkLE45Fw1NxfBRSlh40Gu7MkxHUw++ociQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ oxlint-tsgolint: '>=0.22.1'
+ vite-plus: '*'
+ peerDependenciesMeta:
+ oxlint-tsgolint:
+ optional: true
+ vite-plus:
+ optional: true
+
+ p-limit@3.1.0:
+ resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==}
+ engines: {node: '>=10'}
+
+ p-locate@5.0.0:
+ resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==}
+ engines: {node: '>=10'}
+
+ package-json-validator@1.5.2:
+ resolution: {integrity: sha512-eHXskJQU4aCiSfjhRfTVtCJ+22/EzLHgYgZv5Gj3teb3NJrnTMzq5BnKAWKvR+PLpknCO1PmOCImDuO+dX4Vaw==}
+ engines: {node: ^20.19.0 || ^22.12.0 || >=24.0.0}
+
+ package-manager-detector@1.6.0:
+ resolution: {integrity: sha512-61A5ThoTiDG/C8s8UMZwSorAGwMJ0ERVGj2OjoW5pAalsNOg15+iQiPzrLJ4jhZ1HJzmC2PIHT2oEiH3R5fzNA==}
+
+ parent-module@1.0.1:
+ resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==}
+ engines: {node: '>=6'}
+
+ parse-imports-exports@0.2.4:
+ resolution: {integrity: sha512-4s6vd6dx1AotCx/RCI2m7t7GCh5bDRUtGNvRfHSP2wbBQdMi67pPe7mtzmgwcaQ8VKK/6IB7Glfyu3qdZJPybQ==}
+
+ parse-statements@1.0.11:
+ resolution: {integrity: sha512-HlsyYdMBnbPQ9Jr/VgJ1YF4scnldvJpJxCVx6KgqPL4dxppsWrJHCIIxQXMJrqGnsRkNPATbeMJ8Yxu7JMsYcA==}
+
+ path-exists@4.0.0:
+ resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==}
+ engines: {node: '>=8'}
+
+ path-key@3.1.1:
+ resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==}
+ engines: {node: '>=8'}
+
+ pathe@2.0.3:
+ resolution: {integrity: sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==}
+
+ picocolors@1.1.1:
+ resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==}
+
+ picomatch@2.3.2:
+ resolution: {integrity: sha512-V7+vQEJ06Z+c5tSye8S+nHUfI51xoXIXjHQ99cQtKUkQqqO1kO/KCJUfZXuB47h/YBlDhah2H3hdUGXn8ie0oA==}
+ engines: {node: '>=8.6'}
+
+ picomatch@4.0.4:
+ resolution: {integrity: sha512-QP88BAKvMam/3NxH6vj2o21R6MjxZUAd6nlwAS/pnGvN9IVLocLHxGYIzFhg6fUQ+5th6P4dv4eW9jX3DSIj7A==}
+ engines: {node: '>=12'}
+
+ possible-typed-array-names@1.1.0:
+ resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==}
+ engines: {node: '>= 0.4'}
+
+ postcss-selector-parser@7.1.4:
+ resolution: {integrity: sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==}
+ engines: {node: '>=4'}
+
+ postcss@8.5.15:
+ resolution: {integrity: sha512-FfR8sjd4em2T6fb3I2MwAJU7HWVMr9zba+enmQeeWFfCbm+UOC/0X4DS8XtpUTMwWMGbjKYP7xjfNekzyGmB3A==}
+ engines: {node: ^10 || ^12 || >=14}
+
+ prelude-ls@1.2.1:
+ resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==}
+ engines: {node: '>= 0.8.0'}
+
+ proc-log@6.1.0:
+ resolution: {integrity: sha512-iG+GYldRf2BQ0UDUAd6JQ/RwzaQy6mXmsk/IzlYyal4A4SNFw54MeH4/tLkF4I5WoWG9SQwuqWzS99jaFQHBuQ==}
+ engines: {node: ^20.17.0 || >=22.9.0}
+
+ punycode@2.3.1:
+ resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==}
+ engines: {node: '>=6'}
+
+ quansync@1.0.0:
+ resolution: {integrity: sha512-5xZacEEufv3HSTPQuchrvV6soaiACMFnq1H8wkVioctoH3TRha9Sz66lOxRwPK/qZj7HPiSveih9yAyh98gvqA==}
+
+ queue-microtask@1.2.3:
+ resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
+
+ reflect.getprototypeof@1.0.10:
+ resolution: {integrity: sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw==}
+ engines: {node: '>= 0.4'}
+
+ regexp.prototype.flags@1.5.4:
+ resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==}
+ engines: {node: '>= 0.4'}
+
+ reserved-identifiers@1.2.0:
+ resolution: {integrity: sha512-yE7KUfFvaBFzGPs5H3Ops1RevfUEsDc5Iz65rOwWg4lE8HJSYtle77uul3+573457oHvBKuHYDl/xqUkKpEEdw==}
+ engines: {node: '>=18'}
+
+ resolve-from@4.0.0:
+ resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==}
+ engines: {node: '>=4'}
+
+ resolve-pkg-maps@1.0.0:
+ resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==}
+
+ reusify@1.1.0:
+ resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==}
+ engines: {iojs: '>=1.0.0', node: '>=0.10.0'}
+
+ rolldown-plugin-dts-minify-lite@0.5.2:
+ resolution: {integrity: sha512-HHZYMF3XlmY1/oO4XHh9hjvv8elWs6o2mF0BN4Z5AdzdWdhtSOdlx+dUOutzOiXFk94bxgca1Bt2JULW1+uTvw==}
+ peerDependencies:
+ rolldown: '>=1.0.0'
+
+ rolldown-plugin-dts@0.26.0:
+ resolution: {integrity: sha512-e+kEPtUiDES0htk5iqkSeF4EzAV7R+vugGB44iPDuw1Kw9E+WyL1VG7PaV0IIjGHLiacztMBcMTyrr8ON9CT1Q==}
+ engines: {node: ^22.18.0 || >=24.11.0}
+ peerDependencies:
+ '@ts-macro/tsc': ^0.3.6
+ '@typescript/native-preview': '>=7.0.0-dev.20260325.1'
+ rolldown: ^1.0.0
+ typescript: ^5.0.0 || ^6.0.0
+ vue-tsc: ~3.2.0 || ~3.3.0
+ peerDependenciesMeta:
+ '@ts-macro/tsc':
+ optional: true
+ '@typescript/native-preview':
+ optional: true
+ typescript:
+ optional: true
+ vue-tsc:
+ optional: true
+
+ rolldown@1.0.3:
+ resolution: {integrity: sha512-i00lAJ2ks1BYr7rjNjKC7BcqAS7nVfiT3QX1SI5aY+AFHblCmaUf9OE9dbdzDvW6dJxbi2ZCZiy9v3CcwOiX3g==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ rolldown@1.1.2:
+ resolution: {integrity: sha512-x0CrQQqCXWGeI8dTvFfN/Dnv3yMKT9hv5jFjlOreKAx9wqLq9wz7VvLLHyaAXC90/CpggTu9SisSbsJJTPSjNQ==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+
+ run-parallel@1.2.0:
+ resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==}
+
+ safe-array-concat@1.1.4:
+ resolution: {integrity: sha512-wtZlHyOje6OZTGqAoaDKxFkgRtkF9CnHAVnCHKfuj200wAgL+bSJhdsCD2l0Qx/2ekEXjPWcyKkfGb5CPboslg==}
+ engines: {node: '>=0.4'}
+
+ safe-push-apply@1.0.0:
+ resolution: {integrity: sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA==}
+ engines: {node: '>= 0.4'}
+
+ safe-regex-test@1.1.0:
+ resolution: {integrity: sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==}
+ engines: {node: '>= 0.4'}
+
+ semver@7.8.5:
+ resolution: {integrity: sha512-Y7/KDsb8LjooZpwaqGyulO6DQlksgCncchHGk+sZIY4SBvUocMBEFH5Ur1fI4dV+Jvl0w6cjvucaIi40puRioA==}
+ engines: {node: '>=10'}
+ hasBin: true
+
+ set-function-length@1.2.2:
+ resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==}
+ engines: {node: '>= 0.4'}
+
+ set-function-name@2.0.2:
+ resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==}
+ engines: {node: '>= 0.4'}
+
+ set-proto@1.0.0:
+ resolution: {integrity: sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw==}
+ engines: {node: '>= 0.4'}
+
+ shebang-command@2.0.0:
+ resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==}
+ engines: {node: '>=8'}
+
+ shebang-regex@3.0.0:
+ resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==}
+ engines: {node: '>=8'}
+
+ side-channel-list@1.0.1:
+ resolution: {integrity: sha512-mjn/0bi/oUURjc5Xl7IaWi/OJJJumuoJFQJfDDyO46+hBWsfaVM65TBHq2eoZBhzl9EchxOijpkbRC8SVBQU0w==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-map@1.0.1:
+ resolution: {integrity: sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==}
+ engines: {node: '>= 0.4'}
+
+ side-channel-weakmap@1.0.2:
+ resolution: {integrity: sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==}
+ engines: {node: '>= 0.4'}
+
+ side-channel@1.1.1:
+ resolution: {integrity: sha512-6x6dK6zJdpTzF4sQeNYxwtvBzf6Eg4GtlesS94HOvTudUeyK2WXAaIfmDgsyslYrRBeFIlsi54AYsFGUuhmvrQ==}
+ engines: {node: '>= 0.4'}
+
+ siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+
+ simple-git-hooks@2.13.1:
+ resolution: {integrity: sha512-WszCLXwT4h2k1ufIXAgsbiTOazqqevFCIncOuUBZJ91DdvWcC5+OFkluWRQPrcuSYd8fjq+o2y1QfWqYMoAToQ==}
+ hasBin: true
+
+ sort-object-keys@2.1.0:
+ resolution: {integrity: sha512-SOiEnthkJKPv2L6ec6HMwhUcN0/lppkeYuN1x63PbyPRrgSPIuBJCiYxYyvWRTtjMlOi14vQUCGUJqS6PLVm8g==}
+
+ sort-package-json@3.7.1:
+ resolution: {integrity: sha512-ssk1HG7whF8N/T1IsNAQrtHG5Cbdi0rAgRJZXYBr9hF5xaHnBNzUx/W6LcthEW7FhOwvZssbESZuO+GxssqAyA==}
+ engines: {node: '>=20'}
+ hasBin: true
+
+ source-map-js@1.2.1:
+ resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==}
+ engines: {node: '>=0.10.0'}
+
+ spdx-correct@3.2.0:
+ resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==}
+
+ spdx-exceptions@2.5.0:
+ resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==}
+
+ spdx-expression-parse@3.0.1:
+ resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==}
+
+ spdx-expression-parse@4.0.0:
+ resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==}
+
+ spdx-license-ids@3.0.23:
+ resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==}
+
+ stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+
+ std-env@4.1.0:
+ resolution: {integrity: sha512-Rq7ybcX2RuC55r9oaPVEW7/xu3tj8u4GeBYHBWCychFtzMIr86A7e3PPEBPT37sHStKX3+TiX/Fr/ACmJLVlLQ==}
+
+ stop-iteration-iterator@1.1.0:
+ resolution: {integrity: sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.includes@2.0.1:
+ resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trim@1.2.11:
+ resolution: {integrity: sha512-PwvK7BU+CMTJGYQCTZb5RWXIML92lftJLhQz1tBzgKiqGxJaMlBAa48POXaNAC2s4y8jr3EFqrkF9+44neS46w==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimend@1.0.10:
+ resolution: {integrity: sha512-2+3aDAOmPTmuFwjDnmJG2ctEkQKVki7vOSqaxkv42Mowj1V6PnvuwFCRrR5lChUux1TBskPjfkeTOhqczDMxTw==}
+ engines: {node: '>= 0.4'}
+
+ string.prototype.trimstart@1.0.8:
+ resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==}
+ engines: {node: '>= 0.4'}
+
+ strip-json-comments@3.1.1:
+ resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==}
+ engines: {node: '>=8'}
+
+ supports-color@7.2.0:
+ resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==}
+ engines: {node: '>=8'}
+
+ synckit@0.11.13:
+ resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==}
+ engines: {node: ^14.18.0 || >=16.0.0}
+
+ tinybench@2.9.0:
+ resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==}
+
+ tinyexec@1.2.4:
+ resolution: {integrity: sha512-SHf/r48b7vOrjve9PxJo3MN5v5yuyjHvdUcrQffT3WXMUfnGmHDVbC4k3sHJaJTgZCwpUplIaAo5ANtMyp3YHg==}
+ engines: {node: '>=18'}
+
+ tinyglobby@0.2.17:
+ resolution: {integrity: sha512-wXR/dYpcqKmfWpEdZjiKJOwCNFndD0DMnrW/cYjVGttEkBfVgcLFHoNrlj47mjOVic9yyNu65alsgF4NQyTa2g==}
+ engines: {node: '>=12.0.0'}
+
+ tinyrainbow@3.1.0:
+ resolution: {integrity: sha512-Bf+ILmBgretUrdJxzXM0SgXLZ3XfiaUuOj/IKQHuTXip+05Xn+uyEYdVg0kYDipTBcLrCVyUzAPz7QmArb0mmw==}
+ engines: {node: '>=14.0.0'}
+
+ to-regex-range@5.0.1:
+ resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==}
+ engines: {node: '>=8.0'}
+
+ to-valid-identifier@1.0.0:
+ resolution: {integrity: sha512-41wJyvKep3yT2tyPqX/4blcfybknGB4D+oETKLs7Q76UiPqRpUJK3hr1nxelyYO0PHKVzJwlu0aCeEAsGI6rpw==}
+ engines: {node: '>=20'}
+
+ tree-kill@1.2.2:
+ resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==}
+ hasBin: true
+
+ tsdown-stale-guard@0.1.2:
+ resolution: {integrity: sha512-hO/quV9SK1KlwluplT9u9gnsK8w7QG3Zmr+a9W6K8CeCavfP5TOsrne35qQiOS1PzPv/Jo8PYOsOckqBs9JIUg==}
+ hasBin: true
+ peerDependencies:
+ tsdown: ^0.21.9 || ^0.22.0
+
+ tsdown@0.22.3:
+ resolution: {integrity: sha512-louqbfA8Qf//B9jTTL0FPtXTNpjCWv1VPkbcmQMph2pTpzs+LnB1tbe4tDDRVpo2BjF5SgUXaTZe45SxB8pWHg==}
+ engines: {node: ^22.18.0 || >=24.11.0}
+ hasBin: true
+ peerDependencies:
+ '@arethetypeswrong/core': ^0.18.1
+ '@tsdown/css': 0.22.3
+ '@tsdown/exe': 0.22.3
+ '@vitejs/devtools': '*'
+ publint: ^0.3.8
+ tsx: '*'
+ typescript: ^5.0.0 || ^6.0.0
+ unplugin-unused: ^0.5.0
+ unrun: '*'
+ peerDependenciesMeta:
+ '@arethetypeswrong/core':
+ optional: true
+ '@tsdown/css':
+ optional: true
+ '@tsdown/exe':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ publint:
+ optional: true
+ tsx:
+ optional: true
+ typescript:
+ optional: true
+ unplugin-unused:
+ optional: true
+ unrun:
+ optional: true
+
+ tslib@2.8.1:
+ resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==}
+
+ tsx@4.22.4:
+ resolution: {integrity: sha512-X8EX+XV4QR5xCsrgxaED954zTDfY8KqlDtskKEL0cHhyS/P8b4IFOvGDQpsC9Q1XnLq915wEfwwY/zzskCtmhg==}
+ engines: {node: '>=18.0.0'}
+ hasBin: true
+
+ type-check@0.4.0:
+ resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==}
+ engines: {node: '>= 0.8.0'}
+
+ typed-array-buffer@1.0.3:
+ resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-length@1.0.3:
+ resolution: {integrity: sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-byte-offset@1.0.4:
+ resolution: {integrity: sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ==}
+ engines: {node: '>= 0.4'}
+
+ typed-array-length@1.0.8:
+ resolution: {integrity: sha512-phPGCwqr2+Qo0fwniCE8e4pKnGu/yFb5nD5Y8bf0EEeiI5GklnACYA9GFy/DrAeRrKHXvHn+1SUsOWgJp6RO+g==}
+ engines: {node: '>= 0.4'}
+
+ typescript@6.0.3:
+ resolution: {integrity: sha512-y2TvuxSZPDyQakkFRPZHKFm+KKVqIisdg9/CZwm9ftvKXLP8NRWj38/ODjNbr43SsoXqNuAisEf1GdCxqWcdBw==}
+ engines: {node: '>=14.17'}
+ hasBin: true
+
+ unbox-primitive@1.1.0:
+ resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==}
+ engines: {node: '>= 0.4'}
+
+ unconfig-core@7.5.0:
+ resolution: {integrity: sha512-Su3FauozOGP44ZmKdHy2oE6LPjk51M/TRRjHv2HNCWiDvfvCoxC2lno6jevMA91MYAdCdwP05QnWdWpSbncX/w==}
+
+ unconfig@7.5.0:
+ resolution: {integrity: sha512-oi8Qy2JV4D3UQ0PsopR28CzdQ3S/5A1zwsUwp/rosSbfhJ5z7b90bIyTwi/F7hCLD4SGcZVjDzd4XoUQcEanvA==}
+
+ undici-types@7.24.6:
+ resolution: {integrity: sha512-WRNW+sJgj5OBN4/0JpHFqtqzhpbnV0GuB+OozA9gCL7a993SmU+1JBZCzLNxYsbMfIeDL+lTsphD5jN5N+n0zg==}
+
+ unplugin@3.0.0:
+ resolution: {integrity: sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+
+ uri-js@4.4.1:
+ resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==}
+
+ util-deprecate@1.0.2:
+ resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==}
+
+ validate-npm-package-license@3.0.4:
+ resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==}
+
+ validate-npm-package-name@7.0.2:
+ resolution: {integrity: sha512-hVDIBwsRruT73PbK7uP5ebUt+ezEtCmzZz3F59BSr2F6OVFnJ/6h8liuvdLrQ88Xmnk6/+xGGuq+pG9WwTuy3A==}
+ engines: {node: ^20.17.0 || >=22.9.0}
+
+ vite@8.0.16:
+ resolution: {integrity: sha512-h9bXPmJichP5fLmVQo3PyaGSDE2n3aPuomeAlVRm0JLmt4rY6zmPKd59HYI4LNW8oTK7tlTsuC7l/m7awx9Jcw==}
+ engines: {node: ^20.19.0 || >=22.12.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^20.19.0 || >=22.12.0
+ '@vitejs/devtools': ^0.1.18
+ esbuild: ^0.27.0 || ^0.28.0
+ jiti: '>=1.21.0'
+ less: ^4.0.0
+ sass: ^1.70.0
+ sass-embedded: ^1.70.0
+ stylus: '>=0.54.8'
+ sugarss: ^5.0.0
+ terser: ^5.16.0
+ tsx: ^4.8.1
+ yaml: ^2.4.2
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ '@vitejs/devtools':
+ optional: true
+ esbuild:
+ optional: true
+ jiti:
+ optional: true
+ less:
+ optional: true
+ sass:
+ optional: true
+ sass-embedded:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ tsx:
+ optional: true
+ yaml:
+ optional: true
+
+ vitest@4.1.9:
+ resolution: {integrity: sha512-nE3/LEyc0z87uHYLZebqCUOaJr2hdtuPp7BQ4BosVFnfltxgAvMG08NyrSGlPpOUWvR27c5flSmYFTNr78L9GQ==}
+ engines: {node: ^20.0.0 || ^22.0.0 || >=24.0.0}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@opentelemetry/api': ^1.9.0
+ '@types/node': ^20.0.0 || ^22.0.0 || >=24.0.0
+ '@vitest/browser-playwright': 4.1.9
+ '@vitest/browser-preview': 4.1.9
+ '@vitest/browser-webdriverio': 4.1.9
+ '@vitest/coverage-istanbul': 4.1.9
+ '@vitest/coverage-v8': 4.1.9
+ '@vitest/ui': 4.1.9
+ happy-dom: '*'
+ jsdom: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@opentelemetry/api':
+ optional: true
+ '@types/node':
+ optional: true
+ '@vitest/browser-playwright':
+ optional: true
+ '@vitest/browser-preview':
+ optional: true
+ '@vitest/browser-webdriverio':
+ optional: true
+ '@vitest/coverage-istanbul':
+ optional: true
+ '@vitest/coverage-v8':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+
+ webpack-virtual-modules@0.6.2:
+ resolution: {integrity: sha512-66/V2i5hQanC51vBQKPH4aI8NMAcBW59FVBs+rC7eGHupMyfn34q7rZIE+ETlJ+XTevqfUhVVBgSUNSW2flEUQ==}
+
+ which-boxed-primitive@1.1.1:
+ resolution: {integrity: sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==}
+ engines: {node: '>= 0.4'}
+
+ which-builtin-type@1.2.1:
+ resolution: {integrity: sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==}
+ engines: {node: '>= 0.4'}
+
+ which-collection@1.0.2:
+ resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==}
+ engines: {node: '>= 0.4'}
+
+ which-typed-array@1.1.22:
+ resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==}
+ engines: {node: '>= 0.4'}
+
+ which@2.0.2:
+ resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==}
+ engines: {node: '>= 8'}
+ hasBin: true
+
+ why-is-node-running@2.3.0:
+ resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==}
+ engines: {node: '>=8'}
+ hasBin: true
+
+ word-wrap@1.2.5:
+ resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==}
+ engines: {node: '>=0.10.0'}
+
+ yaml-eslint-parser@2.0.0:
+ resolution: {integrity: sha512-h0uDm97wvT2bokfwwTmY6kJ1hp6YDFL0nRHwNKz8s/VD1FH/vvZjAKoMUE+un0eaYBSG7/c6h+lJTP+31tjgTw==}
+ engines: {node: ^20.19.0 || ^22.13.0 || >=24}
+
+ yaml@2.9.0:
+ resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==}
+ engines: {node: '>= 14.6'}
+ hasBin: true
+
+ yocto-queue@0.1.0:
+ resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
+ engines: {node: '>=10'}
+
+snapshots:
+
+ '@altano/repository-tools@2.0.3': {}
+
+ '@astrojs/compiler@3.0.1': {}
+
+ '@babel/generator@8.0.0':
+ dependencies:
+ '@babel/parser': 8.0.0
+ '@babel/types': 8.0.0
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+ '@types/jsesc': 2.5.1
+ jsesc: 3.1.0
+
+ '@babel/helper-string-parser@8.0.0': {}
+
+ '@babel/helper-validator-identifier@8.0.2': {}
+
+ '@babel/parser@8.0.0':
+ dependencies:
+ '@babel/types': 8.0.0
+
+ '@babel/types@8.0.0':
+ dependencies:
+ '@babel/helper-string-parser': 8.0.0
+ '@babel/helper-validator-identifier': 8.0.2
+
+ '@emnapi/core@1.10.0':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.1
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/core@1.11.1':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.2
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/core@1.9.2':
+ dependencies:
+ '@emnapi/wasi-threads': 1.2.1
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.10.0':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.11.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/runtime@1.9.2':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.2.1':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@emnapi/wasi-threads@1.2.2':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@es-joy/jsdoccomment@0.86.0':
+ dependencies:
+ '@types/estree': 1.0.9
+ '@typescript-eslint/types': 8.61.1
+ comment-parser: 1.4.6
+ esquery: 1.7.0
+ jsdoc-type-pratt-parser: 7.2.0
+
+ '@es-joy/resolve.exports@1.2.0': {}
+
+ '@esbuild/aix-ppc64@0.28.1':
+ optional: true
+
+ '@esbuild/android-arm64@0.28.1':
+ optional: true
+
+ '@esbuild/android-arm@0.28.1':
+ optional: true
+
+ '@esbuild/android-x64@0.28.1':
+ optional: true
+
+ '@esbuild/darwin-arm64@0.28.1':
+ optional: true
+
+ '@esbuild/darwin-x64@0.28.1':
+ optional: true
+
+ '@esbuild/freebsd-arm64@0.28.1':
+ optional: true
+
+ '@esbuild/freebsd-x64@0.28.1':
+ optional: true
+
+ '@esbuild/linux-arm64@0.28.1':
+ optional: true
+
+ '@esbuild/linux-arm@0.28.1':
+ optional: true
+
+ '@esbuild/linux-ia32@0.28.1':
+ optional: true
+
+ '@esbuild/linux-loong64@0.28.1':
+ optional: true
+
+ '@esbuild/linux-mips64el@0.28.1':
+ optional: true
+
+ '@esbuild/linux-ppc64@0.28.1':
+ optional: true
+
+ '@esbuild/linux-riscv64@0.28.1':
+ optional: true
+
+ '@esbuild/linux-s390x@0.28.1':
+ optional: true
+
+ '@esbuild/linux-x64@0.28.1':
+ optional: true
+
+ '@esbuild/netbsd-arm64@0.28.1':
+ optional: true
+
+ '@esbuild/netbsd-x64@0.28.1':
+ optional: true
+
+ '@esbuild/openbsd-arm64@0.28.1':
+ optional: true
+
+ '@esbuild/openbsd-x64@0.28.1':
+ optional: true
+
+ '@esbuild/openharmony-arm64@0.28.1':
+ optional: true
+
+ '@esbuild/sunos-x64@0.28.1':
+ optional: true
+
+ '@esbuild/win32-arm64@0.28.1':
+ optional: true
+
+ '@esbuild/win32-ia32@0.28.1':
+ optional: true
+
+ '@esbuild/win32-x64@0.28.1':
+ optional: true
+
+ '@eslint-community/eslint-utils@4.9.1(eslint@9.39.4)':
+ dependencies:
+ eslint: 9.39.4(jiti@2.7.0)
+ eslint-visitor-keys: 3.4.3
+
+ '@eslint-community/regexpp@4.12.2': {}
+
+ '@eslint/config-array@0.21.2':
+ dependencies:
+ '@eslint/object-schema': 2.1.7
+ debug: 4.4.3
+ minimatch: 3.1.5
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/config-helpers@0.4.2':
+ dependencies:
+ '@eslint/core': 0.17.0
+
+ '@eslint/core@0.17.0':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/core@1.2.1':
+ dependencies:
+ '@types/json-schema': 7.0.15
+
+ '@eslint/eslintrc@3.3.5':
+ dependencies:
+ ajv: 6.15.0
+ debug: 4.4.3
+ espree: 10.4.0
+ globals: 14.0.0
+ ignore: 5.3.2
+ import-fresh: 3.3.1
+ js-yaml: 4.2.0
+ minimatch: 3.1.5
+ strip-json-comments: 3.1.1
+ transitivePeerDependencies:
+ - supports-color
+
+ '@eslint/js@9.39.4': {}
+
+ '@eslint/object-schema@2.1.7': {}
+
+ '@eslint/plugin-kit@0.4.1':
+ dependencies:
+ '@eslint/core': 0.17.0
+ levn: 0.4.1
+
+ '@eslint/plugin-kit@0.7.2':
+ dependencies:
+ '@eslint/core': 1.2.1
+ levn: 0.4.1
+
+ '@felixicaza/eslint-config@0.1.2(@types/estree@1.0.9)(eslint@9.39.4)(oxlint@1.67.0)':
+ dependencies:
+ '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.4)
+ eslint: 9.39.4(jiti@2.7.0)
+ eslint-plugin-astro: 1.7.0(eslint@9.39.4)
+ eslint-plugin-jsonc: 3.2.0(eslint@9.39.4)
+ eslint-plugin-jsx-a11y: 6.10.2(eslint@9.39.4)
+ eslint-plugin-oxlint: 1.67.0(oxlint@1.67.0)
+ eslint-plugin-package-json: 1.2.0(@types/estree@1.0.9)(eslint@9.39.4)
+ eslint-plugin-yml: 3.4.0(eslint@9.39.4)
+ transitivePeerDependencies:
+ - '@eslint/json'
+ - '@types/estree'
+ - oxlint
+ - supports-color
+
+ '@felixicaza/oxlint-config@0.1.3(eslint@9.39.4)(estree-walker@3.0.3)(oxc-parser@0.126.0)(oxlint@1.67.0)':
+ dependencies:
+ '@stylistic/eslint-plugin': 5.10.0(eslint@9.39.4)
+ eslint-plugin-jsdoc: 63.0.0(eslint@9.39.4)
+ oxlint: 1.67.0(oxlint-tsgolint@0.23.0)
+ oxlint-plugin-complexity: 2.1.3(estree-walker@3.0.3)(oxc-parser@0.126.0)
+ oxlint-plugin-eslint: 1.67.0
+ oxlint-tsgolint: 0.23.0
+ transitivePeerDependencies:
+ - diff
+ - eslint
+ - estree-walker
+ - oxc-parser
+ - supports-color
+
+ '@felixicaza/tsdown-config@0.1.3(rolldown@1.1.2)(tsdown@0.22.3)':
+ dependencies:
+ rolldown-plugin-dts-minify-lite: 0.5.2(rolldown@1.1.2)
+ tsdown: 0.22.3(tsx@4.22.4)(typescript@6.0.3)
+ tsdown-stale-guard: 0.1.2(tsdown@0.22.3)
+ transitivePeerDependencies:
+ - rolldown
+
+ '@humanfs/core@0.19.2':
+ dependencies:
+ '@humanfs/types': 0.15.0
+
+ '@humanfs/node@0.16.8':
+ dependencies:
+ '@humanfs/core': 0.19.2
+ '@humanfs/types': 0.15.0
+ '@humanwhocodes/retry': 0.4.3
+
+ '@humanfs/types@0.15.0': {}
+
+ '@humanwhocodes/module-importer@1.0.1': {}
+
+ '@humanwhocodes/retry@0.4.3': {}
+
+ '@jridgewell/gen-mapping@0.3.13':
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/remapping@2.3.5':
+ dependencies:
+ '@jridgewell/gen-mapping': 0.3.13
+ '@jridgewell/trace-mapping': 0.3.31
+
+ '@jridgewell/resolve-uri@3.1.2': {}
+
+ '@jridgewell/sourcemap-codec@1.5.5': {}
+
+ '@jridgewell/trace-mapping@0.3.31':
+ dependencies:
+ '@jridgewell/resolve-uri': 3.1.2
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)':
+ dependencies:
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
+ '@tybys/wasm-util': 0.10.2
+ optional: true
+
+ '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)':
+ dependencies:
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@tybys/wasm-util': 0.10.2
+ optional: true
+
+ '@napi-rs/wasm-runtime@1.1.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)':
+ dependencies:
+ '@emnapi/core': 1.9.2
+ '@emnapi/runtime': 1.9.2
+ '@tybys/wasm-util': 0.10.2
+ optional: true
+
+ '@nodelib/fs.scandir@2.1.5':
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ run-parallel: 1.2.0
+
+ '@nodelib/fs.stat@2.0.5': {}
+
+ '@nodelib/fs.walk@1.2.8':
+ dependencies:
+ '@nodelib/fs.scandir': 2.1.5
+ fastq: 1.20.1
+
+ '@ota-meshi/ast-token-store@0.3.0': {}
+
+ '@oxc-parser/binding-android-arm-eabi@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-android-arm64@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-darwin-arm64@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-darwin-x64@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-freebsd-x64@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-gnueabihf@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm-musleabihf@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-gnu@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-arm64-musl@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-ppc64-gnu@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-gnu@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-riscv64-musl@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-s390x-gnu@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-gnu@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-linux-x64-musl@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-openharmony-arm64@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-wasm32-wasi@0.126.0':
+ dependencies:
+ '@emnapi/core': 1.9.2
+ '@emnapi/runtime': 1.9.2
+ '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.9.2)(@emnapi/runtime@1.9.2)
+ optional: true
+
+ '@oxc-parser/binding-win32-arm64-msvc@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-win32-ia32-msvc@0.126.0':
+ optional: true
+
+ '@oxc-parser/binding-win32-x64-msvc@0.126.0':
+ optional: true
+
+ '@oxc-project/types@0.126.0': {}
+
+ '@oxc-project/types@0.133.0': {}
+
+ '@oxc-project/types@0.137.0': {}
+
+ '@oxlint-tsgolint/darwin-arm64@0.23.0':
+ optional: true
+
+ '@oxlint-tsgolint/darwin-x64@0.23.0':
+ optional: true
+
+ '@oxlint-tsgolint/linux-arm64@0.23.0':
+ optional: true
+
+ '@oxlint-tsgolint/linux-x64@0.23.0':
+ optional: true
+
+ '@oxlint-tsgolint/win32-arm64@0.23.0':
+ optional: true
+
+ '@oxlint-tsgolint/win32-x64@0.23.0':
+ optional: true
+
+ '@oxlint/binding-android-arm-eabi@1.67.0':
+ optional: true
+
+ '@oxlint/binding-android-arm64@1.67.0':
+ optional: true
+
+ '@oxlint/binding-darwin-arm64@1.67.0':
+ optional: true
+
+ '@oxlint/binding-darwin-x64@1.67.0':
+ optional: true
+
+ '@oxlint/binding-freebsd-x64@1.67.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm-gnueabihf@1.67.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm-musleabihf@1.67.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm64-gnu@1.67.0':
+ optional: true
+
+ '@oxlint/binding-linux-arm64-musl@1.67.0':
+ optional: true
+
+ '@oxlint/binding-linux-ppc64-gnu@1.67.0':
+ optional: true
+
+ '@oxlint/binding-linux-riscv64-gnu@1.67.0':
+ optional: true
+
+ '@oxlint/binding-linux-riscv64-musl@1.67.0':
+ optional: true
+
+ '@oxlint/binding-linux-s390x-gnu@1.67.0':
+ optional: true
+
+ '@oxlint/binding-linux-x64-gnu@1.67.0':
+ optional: true
+
+ '@oxlint/binding-linux-x64-musl@1.67.0':
+ optional: true
+
+ '@oxlint/binding-openharmony-arm64@1.67.0':
+ optional: true
+
+ '@oxlint/binding-win32-arm64-msvc@1.67.0':
+ optional: true
+
+ '@oxlint/binding-win32-ia32-msvc@1.67.0':
+ optional: true
+
+ '@oxlint/binding-win32-x64-msvc@1.67.0':
+ optional: true
+
+ '@oxlint/plugins@1.71.0': {}
+
+ '@pkgr/core@0.3.6': {}
+
+ '@quansync/fs@1.0.0':
+ dependencies:
+ quansync: 1.0.0
+
+ '@rolldown/binding-android-arm64@1.0.3':
+ optional: true
+
+ '@rolldown/binding-android-arm64@1.1.2':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.0.3':
+ optional: true
+
+ '@rolldown/binding-darwin-arm64@1.1.2':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.0.3':
+ optional: true
+
+ '@rolldown/binding-darwin-x64@1.1.2':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.0.3':
+ optional: true
+
+ '@rolldown/binding-freebsd-x64@1.1.2':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.0.3':
+ optional: true
+
+ '@rolldown/binding-linux-arm-gnueabihf@1.1.2':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.0.3':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-gnu@1.1.2':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.0.3':
+ optional: true
+
+ '@rolldown/binding-linux-arm64-musl@1.1.2':
+ optional: true
+
+ '@rolldown/binding-linux-ppc64-gnu@1.0.3':
+ optional: true
+
+ '@rolldown/binding-linux-ppc64-gnu@1.1.2':
+ optional: true
+
+ '@rolldown/binding-linux-s390x-gnu@1.0.3':
+ optional: true
+
+ '@rolldown/binding-linux-s390x-gnu@1.1.2':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.0.3':
+ optional: true
+
+ '@rolldown/binding-linux-x64-gnu@1.1.2':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.0.3':
+ optional: true
+
+ '@rolldown/binding-linux-x64-musl@1.1.2':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.0.3':
+ optional: true
+
+ '@rolldown/binding-openharmony-arm64@1.1.2':
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.0.3':
+ dependencies:
+ '@emnapi/core': 1.10.0
+ '@emnapi/runtime': 1.10.0
+ '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.10.0)(@emnapi/runtime@1.10.0)
+ optional: true
+
+ '@rolldown/binding-wasm32-wasi@1.1.2':
+ dependencies:
+ '@emnapi/core': 1.11.1
+ '@emnapi/runtime': 1.11.1
+ '@napi-rs/wasm-runtime': 1.1.5(@emnapi/core@1.11.1)(@emnapi/runtime@1.11.1)
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.0.3':
+ optional: true
+
+ '@rolldown/binding-win32-arm64-msvc@1.1.2':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.0.3':
+ optional: true
+
+ '@rolldown/binding-win32-x64-msvc@1.1.2':
+ optional: true
+
+ '@rolldown/pluginutils@1.0.1': {}
+
+ '@sindresorhus/base62@1.0.0': {}
+
+ '@standard-schema/spec@1.1.0': {}
+
+ '@stylistic/eslint-plugin@5.10.0(eslint@9.39.4)':
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4)
+ '@typescript-eslint/types': 8.61.1
+ eslint: 9.39.4(jiti@2.7.0)
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ estraverse: 5.3.0
+ picomatch: 4.0.4
+
+ '@tybys/wasm-util@0.10.2':
+ dependencies:
+ tslib: 2.8.1
+ optional: true
+
+ '@types/chai@5.2.3':
+ dependencies:
+ '@types/deep-eql': 4.0.2
+ assertion-error: 2.0.1
+
+ '@types/deep-eql@4.0.2': {}
+
+ '@types/estree@1.0.9': {}
+
+ '@types/jsesc@2.5.1': {}
+
+ '@types/json-schema@7.0.15': {}
+
+ '@types/node@25.9.3':
+ dependencies:
+ undici-types: 7.24.6
+
+ '@typescript-eslint/scope-manager@8.61.1':
+ dependencies:
+ '@typescript-eslint/types': 8.61.1
+ '@typescript-eslint/visitor-keys': 8.61.1
+
+ '@typescript-eslint/types@8.61.1': {}
+
+ '@typescript-eslint/visitor-keys@8.61.1':
+ dependencies:
+ '@typescript-eslint/types': 8.61.1
+ eslint-visitor-keys: 5.0.1
+
+ '@vitest/expect@4.1.9':
+ dependencies:
+ '@standard-schema/spec': 1.1.0
+ '@types/chai': 5.2.3
+ '@vitest/spy': 4.1.9
+ '@vitest/utils': 4.1.9
+ chai: 6.2.2
+ tinyrainbow: 3.1.0
+
+ '@vitest/mocker@4.1.9(vite@8.0.16)':
+ dependencies:
+ '@vitest/spy': 4.1.9
+ estree-walker: 3.0.3
+ magic-string: 0.30.21
+ optionalDependencies:
+ vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0)
+
+ '@vitest/pretty-format@4.1.9':
+ dependencies:
+ tinyrainbow: 3.1.0
+
+ '@vitest/runner@4.1.9':
+ dependencies:
+ '@vitest/utils': 4.1.9
+ pathe: 2.0.3
+
+ '@vitest/snapshot@4.1.9':
+ dependencies:
+ '@vitest/pretty-format': 4.1.9
+ '@vitest/utils': 4.1.9
+ magic-string: 0.30.21
+ pathe: 2.0.3
+
+ '@vitest/spy@4.1.9': {}
+
+ '@vitest/utils@4.1.9':
+ dependencies:
+ '@vitest/pretty-format': 4.1.9
+ convert-source-map: 2.0.0
+ tinyrainbow: 3.1.0
+
+ acorn-jsx@5.3.2(acorn@8.17.0):
+ dependencies:
+ acorn: 8.17.0
+
+ acorn@8.17.0: {}
+
+ ajv@6.15.0:
+ dependencies:
+ fast-deep-equal: 3.1.3
+ fast-json-stable-stringify: 2.1.0
+ json-schema-traverse: 0.4.1
+ uri-js: 4.4.1
+
+ ansi-styles@4.3.0:
+ dependencies:
+ color-convert: 2.0.1
+
+ ansis@4.3.1: {}
+
+ are-docs-informative@0.0.2: {}
+
+ argparse@2.0.1: {}
+
+ args-tokenizer@0.3.0: {}
+
+ aria-query@5.3.2: {}
+
+ array-buffer-byte-length@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ is-array-buffer: 3.0.5
+
+ array-includes@3.1.9:
+ dependencies:
+ call-bind: 1.0.9
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.2
+ es-object-atoms: 1.1.2
+ get-intrinsic: 1.3.0
+ is-string: 1.1.1
+ math-intrinsics: 1.1.0
+
+ array.prototype.flat@1.3.3:
+ dependencies:
+ call-bind: 1.0.9
+ define-properties: 1.2.1
+ es-abstract: 1.24.2
+ es-shim-unscopables: 1.1.0
+
+ array.prototype.flatmap@1.3.3:
+ dependencies:
+ call-bind: 1.0.9
+ define-properties: 1.2.1
+ es-abstract: 1.24.2
+ es-shim-unscopables: 1.1.0
+
+ arraybuffer.prototype.slice@1.0.4:
+ dependencies:
+ array-buffer-byte-length: 1.0.2
+ call-bind: 1.0.9
+ define-properties: 1.2.1
+ es-abstract: 1.24.2
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ is-array-buffer: 3.0.5
+
+ assertion-error@2.0.1: {}
+
+ ast-kit@3.0.0:
+ dependencies:
+ '@babel/parser': 8.0.0
+ estree-walker: 3.0.3
+ pathe: 2.0.3
+
+ ast-types-flow@0.0.8: {}
+
+ astro-eslint-parser@1.4.0:
+ dependencies:
+ '@astrojs/compiler': 3.0.1
+ '@typescript-eslint/scope-manager': 8.61.1
+ '@typescript-eslint/types': 8.61.1
+ astrojs-compiler-sync: 1.1.1(@astrojs/compiler@3.0.1)
+ debug: 4.4.3
+ entities: 7.0.1
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ fast-glob: 3.3.3
+ is-glob: 4.0.3
+ semver: 7.8.5
+ transitivePeerDependencies:
+ - supports-color
+
+ astrojs-compiler-sync@1.1.1(@astrojs/compiler@3.0.1):
+ dependencies:
+ '@astrojs/compiler': 3.0.1
+ synckit: 0.11.13
+
+ async-function@1.0.0: {}
+
+ available-typed-arrays@1.0.7:
+ dependencies:
+ possible-typed-array-names: 1.1.0
+
+ axe-core@4.12.1: {}
+
+ axobject-query@4.1.0: {}
+
+ balanced-match@1.0.2: {}
+
+ birpc@4.0.0: {}
+
+ brace-expansion@1.1.15:
+ dependencies:
+ balanced-match: 1.0.2
+ concat-map: 0.0.1
+
+ braces@3.0.3:
+ dependencies:
+ fill-range: 7.1.1
+
+ bumpp@11.1.0:
+ dependencies:
+ args-tokenizer: 0.3.0
+ cac: 7.0.0
+ jsonc-parser: 3.3.1
+ package-manager-detector: 1.6.0
+ semver: 7.8.5
+ tinyexec: 1.2.4
+ tinyglobby: 0.2.17
+ unconfig: 7.5.0
+ yaml: 2.9.0
+
+ cac@7.0.0: {}
+
+ call-bind-apply-helpers@1.0.2:
+ dependencies:
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+
+ call-bind@1.0.9:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ get-intrinsic: 1.3.0
+ set-function-length: 1.2.2
+
+ call-bound@1.0.4:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ get-intrinsic: 1.3.0
+
+ callsites@3.1.0: {}
+
+ chai@6.2.2: {}
+
+ chalk@4.1.2:
+ dependencies:
+ ansi-styles: 4.3.0
+ supports-color: 7.2.0
+
+ change-case@5.4.4: {}
+
+ color-convert@2.0.1:
+ dependencies:
+ color-name: 1.1.4
+
+ color-name@1.1.4: {}
+
+ comment-parser@1.4.6: {}
+
+ concat-map@0.0.1: {}
+
+ convert-source-map@2.0.0: {}
+
+ cross-spawn@7.0.6:
+ dependencies:
+ path-key: 3.1.1
+ shebang-command: 2.0.0
+ which: 2.0.2
+
+ cssesc@3.0.0: {}
+
+ damerau-levenshtein@1.0.8: {}
+
+ data-view-buffer@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ data-view-byte-length@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ data-view-byte-offset@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-data-view: 1.0.2
+
+ debug@4.4.3:
+ dependencies:
+ ms: 2.1.3
+
+ deep-is@0.1.4: {}
+
+ define-data-property@1.1.4:
+ dependencies:
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ define-properties@1.2.1:
+ dependencies:
+ define-data-property: 1.1.4
+ has-property-descriptors: 1.0.2
+ object-keys: 1.1.1
+
+ defu@6.1.7: {}
+
+ detect-indent@7.0.2: {}
+
+ detect-libc@2.1.2: {}
+
+ detect-newline@4.0.1: {}
+
+ diff-sequences@29.6.3: {}
+
+ dts-minify-lite@0.5.6: {}
+
+ dts-resolver@3.0.0: {}
+
+ dunder-proto@1.0.1:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-errors: 1.3.0
+ gopd: 1.2.0
+
+ emoji-regex@9.2.2: {}
+
+ empathic@2.0.1: {}
+
+ entities@7.0.1: {}
+
+ es-abstract-get@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.2
+ is-callable: 1.2.7
+ object-inspect: 1.13.4
+
+ es-abstract@1.24.2:
+ dependencies:
+ array-buffer-byte-length: 1.0.2
+ arraybuffer.prototype.slice: 1.0.4
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.9
+ call-bound: 1.0.4
+ data-view-buffer: 1.0.2
+ data-view-byte-length: 1.0.2
+ data-view-byte-offset: 1.0.1
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.2
+ es-set-tostringtag: 2.1.0
+ es-to-primitive: 1.3.1
+ function.prototype.name: 1.2.0
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ get-symbol-description: 1.1.0
+ globalthis: 1.0.4
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+ has-proto: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.4
+ internal-slot: 1.1.0
+ is-array-buffer: 3.0.5
+ is-callable: 1.2.7
+ is-data-view: 1.0.2
+ is-negative-zero: 2.0.3
+ is-regex: 1.2.1
+ is-set: 2.0.3
+ is-shared-array-buffer: 1.0.4
+ is-string: 1.1.1
+ is-typed-array: 1.1.15
+ is-weakref: 1.1.1
+ math-intrinsics: 1.1.0
+ object-inspect: 1.13.4
+ object-keys: 1.1.1
+ object.assign: 4.1.7
+ own-keys: 1.0.1
+ regexp.prototype.flags: 1.5.4
+ safe-array-concat: 1.1.4
+ safe-push-apply: 1.0.0
+ safe-regex-test: 1.1.0
+ set-proto: 1.0.0
+ stop-iteration-iterator: 1.1.0
+ string.prototype.trim: 1.2.11
+ string.prototype.trimend: 1.0.10
+ string.prototype.trimstart: 1.0.8
+ typed-array-buffer: 1.0.3
+ typed-array-byte-length: 1.0.3
+ typed-array-byte-offset: 1.0.4
+ typed-array-length: 1.0.8
+ unbox-primitive: 1.1.0
+ which-typed-array: 1.1.22
+
+ es-define-property@1.0.1: {}
+
+ es-errors@1.3.0: {}
+
+ es-module-lexer@2.1.0: {}
+
+ es-object-atoms@1.1.2:
+ dependencies:
+ es-errors: 1.3.0
+
+ es-set-tostringtag@2.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.4
+
+ es-shim-unscopables@1.1.0:
+ dependencies:
+ hasown: 2.0.4
+
+ es-to-primitive@1.3.1:
+ dependencies:
+ es-abstract-get: 1.0.0
+ es-errors: 1.3.0
+ is-callable: 1.2.7
+ is-date-object: 1.1.0
+ is-symbol: 1.1.1
+
+ esbuild@0.28.1:
+ optionalDependencies:
+ '@esbuild/aix-ppc64': 0.28.1
+ '@esbuild/android-arm': 0.28.1
+ '@esbuild/android-arm64': 0.28.1
+ '@esbuild/android-x64': 0.28.1
+ '@esbuild/darwin-arm64': 0.28.1
+ '@esbuild/darwin-x64': 0.28.1
+ '@esbuild/freebsd-arm64': 0.28.1
+ '@esbuild/freebsd-x64': 0.28.1
+ '@esbuild/linux-arm': 0.28.1
+ '@esbuild/linux-arm64': 0.28.1
+ '@esbuild/linux-ia32': 0.28.1
+ '@esbuild/linux-loong64': 0.28.1
+ '@esbuild/linux-mips64el': 0.28.1
+ '@esbuild/linux-ppc64': 0.28.1
+ '@esbuild/linux-riscv64': 0.28.1
+ '@esbuild/linux-s390x': 0.28.1
+ '@esbuild/linux-x64': 0.28.1
+ '@esbuild/netbsd-arm64': 0.28.1
+ '@esbuild/netbsd-x64': 0.28.1
+ '@esbuild/openbsd-arm64': 0.28.1
+ '@esbuild/openbsd-x64': 0.28.1
+ '@esbuild/openharmony-arm64': 0.28.1
+ '@esbuild/sunos-x64': 0.28.1
+ '@esbuild/win32-arm64': 0.28.1
+ '@esbuild/win32-ia32': 0.28.1
+ '@esbuild/win32-x64': 0.28.1
+
+ escape-string-regexp@4.0.0: {}
+
+ escape-string-regexp@5.0.0: {}
+
+ eslint-compat-utils@0.6.5(eslint@9.39.4):
+ dependencies:
+ eslint: 9.39.4(jiti@2.7.0)
+ semver: 7.8.5
+
+ eslint-fix-utils@0.4.2(@types/estree@1.0.9)(eslint@9.39.4):
+ dependencies:
+ eslint: 9.39.4(jiti@2.7.0)
+ optionalDependencies:
+ '@types/estree': 1.0.9
+
+ eslint-json-compat-utils@0.2.3(eslint@9.39.4)(jsonc-eslint-parser@3.1.0):
+ dependencies:
+ eslint: 9.39.4(jiti@2.7.0)
+ esquery: 1.7.0
+ jsonc-eslint-parser: 3.1.0
+
+ eslint-plugin-astro@1.7.0(eslint@9.39.4):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4)
+ '@jridgewell/sourcemap-codec': 1.5.5
+ '@typescript-eslint/types': 8.61.1
+ astro-eslint-parser: 1.4.0
+ eslint: 9.39.4(jiti@2.7.0)
+ eslint-compat-utils: 0.6.5(eslint@9.39.4)
+ globals: 16.5.0
+ postcss: 8.5.15
+ postcss-selector-parser: 7.1.4
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint-plugin-jsdoc@63.0.0(eslint@9.39.4):
+ dependencies:
+ '@es-joy/jsdoccomment': 0.86.0
+ '@es-joy/resolve.exports': 1.2.0
+ are-docs-informative: 0.0.2
+ comment-parser: 1.4.6
+ debug: 4.4.3
+ escape-string-regexp: 4.0.0
+ eslint: 9.39.4(jiti@2.7.0)
+ espree: 11.2.0
+ esquery: 1.7.0
+ html-entities: 2.6.0
+ object-deep-merge: 2.0.1
+ parse-imports-exports: 0.2.4
+ semver: 7.8.5
+ spdx-expression-parse: 4.0.0
+ to-valid-identifier: 1.0.0
+ transitivePeerDependencies:
+ - supports-color
+
+ eslint-plugin-jsonc@3.2.0(eslint@9.39.4):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4)
+ '@eslint/core': 1.2.1
+ '@eslint/plugin-kit': 0.7.2
+ '@ota-meshi/ast-token-store': 0.3.0
+ diff-sequences: 29.6.3
+ eslint: 9.39.4(jiti@2.7.0)
+ eslint-json-compat-utils: 0.2.3(eslint@9.39.4)(jsonc-eslint-parser@3.1.0)
+ jsonc-eslint-parser: 3.1.0
+ natural-compare: 1.4.0
+ synckit: 0.11.13
+ transitivePeerDependencies:
+ - '@eslint/json'
+
+ eslint-plugin-jsx-a11y@6.10.2(eslint@9.39.4):
+ dependencies:
+ aria-query: 5.3.2
+ array-includes: 3.1.9
+ array.prototype.flatmap: 1.3.3
+ ast-types-flow: 0.0.8
+ axe-core: 4.12.1
+ axobject-query: 4.1.0
+ damerau-levenshtein: 1.0.8
+ emoji-regex: 9.2.2
+ eslint: 9.39.4(jiti@2.7.0)
+ hasown: 2.0.4
+ jsx-ast-utils: 3.3.5
+ language-tags: 1.0.9
+ minimatch: 3.1.5
+ object.fromentries: 2.0.8
+ safe-regex-test: 1.1.0
+ string.prototype.includes: 2.0.1
+
+ eslint-plugin-oxlint@1.67.0(oxlint@1.67.0):
+ dependencies:
+ jsonc-parser: 3.3.1
+ oxlint: 1.67.0(oxlint-tsgolint@0.23.0)
+
+ eslint-plugin-package-json@1.2.0(@types/estree@1.0.9)(eslint@9.39.4):
+ dependencies:
+ '@altano/repository-tools': 2.0.3
+ change-case: 5.4.4
+ detect-indent: 7.0.2
+ detect-newline: 4.0.1
+ eslint: 9.39.4(jiti@2.7.0)
+ eslint-fix-utils: 0.4.2(@types/estree@1.0.9)(eslint@9.39.4)
+ eslint-json-compat-utils: 0.2.3(eslint@9.39.4)(jsonc-eslint-parser@3.1.0)
+ jsonc-eslint-parser: 3.1.0
+ package-json-validator: 1.5.2
+ semver: 7.8.5
+ sort-object-keys: 2.1.0
+ sort-package-json: 3.7.1
+ transitivePeerDependencies:
+ - '@types/estree'
+
+ eslint-plugin-yml@3.4.0(eslint@9.39.4):
+ dependencies:
+ '@eslint/core': 1.2.1
+ '@eslint/plugin-kit': 0.7.2
+ '@ota-meshi/ast-token-store': 0.3.0
+ diff-sequences: 29.6.3
+ escape-string-regexp: 5.0.0
+ eslint: 9.39.4(jiti@2.7.0)
+ natural-compare: 1.4.0
+ yaml-eslint-parser: 2.0.0
+
+ eslint-scope@8.4.0:
+ dependencies:
+ esrecurse: 4.3.0
+ estraverse: 5.3.0
+
+ eslint-visitor-keys@3.4.3: {}
+
+ eslint-visitor-keys@4.2.1: {}
+
+ eslint-visitor-keys@5.0.1: {}
+
+ eslint@9.39.4(jiti@2.7.0):
+ dependencies:
+ '@eslint-community/eslint-utils': 4.9.1(eslint@9.39.4)
+ '@eslint-community/regexpp': 4.12.2
+ '@eslint/config-array': 0.21.2
+ '@eslint/config-helpers': 0.4.2
+ '@eslint/core': 0.17.0
+ '@eslint/eslintrc': 3.3.5
+ '@eslint/js': 9.39.4
+ '@eslint/plugin-kit': 0.4.1
+ '@humanfs/node': 0.16.8
+ '@humanwhocodes/module-importer': 1.0.1
+ '@humanwhocodes/retry': 0.4.3
+ '@types/estree': 1.0.9
+ ajv: 6.15.0
+ chalk: 4.1.2
+ cross-spawn: 7.0.6
+ debug: 4.4.3
+ escape-string-regexp: 4.0.0
+ eslint-scope: 8.4.0
+ eslint-visitor-keys: 4.2.1
+ espree: 10.4.0
+ esquery: 1.7.0
+ esutils: 2.0.3
+ fast-deep-equal: 3.1.3
+ file-entry-cache: 8.0.0
+ find-up: 5.0.0
+ glob-parent: 6.0.2
+ ignore: 5.3.2
+ imurmurhash: 0.1.4
+ is-glob: 4.0.3
+ json-stable-stringify-without-jsonify: 1.0.1
+ lodash.merge: 4.6.2
+ minimatch: 3.1.5
+ natural-compare: 1.4.0
+ optionator: 0.9.4
+ optionalDependencies:
+ jiti: 2.7.0
+ transitivePeerDependencies:
+ - supports-color
+
+ espree@10.4.0:
+ dependencies:
+ acorn: 8.17.0
+ acorn-jsx: 5.3.2(acorn@8.17.0)
+ eslint-visitor-keys: 4.2.1
+
+ espree@11.2.0:
+ dependencies:
+ acorn: 8.17.0
+ acorn-jsx: 5.3.2(acorn@8.17.0)
+ eslint-visitor-keys: 5.0.1
+
+ esquery@1.7.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ esrecurse@4.3.0:
+ dependencies:
+ estraverse: 5.3.0
+
+ estraverse@5.3.0: {}
+
+ estree-walker@3.0.3:
+ dependencies:
+ '@types/estree': 1.0.9
+
+ esutils@2.0.3: {}
+
+ expect-type@1.3.0: {}
+
+ fast-deep-equal@3.1.3: {}
+
+ fast-glob@3.3.3:
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.8
+
+ fast-json-stable-stringify@2.1.0: {}
+
+ fast-levenshtein@2.0.6: {}
+
+ fastq@1.20.1:
+ dependencies:
+ reusify: 1.1.0
+
+ fdir@6.5.0(picomatch@4.0.4):
+ optionalDependencies:
+ picomatch: 4.0.4
+
+ file-entry-cache@8.0.0:
+ dependencies:
+ flat-cache: 4.0.1
+
+ fill-range@7.1.1:
+ dependencies:
+ to-regex-range: 5.0.1
+
+ find-up@5.0.0:
+ dependencies:
+ locate-path: 6.0.0
+ path-exists: 4.0.0
+
+ flat-cache@4.0.1:
+ dependencies:
+ flatted: 3.4.2
+ keyv: 4.5.4
+
+ flatted@3.4.2: {}
+
+ for-each@0.3.5:
+ dependencies:
+ is-callable: 1.2.7
+
+ fsevents@2.3.3:
+ optional: true
+
+ function-bind@1.1.2: {}
+
+ function.prototype.name@1.2.0:
+ dependencies:
+ call-bind: 1.0.9
+ call-bound: 1.0.4
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
+ hasown: 2.0.4
+ is-callable: 1.2.7
+ is-document.all: 1.0.0
+
+ functions-have-names@1.2.3: {}
+
+ generator-function@2.0.1: {}
+
+ get-intrinsic@1.3.0:
+ dependencies:
+ call-bind-apply-helpers: 1.0.2
+ es-define-property: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.2
+ function-bind: 1.1.2
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-symbols: 1.1.0
+ hasown: 2.0.4
+ math-intrinsics: 1.1.0
+
+ get-proto@1.0.1:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-object-atoms: 1.1.2
+
+ get-symbol-description@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+
+ get-tsconfig@5.0.0-beta.5:
+ dependencies:
+ resolve-pkg-maps: 1.0.0
+
+ git-hooks-list@4.2.1: {}
+
+ glob-parent@5.1.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ glob-parent@6.0.2:
+ dependencies:
+ is-glob: 4.0.3
+
+ globals@14.0.0: {}
+
+ globals@16.5.0: {}
+
+ globalthis@1.0.4:
+ dependencies:
+ define-properties: 1.2.1
+ gopd: 1.2.0
+
+ gopd@1.2.0: {}
+
+ has-bigints@1.1.0: {}
+
+ has-flag@4.0.0: {}
+
+ has-property-descriptors@1.0.2:
+ dependencies:
+ es-define-property: 1.0.1
+
+ has-proto@1.2.0:
+ dependencies:
+ dunder-proto: 1.0.1
+
+ has-symbols@1.1.0: {}
+
+ has-tostringtag@1.0.2:
+ dependencies:
+ has-symbols: 1.1.0
+
+ hasown@2.0.4:
+ dependencies:
+ function-bind: 1.1.2
+
+ hookable@6.1.1: {}
+
+ hosted-git-info@9.0.3:
+ dependencies:
+ lru-cache: 11.5.1
+
+ html-entities@2.6.0: {}
+
+ ignore@5.3.2: {}
+
+ import-fresh@3.3.1:
+ dependencies:
+ parent-module: 1.0.1
+ resolve-from: 4.0.0
+
+ import-without-cache@0.4.0: {}
+
+ imurmurhash@0.1.4: {}
+
+ internal-slot@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ hasown: 2.0.4
+ side-channel: 1.1.1
+
+ is-array-buffer@3.0.5:
+ dependencies:
+ call-bind: 1.0.9
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+
+ is-async-function@2.1.1:
+ dependencies:
+ async-function: 1.0.0
+ call-bound: 1.0.4
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-bigint@1.1.0:
+ dependencies:
+ has-bigints: 1.1.0
+
+ is-boolean-object@1.2.2:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-callable@1.2.7: {}
+
+ is-data-view@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ is-typed-array: 1.1.15
+
+ is-date-object@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-document.all@1.0.0:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-extglob@2.1.1: {}
+
+ is-finalizationregistry@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-generator-function@1.1.2:
+ dependencies:
+ call-bound: 1.0.4
+ generator-function: 2.0.1
+ get-proto: 1.0.1
+ has-tostringtag: 1.0.2
+ safe-regex-test: 1.1.0
+
+ is-glob@4.0.3:
+ dependencies:
+ is-extglob: 2.1.1
+
+ is-map@2.0.3: {}
+
+ is-negative-zero@2.0.3: {}
+
+ is-number-object@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-number@7.0.0: {}
+
+ is-plain-obj@4.1.0: {}
+
+ is-regex@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+ hasown: 2.0.4
+
+ is-set@2.0.3: {}
+
+ is-shared-array-buffer@1.0.4:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-string@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-tostringtag: 1.0.2
+
+ is-symbol@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+ has-symbols: 1.1.0
+ safe-regex-test: 1.1.0
+
+ is-typed-array@1.1.15:
+ dependencies:
+ which-typed-array: 1.1.22
+
+ is-weakmap@2.0.2: {}
+
+ is-weakref@1.1.1:
+ dependencies:
+ call-bound: 1.0.4
+
+ is-weakset@2.0.4:
+ dependencies:
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+
+ isarray@2.0.5: {}
+
+ isexe@2.0.0: {}
+
+ jiti@2.7.0: {}
+
+ js-yaml@4.2.0:
+ dependencies:
+ argparse: 2.0.1
+
+ jsdoc-type-pratt-parser@7.2.0: {}
+
+ jsesc@3.1.0: {}
+
+ json-buffer@3.0.1: {}
+
+ json-schema-traverse@0.4.1: {}
+
+ json-stable-stringify-without-jsonify@1.0.1: {}
+
+ jsonc-eslint-parser@3.1.0:
+ dependencies:
+ acorn: 8.17.0
+ eslint-visitor-keys: 5.0.1
+ semver: 7.8.5
+
+ jsonc-parser@3.3.1: {}
+
+ jsx-ast-utils@3.3.5:
+ dependencies:
+ array-includes: 3.1.9
+ array.prototype.flat: 1.3.3
+ object.assign: 4.1.7
+ object.values: 1.2.1
+
+ keyv@4.5.4:
+ dependencies:
+ json-buffer: 3.0.1
+
+ language-subtag-registry@0.3.23: {}
+
+ language-tags@1.0.9:
+ dependencies:
+ language-subtag-registry: 0.3.23
+
+ levn@0.4.1:
+ dependencies:
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+
+ lightningcss-android-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-arm64@1.32.0:
+ optional: true
+
+ lightningcss-darwin-x64@1.32.0:
+ optional: true
+
+ lightningcss-freebsd-x64@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm-gnueabihf@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-arm64-musl@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-gnu@1.32.0:
+ optional: true
+
+ lightningcss-linux-x64-musl@1.32.0:
+ optional: true
+
+ lightningcss-win32-arm64-msvc@1.32.0:
+ optional: true
+
+ lightningcss-win32-x64-msvc@1.32.0:
+ optional: true
+
+ lightningcss@1.32.0:
+ dependencies:
+ detect-libc: 2.1.2
+ optionalDependencies:
+ lightningcss-android-arm64: 1.32.0
+ lightningcss-darwin-arm64: 1.32.0
+ lightningcss-darwin-x64: 1.32.0
+ lightningcss-freebsd-x64: 1.32.0
+ lightningcss-linux-arm-gnueabihf: 1.32.0
+ lightningcss-linux-arm64-gnu: 1.32.0
+ lightningcss-linux-arm64-musl: 1.32.0
+ lightningcss-linux-x64-gnu: 1.32.0
+ lightningcss-linux-x64-musl: 1.32.0
+ lightningcss-win32-arm64-msvc: 1.32.0
+ lightningcss-win32-x64-msvc: 1.32.0
+
+ locate-path@6.0.0:
+ dependencies:
+ p-locate: 5.0.0
+
+ lodash.merge@4.6.2: {}
+
+ logs-sdk@0.0.6:
+ dependencies:
+ magic-string: 0.30.21
+ oxc-parser: 0.126.0
+ unplugin: 3.0.0
+
+ lru-cache@11.5.1: {}
+
+ magic-string@0.30.21:
+ dependencies:
+ '@jridgewell/sourcemap-codec': 1.5.5
+
+ math-intrinsics@1.1.0: {}
+
+ merge2@1.4.1: {}
+
+ micromatch@4.0.8:
+ dependencies:
+ braces: 3.0.3
+ picomatch: 2.3.2
+
+ minimatch@3.1.5:
+ dependencies:
+ brace-expansion: 1.1.15
+
+ ms@2.1.3: {}
+
+ nano-staged@1.0.2: {}
+
+ nanoid@3.3.15: {}
+
+ natural-compare@1.4.0: {}
+
+ npm-package-arg@13.0.2:
+ dependencies:
+ hosted-git-info: 9.0.3
+ proc-log: 6.1.0
+ semver: 7.8.5
+ validate-npm-package-name: 7.0.2
+
+ object-deep-merge@2.0.1: {}
+
+ object-inspect@1.13.4: {}
+
+ object-keys@1.1.1: {}
+
+ object.assign@4.1.7:
+ dependencies:
+ call-bind: 1.0.9
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.2
+ has-symbols: 1.1.0
+ object-keys: 1.1.1
+
+ object.fromentries@2.0.8:
+ dependencies:
+ call-bind: 1.0.9
+ define-properties: 1.2.1
+ es-abstract: 1.24.2
+ es-object-atoms: 1.1.2
+
+ object.values@1.2.1:
+ dependencies:
+ call-bind: 1.0.9
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.2
+
+ obug@2.1.3: {}
+
+ optionator@0.9.4:
+ dependencies:
+ deep-is: 0.1.4
+ fast-levenshtein: 2.0.6
+ levn: 0.4.1
+ prelude-ls: 1.2.1
+ type-check: 0.4.0
+ word-wrap: 1.2.5
+
+ own-keys@1.0.1:
+ dependencies:
+ get-intrinsic: 1.3.0
+ object-keys: 1.1.1
+ safe-push-apply: 1.0.0
+
+ oxc-parser@0.126.0:
+ dependencies:
+ '@oxc-project/types': 0.126.0
+ optionalDependencies:
+ '@oxc-parser/binding-android-arm-eabi': 0.126.0
+ '@oxc-parser/binding-android-arm64': 0.126.0
+ '@oxc-parser/binding-darwin-arm64': 0.126.0
+ '@oxc-parser/binding-darwin-x64': 0.126.0
+ '@oxc-parser/binding-freebsd-x64': 0.126.0
+ '@oxc-parser/binding-linux-arm-gnueabihf': 0.126.0
+ '@oxc-parser/binding-linux-arm-musleabihf': 0.126.0
+ '@oxc-parser/binding-linux-arm64-gnu': 0.126.0
+ '@oxc-parser/binding-linux-arm64-musl': 0.126.0
+ '@oxc-parser/binding-linux-ppc64-gnu': 0.126.0
+ '@oxc-parser/binding-linux-riscv64-gnu': 0.126.0
+ '@oxc-parser/binding-linux-riscv64-musl': 0.126.0
+ '@oxc-parser/binding-linux-s390x-gnu': 0.126.0
+ '@oxc-parser/binding-linux-x64-gnu': 0.126.0
+ '@oxc-parser/binding-linux-x64-musl': 0.126.0
+ '@oxc-parser/binding-openharmony-arm64': 0.126.0
+ '@oxc-parser/binding-wasm32-wasi': 0.126.0
+ '@oxc-parser/binding-win32-arm64-msvc': 0.126.0
+ '@oxc-parser/binding-win32-ia32-msvc': 0.126.0
+ '@oxc-parser/binding-win32-x64-msvc': 0.126.0
+
+ oxlint-plugin-complexity@2.1.3(estree-walker@3.0.3)(oxc-parser@0.126.0):
+ dependencies:
+ '@oxlint/plugins': 1.71.0
+ optionalDependencies:
+ estree-walker: 3.0.3
+ oxc-parser: 0.126.0
+
+ oxlint-plugin-eslint@1.67.0: {}
+
+ oxlint-tsgolint@0.23.0:
+ optionalDependencies:
+ '@oxlint-tsgolint/darwin-arm64': 0.23.0
+ '@oxlint-tsgolint/darwin-x64': 0.23.0
+ '@oxlint-tsgolint/linux-arm64': 0.23.0
+ '@oxlint-tsgolint/linux-x64': 0.23.0
+ '@oxlint-tsgolint/win32-arm64': 0.23.0
+ '@oxlint-tsgolint/win32-x64': 0.23.0
+
+ oxlint@1.67.0(oxlint-tsgolint@0.23.0):
+ optionalDependencies:
+ '@oxlint/binding-android-arm-eabi': 1.67.0
+ '@oxlint/binding-android-arm64': 1.67.0
+ '@oxlint/binding-darwin-arm64': 1.67.0
+ '@oxlint/binding-darwin-x64': 1.67.0
+ '@oxlint/binding-freebsd-x64': 1.67.0
+ '@oxlint/binding-linux-arm-gnueabihf': 1.67.0
+ '@oxlint/binding-linux-arm-musleabihf': 1.67.0
+ '@oxlint/binding-linux-arm64-gnu': 1.67.0
+ '@oxlint/binding-linux-arm64-musl': 1.67.0
+ '@oxlint/binding-linux-ppc64-gnu': 1.67.0
+ '@oxlint/binding-linux-riscv64-gnu': 1.67.0
+ '@oxlint/binding-linux-riscv64-musl': 1.67.0
+ '@oxlint/binding-linux-s390x-gnu': 1.67.0
+ '@oxlint/binding-linux-x64-gnu': 1.67.0
+ '@oxlint/binding-linux-x64-musl': 1.67.0
+ '@oxlint/binding-openharmony-arm64': 1.67.0
+ '@oxlint/binding-win32-arm64-msvc': 1.67.0
+ '@oxlint/binding-win32-ia32-msvc': 1.67.0
+ '@oxlint/binding-win32-x64-msvc': 1.67.0
+ oxlint-tsgolint: 0.23.0
+
+ p-limit@3.1.0:
+ dependencies:
+ yocto-queue: 0.1.0
+
+ p-locate@5.0.0:
+ dependencies:
+ p-limit: 3.1.0
+
+ package-json-validator@1.5.2:
+ dependencies:
+ npm-package-arg: 13.0.2
+ semver: 7.8.5
+ validate-npm-package-license: 3.0.4
+ validate-npm-package-name: 7.0.2
+
+ package-manager-detector@1.6.0: {}
+
+ parent-module@1.0.1:
+ dependencies:
+ callsites: 3.1.0
+
+ parse-imports-exports@0.2.4:
+ dependencies:
+ parse-statements: 1.0.11
+
+ parse-statements@1.0.11: {}
+
+ path-exists@4.0.0: {}
+
+ path-key@3.1.1: {}
+
+ pathe@2.0.3: {}
+
+ picocolors@1.1.1: {}
+
+ picomatch@2.3.2: {}
+
+ picomatch@4.0.4: {}
+
+ possible-typed-array-names@1.1.0: {}
+
+ postcss-selector-parser@7.1.4:
+ dependencies:
+ cssesc: 3.0.0
+ util-deprecate: 1.0.2
+
+ postcss@8.5.15:
+ dependencies:
+ nanoid: 3.3.15
+ picocolors: 1.1.1
+ source-map-js: 1.2.1
+
+ prelude-ls@1.2.1: {}
+
+ proc-log@6.1.0: {}
+
+ punycode@2.3.1: {}
+
+ quansync@1.0.0: {}
+
+ queue-microtask@1.2.3: {}
+
+ reflect.getprototypeof@1.0.10:
+ dependencies:
+ call-bind: 1.0.9
+ define-properties: 1.2.1
+ es-abstract: 1.24.2
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.2
+ get-intrinsic: 1.3.0
+ get-proto: 1.0.1
+ which-builtin-type: 1.2.1
+
+ regexp.prototype.flags@1.5.4:
+ dependencies:
+ call-bind: 1.0.9
+ define-properties: 1.2.1
+ es-errors: 1.3.0
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ set-function-name: 2.0.2
+
+ reserved-identifiers@1.2.0: {}
+
+ resolve-from@4.0.0: {}
+
+ resolve-pkg-maps@1.0.0: {}
+
+ reusify@1.1.0: {}
+
+ rolldown-plugin-dts-minify-lite@0.5.2(rolldown@1.1.2):
+ dependencies:
+ dts-minify-lite: 0.5.6
+ rolldown: 1.1.2
+
+ rolldown-plugin-dts@0.26.0(rolldown@1.1.2)(typescript@6.0.3):
+ dependencies:
+ '@babel/generator': 8.0.0
+ '@babel/helper-validator-identifier': 8.0.2
+ '@babel/parser': 8.0.0
+ ast-kit: 3.0.0
+ birpc: 4.0.0
+ dts-resolver: 3.0.0
+ get-tsconfig: 5.0.0-beta.5
+ obug: 2.1.3
+ rolldown: 1.1.2
+ optionalDependencies:
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - oxc-resolver
+
+ rolldown@1.0.3:
+ dependencies:
+ '@oxc-project/types': 0.133.0
+ '@rolldown/pluginutils': 1.0.1
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.0.3
+ '@rolldown/binding-darwin-arm64': 1.0.3
+ '@rolldown/binding-darwin-x64': 1.0.3
+ '@rolldown/binding-freebsd-x64': 1.0.3
+ '@rolldown/binding-linux-arm-gnueabihf': 1.0.3
+ '@rolldown/binding-linux-arm64-gnu': 1.0.3
+ '@rolldown/binding-linux-arm64-musl': 1.0.3
+ '@rolldown/binding-linux-ppc64-gnu': 1.0.3
+ '@rolldown/binding-linux-s390x-gnu': 1.0.3
+ '@rolldown/binding-linux-x64-gnu': 1.0.3
+ '@rolldown/binding-linux-x64-musl': 1.0.3
+ '@rolldown/binding-openharmony-arm64': 1.0.3
+ '@rolldown/binding-wasm32-wasi': 1.0.3
+ '@rolldown/binding-win32-arm64-msvc': 1.0.3
+ '@rolldown/binding-win32-x64-msvc': 1.0.3
+
+ rolldown@1.1.2:
+ dependencies:
+ '@oxc-project/types': 0.137.0
+ '@rolldown/pluginutils': 1.0.1
+ optionalDependencies:
+ '@rolldown/binding-android-arm64': 1.1.2
+ '@rolldown/binding-darwin-arm64': 1.1.2
+ '@rolldown/binding-darwin-x64': 1.1.2
+ '@rolldown/binding-freebsd-x64': 1.1.2
+ '@rolldown/binding-linux-arm-gnueabihf': 1.1.2
+ '@rolldown/binding-linux-arm64-gnu': 1.1.2
+ '@rolldown/binding-linux-arm64-musl': 1.1.2
+ '@rolldown/binding-linux-ppc64-gnu': 1.1.2
+ '@rolldown/binding-linux-s390x-gnu': 1.1.2
+ '@rolldown/binding-linux-x64-gnu': 1.1.2
+ '@rolldown/binding-linux-x64-musl': 1.1.2
+ '@rolldown/binding-openharmony-arm64': 1.1.2
+ '@rolldown/binding-wasm32-wasi': 1.1.2
+ '@rolldown/binding-win32-arm64-msvc': 1.1.2
+ '@rolldown/binding-win32-x64-msvc': 1.1.2
+
+ run-parallel@1.2.0:
+ dependencies:
+ queue-microtask: 1.2.3
+
+ safe-array-concat@1.1.4:
+ dependencies:
+ call-bind: 1.0.9
+ call-bound: 1.0.4
+ get-intrinsic: 1.3.0
+ has-symbols: 1.1.0
+ isarray: 2.0.5
+
+ safe-push-apply@1.0.0:
+ dependencies:
+ es-errors: 1.3.0
+ isarray: 2.0.5
+
+ safe-regex-test@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-regex: 1.2.1
+
+ semver@7.8.5: {}
+
+ set-function-length@1.2.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ function-bind: 1.1.2
+ get-intrinsic: 1.3.0
+ gopd: 1.2.0
+ has-property-descriptors: 1.0.2
+
+ set-function-name@2.0.2:
+ dependencies:
+ define-data-property: 1.1.4
+ es-errors: 1.3.0
+ functions-have-names: 1.2.3
+ has-property-descriptors: 1.0.2
+
+ set-proto@1.0.0:
+ dependencies:
+ dunder-proto: 1.0.1
+ es-errors: 1.3.0
+ es-object-atoms: 1.1.2
+
+ shebang-command@2.0.0:
+ dependencies:
+ shebang-regex: 3.0.0
+
+ shebang-regex@3.0.0: {}
+
+ side-channel-list@1.0.1:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-map@1.0.1:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+
+ side-channel-weakmap@1.0.2:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ get-intrinsic: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-map: 1.0.1
+
+ side-channel@1.1.1:
+ dependencies:
+ es-errors: 1.3.0
+ object-inspect: 1.13.4
+ side-channel-list: 1.0.1
+ side-channel-map: 1.0.1
+ side-channel-weakmap: 1.0.2
+
+ siginfo@2.0.0: {}
+
+ simple-git-hooks@2.13.1: {}
+
+ sort-object-keys@2.1.0: {}
+
+ sort-package-json@3.7.1:
+ dependencies:
+ detect-indent: 7.0.2
+ detect-newline: 4.0.1
+ git-hooks-list: 4.2.1
+ is-plain-obj: 4.1.0
+ semver: 7.8.5
+ sort-object-keys: 2.1.0
+ tinyglobby: 0.2.17
+
+ source-map-js@1.2.1: {}
+
+ spdx-correct@3.2.0:
+ dependencies:
+ spdx-expression-parse: 3.0.1
+ spdx-license-ids: 3.0.23
+
+ spdx-exceptions@2.5.0: {}
+
+ spdx-expression-parse@3.0.1:
+ dependencies:
+ spdx-exceptions: 2.5.0
+ spdx-license-ids: 3.0.23
+
+ spdx-expression-parse@4.0.0:
+ dependencies:
+ spdx-exceptions: 2.5.0
+ spdx-license-ids: 3.0.23
+
+ spdx-license-ids@3.0.23: {}
+
+ stackback@0.0.2: {}
+
+ std-env@4.1.0: {}
+
+ stop-iteration-iterator@1.1.0:
+ dependencies:
+ es-errors: 1.3.0
+ internal-slot: 1.1.0
+
+ string.prototype.includes@2.0.1:
+ dependencies:
+ call-bind: 1.0.9
+ define-properties: 1.2.1
+ es-abstract: 1.24.2
+
+ string.prototype.trim@1.2.11:
+ dependencies:
+ call-bind: 1.0.9
+ call-bound: 1.0.4
+ define-data-property: 1.1.4
+ define-properties: 1.2.1
+ es-abstract: 1.24.2
+ es-object-atoms: 1.1.2
+ has-property-descriptors: 1.0.2
+ safe-regex-test: 1.1.0
+
+ string.prototype.trimend@1.0.10:
+ dependencies:
+ call-bind: 1.0.9
+ call-bound: 1.0.4
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.2
+
+ string.prototype.trimstart@1.0.8:
+ dependencies:
+ call-bind: 1.0.9
+ define-properties: 1.2.1
+ es-object-atoms: 1.1.2
+
+ strip-json-comments@3.1.1: {}
+
+ supports-color@7.2.0:
+ dependencies:
+ has-flag: 4.0.0
+
+ synckit@0.11.13:
+ dependencies:
+ '@pkgr/core': 0.3.6
+
+ tinybench@2.9.0: {}
+
+ tinyexec@1.2.4: {}
+
+ tinyglobby@0.2.17:
+ dependencies:
+ fdir: 6.5.0(picomatch@4.0.4)
+ picomatch: 4.0.4
+
+ tinyrainbow@3.1.0: {}
+
+ to-regex-range@5.0.1:
+ dependencies:
+ is-number: 7.0.0
+
+ to-valid-identifier@1.0.0:
+ dependencies:
+ '@sindresorhus/base62': 1.0.0
+ reserved-identifiers: 1.2.0
+
+ tree-kill@1.2.2: {}
+
+ tsdown-stale-guard@0.1.2(tsdown@0.22.3):
+ dependencies:
+ cac: 7.0.0
+ logs-sdk: 0.0.6
+ tsdown: 0.22.3(tsx@4.22.4)(typescript@6.0.3)
+ yaml: 2.9.0
+
+ tsdown@0.22.3(tsx@4.22.4)(typescript@6.0.3):
+ dependencies:
+ ansis: 4.3.1
+ cac: 7.0.0
+ defu: 6.1.7
+ empathic: 2.0.1
+ hookable: 6.1.1
+ import-without-cache: 0.4.0
+ obug: 2.1.3
+ picomatch: 4.0.4
+ rolldown: 1.1.2
+ rolldown-plugin-dts: 0.26.0(rolldown@1.1.2)(typescript@6.0.3)
+ semver: 7.8.5
+ tinyexec: 1.2.4
+ tinyglobby: 0.2.17
+ tree-kill: 1.2.2
+ unconfig-core: 7.5.0
+ optionalDependencies:
+ tsx: 4.22.4
+ typescript: 6.0.3
+ transitivePeerDependencies:
+ - '@ts-macro/tsc'
+ - '@typescript/native-preview'
+ - oxc-resolver
+ - vue-tsc
+
+ tslib@2.8.1:
+ optional: true
+
+ tsx@4.22.4:
+ dependencies:
+ esbuild: 0.28.1
+ optionalDependencies:
+ fsevents: 2.3.3
+
+ type-check@0.4.0:
+ dependencies:
+ prelude-ls: 1.2.1
+
+ typed-array-buffer@1.0.3:
+ dependencies:
+ call-bound: 1.0.4
+ es-errors: 1.3.0
+ is-typed-array: 1.1.15
+
+ typed-array-byte-length@1.0.3:
+ dependencies:
+ call-bind: 1.0.9
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
+
+ typed-array-byte-offset@1.0.4:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.9
+ for-each: 0.3.5
+ gopd: 1.2.0
+ has-proto: 1.2.0
+ is-typed-array: 1.1.15
+ reflect.getprototypeof: 1.0.10
+
+ typed-array-length@1.0.8:
+ dependencies:
+ call-bind: 1.0.9
+ for-each: 0.3.5
+ gopd: 1.2.0
+ is-typed-array: 1.1.15
+ possible-typed-array-names: 1.1.0
+ reflect.getprototypeof: 1.0.10
+
+ typescript@6.0.3: {}
+
+ unbox-primitive@1.1.0:
+ dependencies:
+ call-bound: 1.0.4
+ has-bigints: 1.1.0
+ has-symbols: 1.1.0
+ which-boxed-primitive: 1.1.1
+
+ unconfig-core@7.5.0:
+ dependencies:
+ '@quansync/fs': 1.0.0
+ quansync: 1.0.0
+
+ unconfig@7.5.0:
+ dependencies:
+ '@quansync/fs': 1.0.0
+ defu: 6.1.7
+ jiti: 2.7.0
+ quansync: 1.0.0
+ unconfig-core: 7.5.0
+
+ undici-types@7.24.6: {}
+
+ unplugin@3.0.0:
+ dependencies:
+ '@jridgewell/remapping': 2.3.5
+ picomatch: 4.0.4
+ webpack-virtual-modules: 0.6.2
+
+ uri-js@4.4.1:
+ dependencies:
+ punycode: 2.3.1
+
+ util-deprecate@1.0.2: {}
+
+ validate-npm-package-license@3.0.4:
+ dependencies:
+ spdx-correct: 3.2.0
+ spdx-expression-parse: 3.0.1
+
+ validate-npm-package-name@7.0.2: {}
+
+ vite@8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0):
+ dependencies:
+ lightningcss: 1.32.0
+ picomatch: 4.0.4
+ postcss: 8.5.15
+ rolldown: 1.0.3
+ tinyglobby: 0.2.17
+ optionalDependencies:
+ '@types/node': 25.9.3
+ esbuild: 0.28.1
+ fsevents: 2.3.3
+ jiti: 2.7.0
+ tsx: 4.22.4
+ yaml: 2.9.0
+
+ vitest@4.1.9(@types/node@25.9.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0):
+ dependencies:
+ '@vitest/expect': 4.1.9
+ '@vitest/mocker': 4.1.9(vite@8.0.16)
+ '@vitest/pretty-format': 4.1.9
+ '@vitest/runner': 4.1.9
+ '@vitest/snapshot': 4.1.9
+ '@vitest/spy': 4.1.9
+ '@vitest/utils': 4.1.9
+ es-module-lexer: 2.1.0
+ expect-type: 1.3.0
+ magic-string: 0.30.21
+ obug: 2.1.3
+ pathe: 2.0.3
+ picomatch: 4.0.4
+ std-env: 4.1.0
+ tinybench: 2.9.0
+ tinyexec: 1.2.4
+ tinyglobby: 0.2.17
+ tinyrainbow: 3.1.0
+ vite: 8.0.16(@types/node@25.9.3)(esbuild@0.28.1)(jiti@2.7.0)(tsx@4.22.4)(yaml@2.9.0)
+ why-is-node-running: 2.3.0
+ optionalDependencies:
+ '@types/node': 25.9.3
+ transitivePeerDependencies:
+ - '@vitejs/devtools'
+ - esbuild
+ - jiti
+ - less
+ - msw
+ - sass
+ - sass-embedded
+ - stylus
+ - sugarss
+ - terser
+ - tsx
+ - yaml
+
+ webpack-virtual-modules@0.6.2: {}
+
+ which-boxed-primitive@1.1.1:
+ dependencies:
+ is-bigint: 1.1.0
+ is-boolean-object: 1.2.2
+ is-number-object: 1.1.1
+ is-string: 1.1.1
+ is-symbol: 1.1.1
+
+ which-builtin-type@1.2.1:
+ dependencies:
+ call-bound: 1.0.4
+ function.prototype.name: 1.2.0
+ has-tostringtag: 1.0.2
+ is-async-function: 2.1.1
+ is-date-object: 1.1.0
+ is-finalizationregistry: 1.1.1
+ is-generator-function: 1.1.2
+ is-regex: 1.2.1
+ is-weakref: 1.1.1
+ isarray: 2.0.5
+ which-boxed-primitive: 1.1.1
+ which-collection: 1.0.2
+ which-typed-array: 1.1.22
+
+ which-collection@1.0.2:
+ dependencies:
+ is-map: 2.0.3
+ is-set: 2.0.3
+ is-weakmap: 2.0.2
+ is-weakset: 2.0.4
+
+ which-typed-array@1.1.22:
+ dependencies:
+ available-typed-arrays: 1.0.7
+ call-bind: 1.0.9
+ call-bound: 1.0.4
+ for-each: 0.3.5
+ get-proto: 1.0.1
+ gopd: 1.2.0
+ has-tostringtag: 1.0.2
+
+ which@2.0.2:
+ dependencies:
+ isexe: 2.0.0
+
+ why-is-node-running@2.3.0:
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+
+ word-wrap@1.2.5: {}
+
+ yaml-eslint-parser@2.0.0:
+ dependencies:
+ eslint-visitor-keys: 5.0.1
+ yaml: 2.9.0
+
+ yaml@2.9.0: {}
+
+ yocto-queue@0.1.0: {}
diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml
index 5927dc1..87be70c 100644
--- a/pnpm-workspace.yaml
+++ b/pnpm-workspace.yaml
@@ -1,27 +1,62 @@
packages:
- packages/*
-onlyBuiltDependencies:
- - esbuild
- - simple-git-hooks
- - unrs-resolver
+
catalog:
- "@eslint/js": 9.25.1
- "@types/node": 22.14.1
- "@vitest/coverage-v8": 3.1.2
- bumpp: 10.1.0
- eslint: 9.25.1
- eslint-plugin-jsonc: 2.20.0
- eslint-plugin-package-json: 0.29.1
- eslint-plugin-yml: 1.17.0
- globals: 16.0.0
- jiti: 2.4.2
- lightningcss: 1.29.3
- nano-staged: 0.8.0
- neostandard: 0.12.1
- simple-git-hooks: 2.12.1
- tsup: 8.4.0
- tsx: 4.19.3
- typescript: 5.8.3
- typescript-eslint: 8.26.0
- vite: 6.3.2
- vitest: 3.1.2
+ "@types/node": 25.9.3
+ typescript: 6.0.3
+
+catalogs:
+ dev:
+ tsx: 4.22.4
+ build:
+ "@felixicaza/tsdown-config": 0.1.3
+ tsdown: 0.22.3
+ lint:
+ "@felixicaza/eslint-config": 0.1.2
+ "@felixicaza/oxlint-config": 0.1.3
+ eslint: 9.39.4
+ jiti: 2.7.0
+ nano-staged: 1.0.2
+ oxlint: 1.67.0
+ oxlint-tsgolint: 0.23.0
+ simple-git-hooks: 2.13.1
+ typescript-eslint: 8.26.0
+ peer:
+ lightningcss: 1.32.0
+ testing:
+ vitest: 4.1.9
+ releasing:
+ bumpp: 11.1.0
+
+packageExtensions:
+ "oxlint-plugin-complexity@*":
+ dependencies:
+ "@oxlint/plugins": "*"
+
+minimumReleaseAgeExclude:
+ - "@felixicaza/eslint-config"
+ - "@felixicaza/oxlint-config"
+ - "@felixicaza/tsdown-config"
+
+trustPolicyExclude:
+ - "undici-types@6.21.0"
+ - "synckit@0.10.4"
+ - "chokidar@4.0.3"
+ - "eslint-import-resolver-typescript@3.10.1"
+ - "semver@6.3.1"
+
+allowBuilds:
+ esbuild: true
+ simple-git-hooks: true
+ unrs-resolver: true
+
+saveExact: true
+blockExoticSubdeps: true
+autoInstallPeers: false
+minimumReleaseAge: 2880
+trustPolicy: no-downgrade
+strictPeerDependencies: true
+strictDepBuilds: true
+dedupePeers: true
+shellEmulator: true
+color: always
diff --git a/tsconfig.json b/tsconfig.json
index ba7abf5..4f204ba 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -4,15 +4,14 @@
"lib": ["ESNext"],
"module": "ESNext",
"moduleResolution": "Bundler",
- "paths": {
- "pxtorem": ["./packages/pxtorem/src/index.ts"]
- },
"resolveJsonModule": true,
"strict": true,
"strictNullChecks": true,
"noEmit": true,
"esModuleInterop": true,
- "skipDefaultLibCheck": true,
- "skipLibCheck": true
+ "verbatimModuleSyntax": true,
+ "skipLibCheck": true,
+ "allowImportingTsExtensions": true,
+ "types": ["node"]
}
}
diff --git a/vitest.config.ts b/vitest.config.ts
index 7ca6701..302c594 100644
--- a/vitest.config.ts
+++ b/vitest.config.ts
@@ -2,11 +2,8 @@ import { defineConfig } from 'vitest/config'
export default defineConfig({
test: {
- coverage: {
- provider: 'v8',
- reporter: ['lcov'],
- include: ['**/src/**/*.ts'],
- exclude: ['**/node_modules/**', '**/test/**', '**/dist/**']
- }
+ projects: [
+ 'packages/pxtorem'
+ ]
}
})