diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index afeda7c4..c06e63a1 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -59,3 +59,73 @@ jobs: - name: Publish to npm run: | pnpm -r publish --tag ${{ github.event.inputs.npm_tag }} --publish-branch ${{ github.event.inputs.branch }} + + release_vscode_extension: + name: Release VS Code Extension (${{ matrix.vsce-target }}) + if: github.repository == 'web-infra-dev/rstest' && github.event_name == 'workflow_dispatch' + needs: release + runs-on: ${{ matrix.runner }} + environment: vscode-marketplace + strategy: + fail-fast: false + matrix: + include: + - runner: ubuntu-latest + vsce-target: linux-x64 + platform: linux + arch: x64 + - runner: ubuntu-22.04-arm64 + vsce-target: linux-arm64 + platform: linux + arch: arm64 + - runner: macos-13 + vsce-target: darwin-x64 + platform: darwin + arch: x64 + - runner: macos-14 + vsce-target: darwin-arm64 + platform: darwin + arch: arm64 + - runner: windows-2022 + vsce-target: win32-x64 + platform: win32 + arch: x64 + - runner: windows-latest + vsce-target: win32-arm64 + platform: win32 + arch: arm64 + defaults: + run: + shell: bash + env: + npm_config_arch: ${{ matrix.arch }} + npm_config_platform: ${{ matrix.platform }} + VSCE_TARGET: ${{ matrix.vsce-target }} + steps: + - name: Checkout + uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + with: + fetch-depth: 1 + ref: ${{ github.event.inputs.branch }} + + - name: Setup Pnpm + run: | + npm install -g corepack@latest --force + corepack enable + + - name: Setup Node.js + uses: actions/setup-node@49933ea5288caeca8642d1e84afbd3f7d6820020 # v4.4.0 + with: + node-version: 22 + cache: 'pnpm' + + - name: Install Dependencies + run: pnpm install + + - name: Package VS Code Extension + run: pnpm --filter ./packages/vscode run package:vsce -o "rstest-${{ matrix.vsce-target }}.vsix" + + - name: Publish VS Code Extension + env: + VSCE_PAT: ${{ secrets.VSCE_PAT }} + run: pnpm --filter ./packages/vscode exec vsce publish --target ${{ matrix.vsce-target }} diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 3b1d7959..39427340 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -113,3 +113,7 @@ jobs: - name: E2E Test if: steps.changes.outputs.changed == 'true' run: pnpm run e2e + + - name: VS Code Extension Test + if: steps.changes.outputs.changed == 'true' + run: pnpm run test:vscode diff --git a/.gitignore b/.gitignore index 248f1b35..1ebcf8af 100644 --- a/.gitignore +++ b/.gitignore @@ -23,6 +23,8 @@ test-temp-* .vscode/**/* !.vscode/settings.json !.vscode/extensions.json +!.vscode/launch.json +!.vscode/tasks.json .idea/ .nx/ .history/ @@ -34,5 +36,7 @@ test-results/ fixtures-test/ fixtures-test-*/ .rslib/ - !packages/core/src/coverage +tests-dist/ +.vscode-test/ +packages/vscode/*.vsix diff --git a/.nvmrc b/.nvmrc index 53d1c14d..92f279e3 100644 --- a/.nvmrc +++ b/.nvmrc @@ -1 +1 @@ -v22 +v22 \ No newline at end of file diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 00000000..7f365d0b --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,21 @@ +// A launch configuration that compiles the extension and then opens it inside a new window +// Use IntelliSense to learn about possible attributes. +// Hover to view descriptions of existing attributes. +// For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 +{ + "version": "0.2.0", + "configurations": [ + { + "name": "Run Extension", + "type": "extensionHost", + "request": "launch", + "runtimeExecutable": "${execPath}", + "args": [ + "--extensionDevelopmentPath=${workspaceFolder}/packages/vscode", + "${workspaceFolder}/packages/vscode/sample" + ], + "outFiles": ["${workspaceFolder}/packages/vscode/dist/**/*.js"], + "preLaunchTask": "npm: build:local" + } + ] +} diff --git a/.vscode/tasks.json b/.vscode/tasks.json new file mode 100644 index 00000000..d77a53a6 --- /dev/null +++ b/.vscode/tasks.json @@ -0,0 +1,21 @@ +// See https://go.microsoft.com/fwlink/?LinkId=733558 +// for the documentation about the tasks.json format +{ + "version": "2.0.0", + "tasks": [ + { + "type": "npm", + "script": "build:local", + "path": "packages/vscode", + "problemMatcher": "$tsc-watch", + "isBackground": true, + "presentation": { + "reveal": "never" + }, + "group": { + "kind": "build", + "isDefault": true + } + } + ] +} diff --git a/biome.json b/biome.json index b6aec6bb..8f91911e 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.2.0/schema.json", + "$schema": "https://biomejs.dev/schemas/2.2.2/schema.json", "assist": { "actions": { "source": { "organizeImports": "on" } } }, "vcs": { "enabled": true, @@ -9,7 +9,13 @@ }, "files": { "ignoreUnknown": true, - "includes": ["**", "!**/*.vue", "!**/dist", "!**/dist-types"] + "includes": [ + "**", + "!**/*.vue", + "!**/dist", + "!**/dist-types", + "!**/.vscode-test.mjs" + ] }, "formatter": { "indentStyle": "space" diff --git a/e2e/scripts/index.ts b/e2e/scripts/index.ts index 3fb4d752..3602e031 100644 --- a/e2e/scripts/index.ts +++ b/e2e/scripts/index.ts @@ -11,7 +11,6 @@ class Cli { public stdout = ''; public stderr = ''; private stdoutListeners: Array<() => void> = []; - // biome-ignore lint/correctness/noUnusedPrivateClassMembers: will use it private stderrListeners: Array<() => void> = []; constructor( diff --git a/e2e/test-coverage/fixtures/src/string.ts b/e2e/test-coverage/fixtures/src/string.ts index 0bdb8d0c..8a9fed9f 100644 --- a/e2e/test-coverage/fixtures/src/string.ts +++ b/e2e/test-coverage/fixtures/src/string.ts @@ -21,5 +21,5 @@ export const countWords = (str: string): number => { export const truncate = (str: string, maxLength: number): string => { if (str.length <= maxLength) return str; - return str.slice(0, maxLength - 3) + '...'; + return `${str.slice(0, maxLength - 3)}...`; }; diff --git a/package.json b/package.json index 314a6f56..c1e16d7b 100644 --- a/package.json +++ b/package.json @@ -4,6 +4,7 @@ "scripts": { "typecheck": "cross-env NX_DAEMON=false nx run-many -t typecheck --exclude @examples/* --parallel=10", "build": "cross-env NX_DAEMON=false nx run-many -t build --exclude @examples/* @rstest/tests-* --parallel=10", + "test:vscode": "pnpm --filter ./packages/vscode test", "e2e": "cd e2e && pnpm test", "test": "rstest", "change": "changeset", diff --git a/packages/core/LICENSE.md b/packages/core/LICENSE.md index 6ad531e1..729a22b7 100644 --- a/packages/core/LICENSE.md +++ b/packages/core/LICENSE.md @@ -390,30 +390,6 @@ Licensed under MIT license in the repository at https://github.com/jestjs/jest.g > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE > SOFTWARE. -### @jridgewell/trace-mapping - -Licensed under MIT license in the repository at git+https://github.com/jridgewell/sourcemaps.git. - -> Copyright 2024 Justin Ridgewell -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in -> all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -> SOFTWARE. - ### @sinonjs/commons Licensed under BSD-3-Clause license in the repository at git+https://github.com/sinonjs/commons.git. @@ -751,7 +727,7 @@ Licensed under MIT license. ### magic-string -Licensed under MIT license in the repository at https://github.com/rich-harris/magic-string.git. +Licensed under MIT license. > Copyright 2018 Rich Harris > @@ -1017,46 +993,6 @@ Licensed under MIT license in the repository at git+https://github.com/errwischt > OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE > SOFTWARE. -### std-env - -Licensed under MIT license. - -> MIT License -> -> Copyright (c) Pooya Parsa -> -> Permission is hereby granted, free of charge, to any person obtaining a copy -> of this software and associated documentation files (the "Software"), to deal -> in the Software without restriction, including without limitation the rights -> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -> copies of the Software, and to permit persons to whom the Software is -> furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all -> copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -> SOFTWARE. - -### strip-ansi - -Licensed under MIT license. - -> MIT License -> -> Copyright (c) Sindre Sorhus (https://sindresorhus.com) -> -> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: -> -> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. -> -> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. - ### supports-color Licensed under MIT license. diff --git a/packages/core/package.json b/packages/core/package.json index ade3a7e7..c109b80b 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -28,6 +28,9 @@ "types": "./dist-types/index.d.ts", "default": "./dist/index.js" }, + "./package.json": { + "default": "./package.json" + }, "./globals": { "types": "./globals.d.ts" }, diff --git a/packages/core/src/core/plugins/mockLoader.mjs b/packages/core/src/core/plugins/mockLoader.mjs new file mode 100644 index 00000000..e69de29b diff --git a/packages/core/src/index.ts b/packages/core/src/index.ts index b2dde587..62d8e734 100644 --- a/packages/core/src/index.ts +++ b/packages/core/src/index.ts @@ -7,7 +7,9 @@ import type { } from './types'; export { runCLI } from './cli'; -export { mergeRstestConfig } from './config'; +export { loadConfig, mergeRstestConfig } from './config'; +export { createRstest } from './core'; + export * from './runtime/api/public'; export type { diff --git a/packages/vscode/.vscode-test.mjs b/packages/vscode/.vscode-test.mjs new file mode 100644 index 00000000..7b1852fa --- /dev/null +++ b/packages/vscode/.vscode-test.mjs @@ -0,0 +1,5 @@ +import { defineConfig } from '@vscode/test-cli'; + +export default defineConfig({ + files: 'tests-dist/e2e/*.test.js', +}); diff --git a/packages/vscode/AGENTS.md b/packages/vscode/AGENTS.md new file mode 100644 index 00000000..df25a37f --- /dev/null +++ b/packages/vscode/AGENTS.md @@ -0,0 +1,49 @@ +# Repository guidelines + +Concise contributor guide for the Rstest VS Code extension package. + +## Project structure & module organization + +- `src/` — TypeScript sources. Key modules: `extension.ts` (entry/TestController), `testTree.ts` (builds TestItem tree), `parserTest.ts` (SWC-based parser), `master.ts` (spawns worker), `worker/` (runner + reporter). +- `tests/` — E2E tests under `tests/suite/**`. Compiled to `tests-dist/` for the Extension Host. +- `tests/unit/**` — Unit tests executed by `@rstest/core` with fixtures in `tests/unit/fixtures`. +- `dist/` — Built extension output. Do not edit. +- Config: `tsconfig.json`, `tsconfig.test.json`, `rslib.config.ts`, `rstest.config.ts`. + +## Build, test, and development commands + +- `npm run build` — Build with `rslib` (use `build:local` for sourcemaps). +- `npm run watch` — Rebuild on change. +- `npm run typecheck` — TypeScript `--noEmit` check. +- `npm run test:unit` — Run unit tests via `rstest`. +- `npm run test:e2e` — Compile tests and run VS Code Extension Host E2E (downloads VS Code on first run). +- `npm run lint` — Run Biome checks. + +## Coding style & naming conventions + +- Language: TypeScript, 2-space indentation. Keep changes minimal and focused. +- Naming: camelCase for files and symbols; PascalCase for classes; follow existing patterns (e.g., `testTree.ts`, `parserTest.ts`). +- Linting: Biome (`npm run lint`). Prefer simple, readable logic over cleverness. + +## Testing guidelines + +- Name tests `*.test.ts`. Place parser/unit tests in `tests/unit/**`; E2E tests in `tests/suite/**` (loaded by the E2E runner only). +- E2E opens `tests/fixtures` workspace automatically; use `toLabelTree()` from `tests/suite/index.test.ts` for stable tree assertions. +- Typical loop: `npm run typecheck` → `npm run test:unit` → `npm run test:e2e`. + +## Commit & pull request guidelines + +- Write clear, imperative commit messages; keep PRs small and scoped. Reference issues (e.g., `Fixes #123`). +- Include rationale, testing notes, and screenshots/logs if relevant (e.g., label trees, error output). +- Avoid unrelated refactors; update or add tests with behavior changes. + +## Architecture overview + +- Two-process design: VS Code extension (`extension.ts`) communicates with a worker (`worker/index.ts`) via WebSocket. Main sends `WorkerInitData`/`WorkerRunTestData`; worker emits `WorkerEventFinish`. + +## References + +- VS Code Testing Guide: https://code.visualstudio.com/api/extension-guides/testing +- VS Code Test API: https://code.visualstudio.com/api/references/vscode-api#tests +- VS Code `TestController` API: https://code.visualstudio.com/api/references/vscode-api#TestController +- VS Code `TestItem` API: https://code.visualstudio.com/api/references/vscode-api#TestItem diff --git a/packages/vscode/LICENSE.md b/packages/vscode/LICENSE.md new file mode 100644 index 00000000..63dcd96a --- /dev/null +++ b/packages/vscode/LICENSE.md @@ -0,0 +1,1021 @@ +MIT License + +Copyright (c) 2025-present Bytedance, Inc. and its affiliates. + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. + +## Code references + +This project references and adapts code from the following projects: + +### Vitest + +Licensed under MIT license in the repository at git+https://github.com/vitest-dev/vitest.git. + +> MIT License +> +> Copyright (c) 2021-Present VoidZero Inc. and Vitest contributors +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### Jest + +Licensed under MIT license in the repository at https://github.com/jestjs/jest.git. + +> MIT License +> +> Copyright (c) Meta Platforms, Inc. and affiliates. +> Copyright Contributors to the Jest project. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### Playwright + +Licensed under Apache license in the repository at https://github.com/microsoft/playwright.git. + +> Apache License +> Version 2.0, January 2004 +> http://www.apache.org/licenses/ +> +> TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION +> +> 1. Definitions. +> +> "License" shall mean the terms and conditions for use, reproduction, +> and distribution as defined by Sections 1 through 9 of this document. +> +> "Licensor" shall mean the copyright owner or entity authorized by +> the copyright owner that is granting the License. +> +> "Legal Entity" shall mean the union of the acting entity and all +> other entities that control, are controlled by, or are under common +> control with that entity. For the purposes of this definition, +> "control" means (i) the power, direct or indirect, to cause the +> direction or management of such entity, whether by contract or +> otherwise, or (ii) ownership of fifty percent (50%) or more of the +> outstanding shares, or (iii) beneficial ownership of such entity. +> +> "You" (or "Your") shall mean an individual or Legal Entity +> exercising permissions granted by this License. +> +> "Source" form shall mean the preferred form for making modifications, +> including but not limited to software source code, documentation +> source, and configuration files. +> +> "Object" form shall mean any form resulting from mechanical +> transformation or translation of a Source form, including but +> not limited to compiled object code, generated documentation, +> and conversions to other media types. +> +> "Work" shall mean the work of authorship, whether in Source or +> Object form, made available under the License, as indicated by a +> copyright notice that is included in or attached to the work +> (an example is provided in the Appendix below). +> +> "Derivative Works" shall mean any work, whether in Source or Object +> form, that is based on (or derived from) the Work and for which the +> editorial revisions, annotations, elaborations, or other modifications +> represent, as a whole, an original work of authorship. For the purposes +> of this License, Derivative Works shall not include works that remain +> separable from, or merely link (or bind by name) to the interfaces of, +> the Work and Derivative Works thereof. +> +> "Contribution" shall mean any work of authorship, including +> the original version of the Work and any modifications or additions +> to that Work or Derivative Works thereof, that is intentionally +> submitted to Licensor for inclusion in the Work by the copyright owner +> or by an individual or Legal Entity authorized to submit on behalf of +> the copyright owner. For the purposes of this definition, "submitted" +> means any form of electronic, verbal, or written communication sent +> to the Licensor or its representatives, including but not limited to +> communication on electronic mailing lists, source code control systems, +> and issue tracking systems that are managed by, or on behalf of, the +> Licensor for the purpose of discussing and improving the Work, but +> excluding communication that is conspicuously marked or otherwise +> designated in writing by the copyright owner as "Not a Contribution." +> +> "Contributor" shall mean Licensor and any individual or Legal Entity +> on behalf of whom a Contribution has been received by Licensor and +> subsequently incorporated within the Work. + +> 2. Grant of Copyright License. Subject to the terms and conditions of +> this License, each Contributor hereby grants to You a perpetual, +> worldwide, non-exclusive, no-charge, royalty-free, irrevocable +> copyright license to reproduce, prepare Derivative Works of, +> publicly display, publicly perform, sublicense, and distribute the +> Work and such Derivative Works in Source or Object form. +> 3. Grant of Patent License. Subject to the terms and conditions of +> this License, each Contributor hereby grants to You a perpetual, +> worldwide, non-exclusive, no-charge, royalty-free, irrevocable +> (except as stated in this section) patent license to make, have made, +> use, offer to sell, sell, import, and otherwise transfer the Work, +> where such license applies only to those patent claims licensable +> by such Contributor that are necessarily infringed by their +> Contribution(s) alone or by combination of their Contribution(s) +> with the Work to which such Contribution(s) was submitted. If You +> institute patent litigation against any entity (including a +> cross-claim or counterclaim in a lawsuit) alleging that the Work +> or a Contribution incorporated within the Work constitutes direct +> or contributory patent infringement, then any patent licenses +> granted to You under this License for that Work shall terminate +> as of the date such litigation is filed. +> 4. Redistribution. You may reproduce and distribute copies of the +> Work or Derivative Works thereof in any medium, with or without +> modifications, and in Source or Object form, provided that You +> meet the following conditions: +> +> (a) You must give any other recipients of the Work or +> Derivative Works a copy of this License; and +> +> (b) You must cause any modified files to carry prominent notices +> stating that You changed the files; and +> +> (c) You must retain, in the Source form of any Derivative Works +> that You distribute, all copyright, patent, trademark, and +> attribution notices from the Source form of the Work, +> excluding those notices that do not pertain to any part of +> the Derivative Works; and + +> (d) If the Work includes a "NOTICE" text file as part of its +> distribution, then any Derivative Works that You distribute must +> include a readable copy of the attribution notices contained +> within such NOTICE file, excluding those notices that do not +> pertain to any part of the Derivative Works, in at least one +> of the following places: within a NOTICE text file distributed +> as part of the Derivative Works; within the Source form or +> documentation, if provided along with the Derivative Works; or, +> within a display generated by the Derivative Works, if and +> wherever such third-party notices normally appear. The contents +> of the NOTICE file are for informational purposes only and +> do not modify the License. You may add Your own attribution +> notices within Derivative Works that You distribute, alongside +> or as an addendum to the NOTICE text from the Work, provided +> that such additional attribution notices cannot be construed +> as modifying the License. +> +> You may add Your own copyright statement to Your modifications and +> may provide additional or different license terms and conditions +> for use, reproduction, or distribution of Your modifications, or +> for any such Derivative Works as a whole, provided Your use, +> reproduction, and distribution of the Work otherwise complies with +> the conditions stated in this License. +> +> 5. Submission of Contributions. Unless You explicitly state otherwise, +> any Contribution intentionally submitted for inclusion in the Work +> by You to the Licensor shall be under the terms and conditions of +> this License, without any additional terms or conditions. +> Notwithstanding the above, nothing herein shall supersede or modify +> the terms of any separate license agreement you may have executed +> with Licensor regarding such Contributions. +> 6. Trademarks. This License does not grant permission to use the trade +> names, trademarks, service marks, or product names of the Licensor, +> except as required for reasonable and customary use in describing the +> origin of the Work and reproducing the content of the NOTICE file. +> 7. Disclaimer of Warranty. Unless required by applicable law or +> agreed to in writing, Licensor provides the Work (and each +> Contributor provides its Contributions) on an "AS IS" BASIS, +> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +> implied, including, without limitation, any warranties or conditions +> of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +> PARTICULAR PURPOSE. You are solely responsible for determining the +> appropriateness of using or redistributing the Work and assume any +> risks associated with Your exercise of permissions under this License. +> 8. Limitation of Liability. In no event and under no legal theory, +> whether in tort (including negligence), contract, or otherwise, +> unless required by applicable law (such as deliberate and grossly +> negligent acts) or agreed to in writing, shall any Contributor be +> liable to You for damages, including any direct, indirect, special, +> incidental, or consequential damages of any character arising as a +> result of this License or out of the use or inability to use the +> Work (including but not limited to damages for loss of goodwill, +> work stoppage, computer failure or malfunction, or any and all +> other commercial damages or losses), even if such Contributor +> has been advised of the possibility of such damages. +> 9. Accepting Warranty or Additional Liability. While redistributing +> the Work or Derivative Works thereof, You may choose to offer, +> and charge a fee for, acceptance of support, warranty, indemnity, +> or other liability obligations and/or rights consistent with this +> License. However, in accepting such obligations, You may act only +> on Your own behalf and on Your sole responsibility, not on behalf +> of any other Contributor, and only if You agree to indemnify, +> defend, and hold each Contributor harmless for any liability +> incurred by, or claims asserted against, such Contributor by reason +> of your accepting any such warranty or additional liability. +> +> END OF TERMS AND CONDITIONS +> +> APPENDIX: How to apply the Apache License to your work. +> +> To apply the Apache License to your work, attach the following +> boilerplate notice, with the fields enclosed by brackets "[]" +> replaced with your own identifying information. (Don't include +> the brackets!) The text should be enclosed in the appropriate +> comment syntax for the file format. We also recommend that a +> file or class name and description of purpose be included on the +> same "printed page" as the copyright notice for easier +> identification within third-party archives. +> +> Portions Copyright (c) Microsoft Corporation. +> Portions Copyright 2017 Google Inc. +> +> Licensed under the Apache License, Version 2.0 (the "License"); +> you may not use this file except in compliance with the License. +> You may obtain a copy of the License at +> +> http://www.apache.org/licenses/LICENSE-2.0 +> +> Unless required by applicable law or agreed to in writing, software +> distributed under the License is distributed on an "AS IS" BASIS, +> WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +> See the License for the specific language governing permissions and +> limitations under the License. + +## Third-party licenses + +The following third-party packages are bundled into @rstest/core. + +### @babel/code-frame + +Licensed under MIT license in the repository at https://github.com/babel/babel.git. + +> MIT License +> +> Copyright (c) 2014-present Sebastian McKenzie and other contributors +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> "Software"), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +### @babel/helper-validator-identifier + +Licensed under MIT license in the repository at https://github.com/babel/babel.git. + +> MIT License +> +> Copyright (c) 2014-present Sebastian McKenzie and other contributors +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> "Software"), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +### @jest/diff-sequences + +Licensed under MIT license in the repository at https://github.com/jestjs/jest.git. + +> MIT License +> +> Copyright (c) Meta Platforms, Inc. and affiliates. +> Copyright Contributors to the Jest project. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### @jest/get-type + +Licensed under MIT license in the repository at https://github.com/jestjs/jest.git. + +> MIT License +> +> Copyright (c) Meta Platforms, Inc. and affiliates. +> Copyright Contributors to the Jest project. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### @sinonjs/commons + +Licensed under BSD-3-Clause license in the repository at git+https://github.com/sinonjs/commons.git. + +> BSD 3-Clause License +> +> Copyright (c) 2018, Sinon.JS +> All rights reserved. +> +> Redistribution and use in source and binary forms, with or without +> modification, are permitted provided that the following conditions are met: +> +> - Redistributions of source code must retain the above copyright notice, this +> list of conditions and the following disclaimer. +> - Redistributions in binary form must reproduce the above copyright notice, +> this list of conditions and the following disclaimer in the documentation +> and/or other materials provided with the distribution. +> - Neither the name of the copyright holder nor the names of its +> contributors may be used to endorse or promote products derived from +> this software without specific prior written permission. +> +> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" +> AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE +> IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +### @sinonjs/fake-timers + +Licensed under BSD-3-Clause license in the repository at git+https://github.com/sinonjs/fake-timers.git. + +> Copyright (c) 2010-2014, Christian Johansen, christian@cjohansen.no. All rights reserved. +> +> Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: +> +> 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. +> 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. +> 3. Neither the name of the copyright holder nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. +> +> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +### @vitest/expect + +Licensed under MIT license in the repository at git+https://github.com/vitest-dev/vitest.git. + +> MIT License +> +> Copyright (c) 2021-Present Vitest Team +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### @vitest/pretty-format + +Licensed under MIT license in the repository at git+https://github.com/vitest-dev/vitest.git. + +> MIT License +> +> Copyright (c) 2021-Present Vitest Team +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### @vitest/snapshot + +Licensed under MIT license in the repository at git+https://github.com/vitest-dev/vitest.git. + +> MIT License +> +> Copyright (c) 2021-Present Vitest Team +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### ansi-styles + +Licensed under MIT license. + +> MIT License +> +> Copyright (c) Sindre Sorhus (sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +### buffer-from + +Licensed under MIT license. + +> MIT License +> +> Copyright (c) 2016, 2018 Linus Unnebäck +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### chalk + +Licensed under MIT license. + +> MIT License +> +> Copyright (c) Sindre Sorhus (sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +### chokidar + +Licensed under MIT license in the repository at git+https://github.com/paulmillr/chokidar.git. + +> The MIT License (MIT) +> +> Copyright (c) 2012 Paul Miller (https://paulmillr.com), Elan Shanker +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the “Software”), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +### color-convert + +Licensed under MIT license. + +> Copyright (c) 2011-2016 Heather Arthur +> +> Permission is hereby granted, free of charge, to any person obtaining +> a copy of this software and associated documentation files (the +> "Software"), to deal in the Software without restriction, including +> without limitation the rights to use, copy, modify, merge, publish, +> distribute, sublicense, and/or sell copies of the Software, and to +> permit persons to whom the Software is furnished to do so, subject to +> the following conditions: +> +> The above copyright notice and this permission notice shall be +> included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +> EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +> MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +> NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +> LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +> OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +> WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +### color-name + +Licensed under MIT license in the repository at git@github.com:colorjs/color-name.git. + +> The MIT License (MIT) +> Copyright (c) 2015 Dmitry Ivanov +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +### fdir + +Licensed under MIT license in the repository at git+https://github.com/thecodrr/fdir.git. + +> Copyright 2023 Abdullah Atta +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +### has-flag + +Licensed under MIT license. + +> MIT License +> +> Copyright (c) Sindre Sorhus (sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +### jest-diff + +Licensed under MIT license in the repository at https://github.com/jestjs/jest.git. + +> MIT License +> +> Copyright (c) Meta Platforms, Inc. and affiliates. +> Copyright Contributors to the Jest project. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### js-tokens + +Licensed under MIT license. + +> The MIT License (MIT) +> +> Copyright (c) 2014, 2015, 2016, 2017, 2018 Simon Lydell +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +### magic-string + +Licensed under MIT license. + +> Copyright 2018 Rich Harris +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +### picocolors + +Licensed under ISC license. + +> ISC License +> +> Copyright (c) 2021-2024 Oleksii Raspopov, Kostiantyn Denysov, Anton Verinov +> +> Permission to use, copy, modify, and/or distribute this software for any +> purpose with or without fee is hereby granted, provided that the above +> copyright notice and this permission notice appear in all copies. +> +> THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES +> WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF +> MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR +> ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES +> WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN +> ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF +> OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. + +### picomatch + +Licensed under MIT license. + +> The MIT License (MIT) +> +> Copyright (c) 2017-present, Jon Schlinkert. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. + +### pretty-format + +Licensed under MIT license in the repository at https://github.com/jestjs/jest.git. + +> MIT License +> +> Copyright (c) Meta Platforms, Inc. and affiliates. +> Copyright Contributors to the Jest project. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### react-is + +Licensed under MIT license in the repository at https://github.com/facebook/react.git. + +> MIT License +> +> Copyright (c) Facebook, Inc. and its affiliates. +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### source-map + +Licensed under BSD-3-Clause license in the repository at http://github.com/mozilla/source-map.git. + +> Copyright (c) 2009-2011, Mozilla Foundation and contributors +> All rights reserved. +> +> Redistribution and use in source and binary forms, with or without +> modification, are permitted provided that the following conditions are met: +> +> - Redistributions of source code must retain the above copyright notice, this +> list of conditions and the following disclaimer. +> - Redistributions in binary form must reproduce the above copyright notice, +> this list of conditions and the following disclaimer in the documentation +> and/or other materials provided with the distribution. +> - Neither the names of the Mozilla Foundation nor the names of project +> contributors may be used to endorse or promote products derived from this +> software without specific prior written permission. +> +> THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND +> ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED +> WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE +> DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE +> FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL +> DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR +> SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER +> CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, +> OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE +> OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + +### source-map-support + +Licensed under MIT license in the repository at https://github.com/evanw/node-source-map-support. + +> The MIT License (MIT) +> +> Copyright (c) 2014 Evan Wallace +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### stacktrace-parser + +Licensed under MIT license in the repository at git+https://github.com/errwischt/stacktrace-parser.git. + +> MIT License +> +> Copyright (c) 2014-2019 Georg Tavonius +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### supports-color + +Licensed under MIT license. + +> MIT License +> +> Copyright (c) Sindre Sorhus (sindresorhus.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + +### tinyglobby + +Licensed under MIT license in the repository at git+https://github.com/SuperchupuDev/tinyglobby.git. + +> MIT License +> +> Copyright (c) 2024 Madeline Gurriarán +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### tinyrainbow + +Licensed under MIT license in the repository at git+https://github.com/tinylibs/tinyrainbow.git. + +> MIT License +> +> Copyright (c) 2022 Tinylibs +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### tinyspy + +Licensed under MIT license in the repository at git+https://github.com/tinylibs/tinyspy.git. + +> MIT License +> +> Copyright (c) 2022 Tinylibs +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in all +> copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +> SOFTWARE. + +### type-detect + +Licensed under MIT license in the repository at git+ssh://git@github.com/chaijs/type-detect.git. + +> Copyright (c) 2013 Jake Luer (http://alogicalparadox.com) +> +> Permission is hereby granted, free of charge, to any person obtaining a copy +> of this software and associated documentation files (the "Software"), to deal +> in the Software without restriction, including without limitation the rights +> to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +> copies of the Software, and to permit persons to whom the Software is +> furnished to do so, subject to the following conditions: +> +> The above copyright notice and this permission notice shall be included in +> all copies or substantial portions of the Software. +> +> THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +> IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +> FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +> AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +> LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +> OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN +> THE SOFTWARE. diff --git a/packages/vscode/README.md b/packages/vscode/README.md new file mode 100644 index 00000000..430adc10 --- /dev/null +++ b/packages/vscode/README.md @@ -0,0 +1,46 @@ +# Rstest VS Code extension + +Rstest is a VS Code extension that discovers, displays, and runs tests in your workspace. It builds a rich Test Explorer tree from your test files and keeps it up to date as files change. + +## Features + +- Discovers test files via configurable glob patterns +- Parses test structure to build a nested tree (describe/suite/test) +- Runs individual tests, suites, or entire files +- Watches the filesystem and updates the tree on create/change/delete + +## Activation + +The extension activates automatically when your workspace contains Rstest configuration files (e.g., `rstest.config.*`, `rstest.workspace.*`, `rstest.projects.*`). On activation, it eagerly scans the workspace and populates the Test Explorer. + +## Configuration + +| Setting | Type | Scope | Default | Description | +| ---------------------------- | -------- | -------- | -------------------------------- | ------------------------------------------------------------- | +| `rstest.testFileGlobPattern` | string[] | Resource | `["**/*.test.*", "**/*.spec.*"]` | Glob pattern(s) used to discover test files in the workspace. | + +## How it works + +- On activation, the extension scans for test files using `rstest.testFileGlobPattern` and creates a Test Explorer tree. +- File system watchers keep the tree synchronized as files are created, modified, or deleted. +- Test content is parsed to identify nested suites and tests so you can run them granularly. + +## Development + +Common commands (run from this package): + +- `npm run build` — Build with rslib +- `npm run watch` — Rebuild on change +- `npm run typecheck` — TypeScript noEmit check +- `npm run test:unit` — Unit tests via Rstest +- `npm run test:e2e` — VS Code Extension Host E2E tests + +### Packaging & publishing + +- Local package (current platform): `npm run package:vsix` +- Publish (current platform): `npm run publish:vsce` (requires `VSCE_PAT`) + +CI + +- On tag push or manual dispatch, GitHub Actions runs on Linux and publishes for all platforms using `vsce publish --target` (win32/darwin/linux; x64 and arm64). +- Configure the `VSCE_PAT` repository secret for Marketplace publishing. diff --git a/packages/vscode/package.json b/packages/vscode/package.json new file mode 100644 index 00000000..6c04ddf4 --- /dev/null +++ b/packages/vscode/package.json @@ -0,0 +1,80 @@ +{ + "name": "rstest", + "displayName": "Rstest", + "publisher": "rstack", + "description": "VS Code extension for Rstest", + "version": "0.0.1", + "private": true, + "license": "MIT", + "repository": "https://github.com/Microsoft/vscode-extension-samples", + "engines": { + "vscode": "^1.100.0" + }, + "categories": [ + "Testing" + ], + "activationEvents": [ + "workspaceContains:**/*rstest*.config*.{ts,js,mjs,cjs,cts,mts}", + "workspaceContains:**/*rstest.{workspace,projects}*.{ts,js,mjs,cjs,cts,mts,json}" + ], + "main": "./dist/extension.js", + "contributes": { + "configuration": { + "title": "Rstest", + "properties": { + "rstest.testFileGlobPattern": { + "markdownDescription": "Glob patterns used to discover test files. Must be an array of strings.", + "scope": "resource", + "type": "array", + "items": { + "type": "string" + }, + "default": [ + "**/*.test.*", + "**/*.spec.*" + ] + }, + "rstest.logLevel": { + "markdownDescription": "Controls how much diagnostic output the Rstest extension emits to the Output view.", + "scope": "window", + "type": "string", + "enum": [ + "default", + "debug" + ], + "default": "default" + } + } + } + }, + "scripts": { + "build": "rslib build", + "lint": "biome check . --diagnostic-level=warn", + "build:local": "SOURCEMAP=true rslib build", + "test:e2e": "cross-env FORCE_COLOR=1 tsc -p tsconfig.test.json && cross-env FORCE_COLOR=1 node ./tests-dist/runTest.js", + "test:unit": "rstest", + "test": "npm run test:unit && npm run test:e2e", + "typecheck": "tsc --noEmit", + "watch": "rslib build --watch", + "package:vsce": "npm run build && vsce package" + }, + "devDependencies": { + "@rsbuild/core": "1.5.0", + "@rslib/core": "0.12.2", + "@rstest/core": "workspace:*", + "@swc/core": "^1.13.5", + "@types/glob": "^7.1.1", + "@types/mocha": "^10.0.10", + "@types/node": "^22.13.8", + "@types/vscode": "^1.100.0", + "@types/ws": "^8.18.1", + "@vscode/test-cli": "^0.0.11", + "@vscode/test-electron": "^2.5.2", + "@vscode/vsce": "3.6.0", + "get-port": "^7.1.0", + "glob": "^7.1.4", + "mocha": "^11.7.2", + "typescript": "^5.9.2", + "ws": "^8.18.3" + } +} diff --git a/packages/vscode/rslib.config.ts b/packages/vscode/rslib.config.ts new file mode 100644 index 00000000..eaeafb14 --- /dev/null +++ b/packages/vscode/rslib.config.ts @@ -0,0 +1,53 @@ +import { defineConfig } from '@rslib/core'; + +export default defineConfig({ + lib: [ + { + syntax: ['node 20'], + // bundle: false, + source: { + entry: { + extension: './src/extension.ts', + }, + }, + format: 'cjs', + output: { + externals: { + vscode: 'commonjs vscode', + '@swc/wasm': 'commonjs @swc/wasm', + }, + sourceMap: process.env.SOURCEMAP === 'true', + }, + tools: { + rspack: { + output: { + devtoolModuleFilenameTemplate: '[absolute-resource-path]', + }, + }, + }, + }, + { + syntax: ['node 20'], + // bundle: false, + format: 'cjs', + source: { + entry: { + worker: './src/worker/index.ts', + }, + }, + output: { + externals: { + vscode: 'commonjs vscode', + }, + sourceMap: process.env.SOURCEMAP === 'true', + }, + tools: { + rspack: { + output: { + devtoolModuleFilenameTemplate: '[absolute-resource-path]', + }, + }, + }, + }, + ], +}); diff --git a/packages/vscode/rstest.config.ts b/packages/vscode/rstest.config.ts new file mode 100644 index 00000000..0e959bd3 --- /dev/null +++ b/packages/vscode/rstest.config.ts @@ -0,0 +1,13 @@ +import { defineConfig } from '@rstest/core'; + +export default defineConfig({ + include: ['tests/unit/**/*.test.ts'], + exclude: ['**/tests/fixtures/**', '**/tests/suite/**'], + setupFiles: ['../../scripts/rstest.setup.ts'], + globals: true, + output: { + externals: { + vscode: 'commonjs vscode', + }, + }, +}); diff --git a/packages/vscode/sample/rsbuild.config.ts b/packages/vscode/sample/rsbuild.config.ts new file mode 100644 index 00000000..c9962d33 --- /dev/null +++ b/packages/vscode/sample/rsbuild.config.ts @@ -0,0 +1,6 @@ +import { defineConfig } from '@rsbuild/core'; +import { pluginReact } from '@rsbuild/plugin-react'; + +export default defineConfig({ + plugins: [pluginReact()], +}); diff --git a/packages/vscode/sample/rstest.config.ts b/packages/vscode/sample/rstest.config.ts new file mode 100644 index 00000000..9ee3cbab --- /dev/null +++ b/packages/vscode/sample/rstest.config.ts @@ -0,0 +1,3 @@ +import { defineConfig } from '@rstest/core'; + +export default defineConfig({}); diff --git a/packages/vscode/sample/src/foo.ts b/packages/vscode/sample/src/foo.ts new file mode 100644 index 00000000..e226334a --- /dev/null +++ b/packages/vscode/sample/src/foo.ts @@ -0,0 +1,2 @@ +export const sayFoo = () => 'foo'; +export const sayFoo1 = () => 'foo1'; diff --git a/packages/vscode/sample/src/index.ts b/packages/vscode/sample/src/index.ts new file mode 100644 index 00000000..eae921c8 --- /dev/null +++ b/packages/vscode/sample/src/index.ts @@ -0,0 +1 @@ +export const sayHi = () => 'hi'; diff --git a/packages/vscode/sample/test/foo.test.ts b/packages/vscode/sample/test/foo.test.ts new file mode 100644 index 00000000..991dbc38 --- /dev/null +++ b/packages/vscode/sample/test/foo.test.ts @@ -0,0 +1,14 @@ +import { describe, expect, it } from '@rstest/core'; +import { sayFoo, sayFoo1 } from '../src/foo'; + +describe('Foo', () => { + describe('inner Foo', () => { + it('should return "foo"', () => { + expect(sayFoo()).toBe('foo'); + }); + + it('should return "foo1"', () => { + expect(sayFoo1()).toBe('foo11'); + }); + }); +}); diff --git a/packages/vscode/sample/test/index.test.ts b/packages/vscode/sample/test/index.test.ts new file mode 100644 index 00000000..28f8a8ee --- /dev/null +++ b/packages/vscode/sample/test/index.test.ts @@ -0,0 +1,12 @@ +import { describe, expect, it } from '@rstest/core'; +import { sayHi } from '../src/index'; + +describe('Index', () => { + it('should add two numbers correctly', () => { + expect(1 + 1).toBe(2); + }); + + it('should test source code correctly', () => { + expect(sayHi()).toBe('hi'); + }); +}); diff --git a/packages/vscode/sample/tsconfig.json b/packages/vscode/sample/tsconfig.json new file mode 100644 index 00000000..e6b9bdf4 --- /dev/null +++ b/packages/vscode/sample/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["DOM", "ES2020"], + "module": "ESNext", + "jsx": "react-jsx", + "strict": true, + "skipLibCheck": true, + "isolatedModules": true, + "resolveJsonModule": true, + "moduleResolution": "bundler", + "useDefineForClassFields": true + }, + "include": ["src"] +} diff --git a/packages/vscode/src/config.ts b/packages/vscode/src/config.ts new file mode 100644 index 00000000..3eb0f38a --- /dev/null +++ b/packages/vscode/src/config.ts @@ -0,0 +1,64 @@ +import vscode from 'vscode'; + +export type LogLevel = 'default' | 'debug'; + +// Centralized configuration types for the extension. +// Add new keys here to extend configuration in a type-safe way. +export type ExtensionConfig = { + // Glob patterns that determine which files are considered tests. + // Must be an array of strings. + testFileGlobPattern: string[]; + // Controls verbosity of extension logging routed to the Output channel. + logLevel: LogLevel; +}; + +export const defaultConfig: ExtensionConfig = { + testFileGlobPattern: ['**/*.test.*', '**/*.spec.*'], + logLevel: 'default', +}; + +// Type-safe getter for a single config value with priority: +// workspaceFolder > workspace > user (global) > default. +export function getConfigValue( + key: K, + folder?: vscode.WorkspaceFolder, +): ExtensionConfig[K] { + const section = vscode.workspace.getConfiguration('rstest', folder); + const inspected = section.inspect(key); + + // Priority order (highest first): folder, workspace, user, default + const value = + inspected?.workspaceFolderValue ?? + inspected?.workspaceValue ?? + inspected?.globalValue ?? + inspected?.defaultValue ?? + defaultConfig[key]; + + if (key === 'testFileGlobPattern') { + const v = value as unknown; + return (isStringArray(v) ? v : defaultConfig[key]) as ExtensionConfig[K]; + } + + if (key === 'logLevel') { + const v = value as unknown; + return (isLogLevel(v) ? v : defaultConfig[key]) as ExtensionConfig[K]; + } + + return value as ExtensionConfig[K]; +} + +function isStringArray(v: unknown): v is string[] { + return Array.isArray(v) && v.every((x) => typeof x === 'string'); +} + +function isLogLevel(v: unknown): v is LogLevel { + return v === 'default' || v === 'debug'; +} + +// Convenience to get a full, normalized config object at the given scope. +export function getConfig(folder?: vscode.WorkspaceFolder): ExtensionConfig { + return { + testFileGlobPattern: getConfigValue('testFileGlobPattern', folder), + logLevel: getConfigValue('logLevel', folder), + } satisfies ExtensionConfig; +} diff --git a/packages/vscode/src/extension.ts b/packages/vscode/src/extension.ts new file mode 100644 index 00000000..8af6ccc6 --- /dev/null +++ b/packages/vscode/src/extension.ts @@ -0,0 +1,339 @@ +import vscode from 'vscode'; +import { logger } from './logger'; +import { RstestApi } from './master'; +import { + gatherTestItems, + getContentFromFilesystem, + scanAllTestFiles, + TestCase, + TestFile, + testData, +} from './testTree'; +import { getWorkspaceTestPatterns, shouldIgnorePath } from './utils'; + +export async function activate(context: vscode.ExtensionContext) { + const rstest = new Rstest(context); + return rstest; +} + +class Rstest { + private context: vscode.ExtensionContext; + private ctrl: vscode.TestController; + private fileChangedEmitter: vscode.EventEmitter; + private watchingTests: Map< + vscode.TestItem | 'ALL', + vscode.TestRunProfile | undefined + >; + private api: RstestApi; + + // Add getter to access the test controller for testing + get testController() { + return this.ctrl; + } + + constructor(context: vscode.ExtensionContext) { + this.context = context; + this.ctrl = vscode.tests.createTestController('rstest', 'Rstest'); + context.subscriptions.push(this.ctrl, logger); + + this.fileChangedEmitter = new vscode.EventEmitter(); + this.watchingTests = new Map< + vscode.TestItem | 'ALL', + vscode.TestRunProfile | undefined + >(); + + this.setupEventHandlers(context); + this.setupTestController(); + this.api = new RstestApi(); + this.api.createChildProcess(); + + scanAllTestFiles(this.ctrl); + } + + private setupEventHandlers(context: vscode.ExtensionContext) { + this.fileChangedEmitter.event((uri) => { + if (this.watchingTests.has('ALL')) { + this.startTestRun( + new vscode.TestRunRequest( + undefined, + undefined, + this.watchingTests.get('ALL'), + true, + ), + ); + return; + } + + const include: vscode.TestItem[] = []; + let profile: vscode.TestRunProfile | undefined; + for (const [item, thisProfile] of this.watchingTests) { + const cast = item as vscode.TestItem; + if (cast.uri?.toString() === uri.toString()) { + include.push(cast); + profile = thisProfile; + } + } + + if (include.length) { + this.startTestRun( + new vscode.TestRunRequest(include, undefined, profile, true), + ); + } + }); + + for (const document of vscode.workspace.textDocuments) { + this.updateNodeForDocument(document); + } + + context.subscriptions.push( + vscode.workspace.onDidOpenTextDocument((document) => + this.updateNodeForDocument(document), + ), + vscode.workspace.onDidChangeTextDocument((e) => + this.updateNodeForDocument(e.document), + ), + vscode.workspace.onDidDeleteFiles((e) => { + for (const uri of e.files) { + this.ctrl.items.delete(uri.toString()); + } + }), + ); + } + + private setupTestController() { + const runHandler = ( + request: vscode.TestRunRequest, + _cancellation: vscode.CancellationToken, + ) => { + if (request.continuous) { + vscode.window.showInformationMessage( + 'Continuous run is not implemented yet.', + ); + return; // Early return; do nothing for continuous run + } + + return this.startTestRun(request); + }; + + this.ctrl.refreshHandler = async () => { + await Promise.all( + getWorkspaceTestPatterns().map(({ pattern }) => { + return findInitialFiles(this.ctrl, pattern); + }), + ); + }; + + const _runProfile = this.ctrl.createRunProfile( + 'Run Tests', + vscode.TestRunProfileKind.Run, + runHandler, + true, + undefined, + true, + ); + + const coverageProfile = this.ctrl.createRunProfile( + 'Run with Coverage', + vscode.TestRunProfileKind.Coverage, + runHandler, + true, + undefined, + true, + ); + + coverageProfile.loadDetailedCoverage = async (_testRun, coverage) => { + if (coverage instanceof RstestFileCoverage) { + return coverage.coveredLines.filter( + (l): l is vscode.StatementCoverage => !!l, + ); + } + + return []; + }; + + this.ctrl.resolveHandler = async (item) => { + if (!item) { + // this.initialize(this.context); + this.context.subscriptions.push( + ...startWatchingWorkspace(this.ctrl, this.fileChangedEmitter), + ); + // Ensure all test files are discovered and parsed at startup + // await scanAllTestFiles(this.ctrl); + return; + } + + const data = testData.get(item); + if (data instanceof TestFile) { + await data.updateFromDisk(this.ctrl, item); + } + }; + } + + private startTestRun = (request: vscode.TestRunRequest) => { + // const queue: { test: vscode.TestItem; data: TestCase }[] = []; + const run = this.ctrl.createTestRun(request); + // map of file uris to statements on each line: + const coveredLines = new Map< + /* file uri */ string, + (vscode.StatementCoverage | undefined)[] + >(); + + const discoverTests = async (tests: Iterable) => { + for (const test of tests) { + if (request.exclude?.includes(test)) { + continue; + } + + const data = testData.get(test); + if (data instanceof TestCase) { + run.enqueued(test); + run.started(test); + await data.run(test, run, this.api); + run.appendOutput(`Completed ${test.id}\r\n`); + } else if (data instanceof TestFile) { + if (!data.didResolve) { + await data.updateFromDisk(this.ctrl, test); + } + + // Run all tests for this file at once + run.enqueued(test); + run.started(test); + await data.run(test, run, this.api, this.ctrl); + } else { + // Process child tests + await discoverTests(gatherTestItems(test.children)); + } + + if ( + test.uri && + !coveredLines.has(test.uri.toString()) && + request.profile?.kind === vscode.TestRunProfileKind.Coverage + ) { + try { + const lines = (await getContentFromFilesystem(test.uri)).split( + '\n', + ); + coveredLines.set( + test.uri.toString(), + lines.map((lineText, lineNo) => + lineText.trim().length + ? new vscode.StatementCoverage( + 0, + new vscode.Position(lineNo, 0), + ) + : undefined, + ), + ); + } catch { + // ignored + } + } + } + }; + + discoverTests(request.include ?? gatherTestItems(this.ctrl.items)) + .then(() => run.end()) + .catch((error) => { + logger.error('Error running tests:', error); + run.end(); + }); + }; + + private updateNodeForDocument(e: vscode.TextDocument) { + if (e.uri.scheme !== 'file') { + return; + } + + if (isTestFilePath(e.uri)) { + const { file, data } = getOrCreateFile(this.ctrl, e.uri); + data.updateFromContents(this.ctrl, e.getText(), file); + } + + return; + } +} + +function getOrCreateFile(controller: vscode.TestController, uri: vscode.Uri) { + const existing = controller.items.get(uri.toString()); + if (existing) { + return { file: existing, data: testData.get(existing) as TestFile }; + } + + const file = controller.createTestItem( + uri.toString(), + uri.path.split('/').pop()!, + uri, + ); + controller.items.add(file); + + const data = new TestFile(); + testData.set(file, data); + + file.canResolveChildren = true; + return { file, data }; +} + +// gatherTestItems is provided by testTree.ts + +async function findInitialFiles( + controller: vscode.TestController, + pattern: vscode.GlobPattern, +) { + for (const file of await vscode.workspace.findFiles(pattern)) { + const path = file.fsPath.toString(); + const shouldIgnore = shouldIgnorePath(path); + if (!shouldIgnore) { + getOrCreateFile(controller, file); + } + } +} + +function startWatchingWorkspace( + controller: vscode.TestController, + fileChangedEmitter: vscode.EventEmitter, +) { + return getWorkspaceTestPatterns().map(({ pattern }) => { + const watcher = vscode.workspace.createFileSystemWatcher(pattern); + + watcher.onDidCreate((uri) => { + getOrCreateFile(controller, uri); + fileChangedEmitter.fire(uri); + }); + + watcher.onDidChange(async (uri) => { + const { file, data } = getOrCreateFile(controller, uri); + if (data.didResolve) { + await data.updateFromDisk(controller, file); + } + fileChangedEmitter.fire(uri); + }); + + watcher.onDidDelete((uri) => { + controller.items.delete(uri.toString()); + }); + + findInitialFiles(controller, pattern); + + return watcher; + }); +} + +function isTestFilePath(uri: vscode.Uri): boolean { + const filename = uri.path.split('/').pop() || uri.path; + return filename.includes('.test.') || filename.includes('.spec.'); +} + +class RstestFileCoverage extends vscode.FileCoverage { + constructor( + uri: string, + public readonly coveredLines: (vscode.StatementCoverage | undefined)[], + ) { + super(vscode.Uri.parse(uri), new vscode.TestCoverageCount(0, 0)); + for (const line of coveredLines) { + if (line) { + this.statementCoverage.covered += line.executed ? 1 : 0; + this.statementCoverage.total++; + } + } + } +} diff --git a/packages/vscode/src/logger.ts b/packages/vscode/src/logger.ts new file mode 100644 index 00000000..bcc65c29 --- /dev/null +++ b/packages/vscode/src/logger.ts @@ -0,0 +1,70 @@ +import { inspect } from 'node:util'; +import vscode from 'vscode'; +import { getConfigValue, type LogLevel } from './config'; + +function formatValues(values: unknown[]): string { + return values + .map((value) => + typeof value === 'string' + ? value + : inspect(value, { depth: 4, colors: false }), + ) + .join(' '); +} + +export class Logger implements vscode.Disposable { + private readonly channel: vscode.OutputChannel; + private readonly disposables: vscode.Disposable[] = []; + private level: LogLevel; + + constructor(private readonly name = 'Rstest') { + this.channel = vscode.window.createOutputChannel(this.name); + this.level = this.readLevel(); + this.disposables.push( + vscode.workspace.onDidChangeConfiguration((event) => { + if (event.affectsConfiguration('rstest.logLevel')) { + this.level = this.readLevel(); + } + }), + ); + } + + public debug(...values: unknown[]) { + if (this.level !== 'debug') { + return; + } + + this.write('DEBUG', values); + } + + public info(...values: unknown[]) { + this.write('INFO', values); + } + + public warn(...values: unknown[]) { + this.write('WARN', values); + } + + public error(...values: unknown[]) { + this.write('ERROR', values); + } + + public dispose() { + this.disposables.forEach((disposable) => { + disposable.dispose(); + }); + this.channel.dispose(); + } + + private readLevel(): LogLevel { + return getConfigValue('logLevel'); + } + + private write(tag: string, values: unknown[]) { + const timestamp = new Date().toISOString(); + const message = formatValues(values); + this.channel.appendLine(`[${timestamp}] [${tag}] ${message}`); + } +} + +export const logger = new Logger(); diff --git a/packages/vscode/src/master.ts b/packages/vscode/src/master.ts new file mode 100644 index 00000000..ecba57fc --- /dev/null +++ b/packages/vscode/src/master.ts @@ -0,0 +1,209 @@ +import { spawn } from 'node:child_process'; +import { createServer } from 'node:http'; +import path from 'node:path'; +import getPort from 'get-port'; +import vscode from 'vscode'; +import type { WebSocket } from 'ws'; +import { WebSocketServer } from 'ws'; +import { logger } from './logger'; +import type { + WorkerEvent, + WorkerEventFinish, + WorkerRunTestData, +} from './types'; + +export class RstestApi { + public ws: WebSocket | null = null; + private testPromises: Map< + string, + { resolve: (value: any) => void; reject: (reason?: any) => void } + > = new Map(); + private versionMismatchWarned = false; + + public resolveRstestPath(): { cwd: string; rstestPath: string }[] { + // TODO: support pnp + try { + // TODO: use 0 temporarily. + const workspace = vscode.workspace.workspaceFolders?.[0]; + if (!workspace) { + vscode.window.showErrorMessage('No workspace found'); + throw new Error('No workspace found'); + } + + const nodeExport = require.resolve('@rstest/core', { + paths: [workspace.uri.fsPath], + }); + + const corePackageJsonPath = require.resolve('@rstest/core/package.json', { + paths: [workspace.uri.fsPath], + }); + const corePackageJson = require(corePackageJsonPath) as { + version?: string; + }; + const extension = vscode.extensions.getExtension('rstack.rstest'); + const extensionVersion = extension?.packageJSON?.version as + | string + | undefined; + const coreVersion = corePackageJson.version; + + if ( + coreVersion && + extensionVersion && + coreVersion !== extensionVersion && + !this.versionMismatchWarned + ) { + this.versionMismatchWarned = true; + vscode.window.showWarningMessage( + `Rstest extension v${extensionVersion} does not match local @rstest/core v${coreVersion}. We're still stabilizing, so please upgrade Rstest or install an extension version that matches @rstest/core. We'll relax this requirement once things are stable.`, + ); + } + + return [ + { + cwd: workspace.uri.fsPath, + rstestPath: nodeExport, + }, + ]; + } catch (e) { + vscode.window.showErrorMessage((e as any).toString()); + throw e; + } + } + + public async runTest(item: vscode.TestItem) { + if (this.ws) { + const data: WorkerRunTestData = { + type: 'runTest', + id: item.id, + fileFilters: [item.uri!.fsPath], + testNamePattern: item.label, + }; + + // Create a promise that will be resolved when we get a response with the matching ID + const promise = new Promise((resolve, reject) => { + this.testPromises.set(item.id, { resolve, reject }); + + // Set a timeout to prevent hanging indefinitely + setTimeout(() => { + const promiseObj = this.testPromises.get(item.id); + if (promiseObj) { + this.testPromises.delete(item.id); + reject(new Error(`Test execution timed out for ${item.label}`)); + } + }, 10000); // 10 seconds timeout + }); + + this.ws.send(JSON.stringify(data)); + return promise; + } + } + + public async runFileTests(fileItem: vscode.TestItem) { + if (this.ws) { + const fileId = `file_${fileItem.id}`; + const data: WorkerRunTestData = { + type: 'runTest', + id: fileId, + fileFilters: [fileItem.uri!.fsPath], + testNamePattern: '', // Empty pattern to run all tests in the file + }; + + // Create a promise that will be resolved when we get a response with the matching ID + const promise = new Promise((resolve, reject) => { + this.testPromises.set(fileId, { resolve, reject }); + + // Set a timeout to prevent hanging indefinitely + setTimeout(() => { + const promiseObj = this.testPromises.get(fileId); + if (promiseObj) { + this.testPromises.delete(fileId); + reject( + new Error( + `File test execution timed out for ${fileItem.uri!.fsPath}`, + ), + ); + } + }, 30000); // 30 seconds timeout for file-level tests + }); + + this.ws.send(JSON.stringify(data)); + return promise; + } + } + + public async createChildProcess() { + const execArgv: string[] = []; + const workerPath = path.resolve(__dirname, 'worker.js'); + const port = await getPort(); + const wsAddress = `ws://localhost:${port}`; + logger.debug('Spawning worker process', { + workerPath, + wsAddress, + }); + const rstestProcess = spawn('node', [...execArgv, workerPath], { + stdio: 'pipe', + env: { + ...process.env, + TEST: 'true', + RSTEST_WS_ADDRESS: wsAddress, + }, + }); + + rstestProcess.stdout?.on('data', (d) => { + const content = d.toString(); + logger.debug('worker stdout', content.trimEnd()); + }); + + rstestProcess.stderr?.on('data', (d) => { + const content = d.toString(); + logger.error('worker stderr', content.trimEnd()); + }); + + const server = createServer().listen(port).unref(); + const wss = new WebSocketServer({ server }); + + wss.once('connection', (ws) => { + this.ws = ws; + logger.debug('Worker connected', { wsAddress }); + const { cwd, rstestPath } = this.resolveRstestPath()[0]; + ws.send( + JSON.stringify({ + type: 'init', + rstestPath, + cwd, + }), + ); + logger.debug('Sent init payload to worker', { cwd, rstestPath }); + + ws.on('message', (_data) => { + const _message = JSON.parse(_data.toString()) as WorkerEvent; + if (_message.type === 'finish') { + const message: WorkerEventFinish = _message; + logger.debug('Received worker completion event', { + id: message.id, + testResultCount: Array.isArray(message.testResults) + ? message.testResults.length + : undefined, + testFileResultCount: Array.isArray(message.testFileResults) + ? message.testFileResults.length + : undefined, + }); + // Check if we have a pending promise for this test ID + const promiseObj = this.testPromises.get(message.id); + if (promiseObj) { + // Resolve the promise with the message data + promiseObj.resolve(message); + // Remove the promise from the map + this.testPromises.delete(message.id); + } + } + }); + }); + + rstestProcess.on('exit', (code, signal) => { + logger.debug('Worker process exited', { code, signal }); + }); + } + + public async createRstestWorker() {} +} diff --git a/packages/vscode/src/parserTest.ts b/packages/vscode/src/parserTest.ts new file mode 100644 index 00000000..c2d405e1 --- /dev/null +++ b/packages/vscode/src/parserTest.ts @@ -0,0 +1,206 @@ +import { Compiler } from '@swc/core'; + +export class Range { + constructor( + public startLine: number, + public endLine: number, + public startChar: number, + public endChar: number, + ) {} +} + +// Minimal AST typings and type guards to avoid using `any`. +type Span = { start: number; end: number }; +type NodeBase = { type: string; span?: Span }; + +type Identifier = NodeBase & { type: 'Identifier'; value: string }; +type MemberExpression = NodeBase & { + type: 'MemberExpression'; + object: unknown; +}; +type Argument = { expression: unknown }; +type CallExpression = NodeBase & { + type: 'CallExpression'; + callee: unknown; + arguments: Argument[]; + span: Span; +}; + +type StringLiteral = NodeBase & { type: 'StringLiteral'; value: string }; +type TemplateElement = { cooked?: string; raw?: string }; +type TemplateLiteral = NodeBase & { + type: 'TemplateLiteral'; + quasis: TemplateElement[]; + expressions: unknown[]; +}; + +type Program = { span: Span } & { [key: string]: unknown }; + +const isObject = (v: unknown): v is Record => + typeof v === 'object' && v !== null; + +const isSpan = (x: unknown): x is Span => + isObject(x) && + typeof (x as Record).start === 'number' && + typeof (x as Record).end === 'number'; + +const hasSpan = (v: unknown): v is { span: Span } => + isObject(v) && isSpan((v as Record).span); + +const isNode = (v: unknown): v is NodeBase => + isObject(v) && typeof (v as Record).type === 'string'; +const isIdentifier = (v: unknown): v is Identifier => + isNode(v) && + (v as Record).type === 'Identifier' && + typeof (v as Record).value === 'string'; +const isMemberExpression = (v: unknown): v is MemberExpression => + isNode(v) && + (v as Record).type === 'MemberExpression' && + 'object' in (v as Record); +const isCallExpression = (v: unknown): v is CallExpression => + isNode(v) && + (v as Record).type === 'CallExpression' && + Array.isArray((v as Record).arguments as unknown[]) && + hasSpan(v); +const isArgument = (v: unknown): v is Argument => + isObject(v) && 'expression' in v; +const isStringLiteral = (v: unknown): v is StringLiteral => + isNode(v) && + (v as Record).type === 'StringLiteral' && + typeof (v as Record).value === 'string'; +const isTemplateLiteral = (v: unknown): v is TemplateLiteral => + isNode(v) && + (v as Record).type === 'TemplateLiteral' && + Array.isArray((v as Record).quasis as unknown[]) && + Array.isArray((v as Record).expressions as unknown[]); + +export const parseTestFile = ( + code: string, + events: { + onTest( + range: Range, + name: string, + testType: 'test' | 'it' | 'describe' | 'suite', + ): void; + }, +) => { + const compiler = new Compiler(); + + // Parse the code using SWC + const astUnknown = compiler.parseSync(code, { + syntax: 'typescript', + tsx: true, + }); + + if (!hasSpan(astUnknown)) { + // If for some reason the parser returns a program without span, abort early. + return; + } + + const ast: Program = astUnknown as unknown as Program; + const offset = ast.span.start - 1; + + // Helper function to convert SWC span to VS Code range + const spanToRange = (span: { start: number; end: number }): Range => { + const lines = code.substring(0, span.start - offset).split('\n'); + const startLine = lines.length - 1; + const startChar = lines[startLine].length; + + const endLines = code.substring(0, span.end - offset).split('\n'); + const endLine = endLines.length - 1; + const endChar = endLines[endLine].length; + + return new Range(startLine, endLine, startChar, endChar); + }; + + // Common test function names to detect + const testFunctions = new Set(['test', 'it', 'describe', 'suite']); + + // Helper function to extract string literal value + const getStringLiteralValue = (node: unknown): string | null => { + if (!node) return null; + + if (isStringLiteral(node)) { + return node.value; + } + if (isTemplateLiteral(node)) { + // For simple template literals without expressions + if (node.quasis?.length === 1 && node.expressions.length === 0) { + return node.quasis[0].cooked || node.quasis[0].raw || ''; + } + // For template literals with expressions, construct the string + let result = ''; + for (let i = 0; i < node.quasis.length; i++) { + result += node.quasis[i].cooked || node.quasis[i].raw || ''; + if (i < node.expressions.length) { + result += '$' + '{...}'; // Placeholder for expressions + } + } + return result; + } + + return null; + }; + + // Recursive function to walk the AST + const walkNode = (node: unknown): void => { + if (!isObject(node)) { + return; + } + + // Check for call expressions that might be test functions + if (isCallExpression(node)) { + let functionName: string | null = null; + + // Handle direct function calls: test(), it(), describe() + const callee = (node as CallExpression).callee; + if (isIdentifier(callee)) { + functionName = callee.value; + } + // Handle member expressions: test.only(), describe.skip() + else if (isMemberExpression(callee)) { + const obj = callee.object; + if (isIdentifier(obj)) { + functionName = obj.value; + } + } + + if (functionName && testFunctions.has(functionName)) { + // Extract test name from first argument + const firstArg = node.arguments?.[0] || undefined; + const expr = + firstArg && isArgument(firstArg) ? firstArg.expression : undefined; + const testName = getStringLiteralValue(expr); + const range = spanToRange(node.span); + + type TestFn = 'test' | 'it' | 'describe' | 'suite'; + events.onTest( + range, + testName || 'unnamed test', + functionName as TestFn, + ); + } + } + + // Walk through all properties of the node to find nested structures + for (const key in node) { + if (key === 'span') { + continue; + } + + const value = (node as Record)[key]; + if (Array.isArray(value)) { + for (const child of value) { + // Recurse into array elements to discover nested structures, + // even if they are wrapper objects (e.g., CallExpression arguments). + walkNode(child as unknown); + } + } else if (isNode(value)) { + walkNode(value); + } + } + }; + + // Start walking from the root + walkNode(ast); +}; diff --git a/packages/vscode/src/testTree.ts b/packages/vscode/src/testTree.ts new file mode 100644 index 00000000..0c6a7611 --- /dev/null +++ b/packages/vscode/src/testTree.ts @@ -0,0 +1,552 @@ +import { TextDecoder } from 'node:util'; +import type { TestResult } from '@rstest/core'; +import vscode from 'vscode'; +import { logger } from './logger'; +import type { RstestApi } from './master'; +import { parseTestFile } from './parserTest'; +import { getWorkspaceTestPatterns, shouldIgnorePath } from './utils'; + +const textDecoder = new TextDecoder('utf-8'); + +export const testData = new WeakMap(); + +let generationCounter = 0; + +export const getContentFromFilesystem = async (uri: vscode.Uri) => { + try { + const rawContent = await vscode.workspace.fs.readFile(uri); + return textDecoder.decode(rawContent); + } catch (e) { + logger.warn(`Error providing tests for ${uri.fsPath}`, e); + return ''; + } +}; + +export function gatherTestItems(collection: vscode.TestItemCollection) { + const items: vscode.TestItem[] = []; + collection.forEach((item) => { + items.push(item); + if (item.children.size > 0) { + gatherTestItems(item.children).forEach((child) => { + items.push(child); + }); + } + }); + return items; +} + +const getAncestorLabels = (item: vscode.TestItem): string[] => { + const labels: string[] = []; + let current = item.parent; + while (current) { + if ( + typeof current.label === 'string' && + !current.id.startsWith('file://') + ) { + labels.unshift(current.label); + } + current = current.parent; + } + return labels; +}; + +type CaseNodeStatus = 'pass' | 'fail' | 'skip'; + +type CaseNode = { + item: vscode.TestItem; + ancestors: string[]; + children: CaseNode[]; + parent?: CaseNode; + directResult?: TestResult; + status?: CaseNodeStatus; + duration: number; +}; + +type ApplyResultsOptions = { + includeRoot: boolean; + aggregateFailureMessage: string; +}; + +type ApplyResultsSummary = { + totalDuration: number; + anyFailed: boolean; + rootHadDirectResult: boolean; + matchedResultCount: number; + unmatchedResultNames: string[]; + failedNodeCount: number; + totalNodeCount: number; +}; + +const applyResultsToTestCases = ( + root: vscode.TestItem, + run: vscode.TestRun, + results: TestResult[], + options: ApplyResultsOptions, +): ApplyResultsSummary => { + const startedItems = new Set(); + const ensureStarted = (item: vscode.TestItem) => { + if (!startedItems.has(item)) { + run.started(item); + startedItems.add(item); + } + }; + + const candidateItems = options.includeRoot + ? [root, ...gatherTestItems(root.children)] + : gatherTestItems(root.children); + + const nodes: CaseNode[] = []; + const nodeByItem = new Map(); + let matchedResultCount = 0; + const unmatchedResultNames: string[] = []; + + for (const item of candidateItems) { + const data = testData.get(item); + if (!(data instanceof TestCase)) continue; + const node: CaseNode = { + item, + ancestors: getAncestorLabels(item), + children: [], + duration: 0, + }; + nodes.push(node); + nodeByItem.set(item, node); + } + + for (const node of nodes) { + const parentItem = node.item.parent; + if (!parentItem) continue; + const parentNode = nodeByItem.get(parentItem); + if (parentNode) { + node.parent = parentNode; + parentNode.children.push(node); + } + } + + const matchesParents = (node: CaseNode, parentNames: string[]): boolean => { + if (node.ancestors.length !== parentNames.length) { + return false; + } + return node.ancestors.every((label, index) => label === parentNames[index]); + }; + + for (const result of results) { + const parentNames = Array.isArray(result.parentNames) + ? (result.parentNames as string[]) + : []; + let match: CaseNode | undefined; + for (const node of nodes) { + if ( + node.item.label === result.name && + matchesParents(node, parentNames) + ) { + match = node; + break; + } + } + if (match) { + match.directResult = result; + matchedResultCount++; + } else if (result.name) { + unmatchedResultNames.push(result.name); + } + } + + const sortedNodes = [...nodes].sort( + (a, b) => b.ancestors.length - a.ancestors.length, + ); + + let totalDuration = 0; + let anyFailed = false; + + for (const node of sortedNodes) { + const { directResult } = node; + if (directResult) { + const duration = directResult.duration || 0; + ensureStarted(node.item); + + if (directResult.status === 'pass') { + run.passed(node.item, duration); + node.status = 'pass'; + } else if (directResult.status === 'skip') { + run.skipped(node.item); + node.status = 'skip'; + } else if ( + directResult.status === 'fail' && + directResult.errors?.length + ) { + anyFailed = true; + run.failed( + node.item, + new vscode.TestMessage( + directResult.errors[0].message || 'Test failed', + ), + duration, + ); + node.status = 'fail'; + } else if (directResult.status === 'fail') { + anyFailed = true; + run.failed(node.item, new vscode.TestMessage('Test failed'), duration); + node.status = 'fail'; + } else { + run.skipped(node.item); + node.status = 'skip'; + } + + run.appendOutput(`Completed ${node.item.id}\r\n`); + node.duration = duration; + if (node.status === 'fail') { + anyFailed = true; + } + totalDuration += duration; + continue; + } + + if (node.children.length === 0) { + ensureStarted(node.item); + run.skipped(node.item); + node.status = 'skip'; + node.duration = 0; + continue; + } + + let aggregatedDuration = 0; + let childFailed = false; + let childHasStatus = false; + + for (const child of node.children) { + aggregatedDuration += child.duration; + if (child.status) { + childHasStatus = true; + } + if (child.status === 'fail') { + childFailed = true; + } + } + + if (!childHasStatus) { + ensureStarted(node.item); + run.skipped(node.item); + node.status = 'skip'; + node.duration = aggregatedDuration; + continue; + } + + ensureStarted(node.item); + node.duration = aggregatedDuration; + + if (childFailed) { + anyFailed = true; + run.failed( + node.item, + new vscode.TestMessage(options.aggregateFailureMessage), + aggregatedDuration, + ); + node.status = 'fail'; + } else { + run.passed(node.item, aggregatedDuration); + node.status = 'pass'; + } + } + + const rootNode = options.includeRoot ? nodeByItem.get(root) : undefined; + const rootHadDirectResult = Boolean(rootNode?.directResult); + const failedNodeCount = nodes.filter((node) => node.status === 'fail').length; + + return { + totalDuration, + anyFailed, + rootHadDirectResult, + matchedResultCount, + unmatchedResultNames, + failedNodeCount, + totalNodeCount: nodes.length, + }; +}; + +/** + * Scans the workspace for all test files and ensures they exist as root + * TestItems on the provided controller. Also parses their contents so the + * initial tree includes discovered tests without requiring files to open. + */ +export async function scanAllTestFiles( + controller: vscode.TestController, +): Promise { + const patterns = getWorkspaceTestPatterns(); + if (!patterns.length) return; + + const uris = new Set(); + + // Collect and dedupe all matching files across workspace folders + for (const { pattern } of patterns) { + const found = await vscode.workspace.findFiles(pattern); + for (const f of found) { + const shouldIgnore = shouldIgnorePath(f.fsPath); + if (!shouldIgnore) { + uris.add(f.toString()); + } + } + } + + const tasks: Promise[] = []; + + for (const uriStr of uris) { + const uri = vscode.Uri.parse(uriStr); + let item = controller.items.get(uriStr); + let fileData: TestFile | undefined; + + if (!item) { + item = controller.createTestItem( + uriStr, + uri.path.split('/').pop() || uriStr, + uri, + ); + controller.items.add(item); + fileData = new TestFile(); + testData.set(item, fileData); + item.canResolveChildren = true; + } else { + const data = testData.get(item); + if (data instanceof TestFile) { + fileData = data; + } else { + fileData = new TestFile(); + testData.set(item, fileData); + } + } + + // Parse immediately so children are available in the tree + tasks.push(fileData.updateFromDisk(controller, item)); + } + + await Promise.all(tasks); +} + +export class TestFile { + public didResolve = false; + + public async updateFromDisk( + controller: vscode.TestController, + item: vscode.TestItem, + ) { + try { + const content = await getContentFromFilesystem(item.uri!); + item.error = undefined; + this.updateFromContents(controller, content, item); + } catch (e) { + item.error = (e as Error).stack; + } + } + + /** + * Parses the tests from the input text, and updates the tests contained + * by this file to be those from the text, + */ + public updateFromContents( + controller: vscode.TestController, + content: string, + item: vscode.TestItem, + ) { + // Maintain a stack of ancestors to build a hierarchical tree + const ancestors = [{ item, children: [] as vscode.TestItem[] }]; + const thisGeneration = generationCounter++; + this.didResolve = true; + + const ascend = (depth: number) => { + while (ancestors.length > depth) { + const finished = ancestors.pop()!; + finished.item.children.replace(finished.children); + } + }; + + const contains = (outer: vscode.Range | undefined, inner: vscode.Range) => + !outer || outer.contains(inner); + + parseTestFile(content, { + onTest: (range, name, testType) => { + const vscodeRange = new vscode.Range( + new vscode.Position(range.startLine, range.startChar), + new vscode.Position(range.endLine, range.endChar), + ); + + // Adjust the ancestor stack based on source nesting using ranges + while (ancestors.length > 1) { + const last = ancestors[ancestors.length - 1].item; + if (contains(last.range, vscodeRange)) { + break; + } + const finished = ancestors.pop()!; + finished.item.children.replace(finished.children); + } + + const parent = ancestors[ancestors.length - 1]; + + const testCase = new TestCase( + thisGeneration, + testType, + vscodeRange, + name, + ); + + const testItem = controller.createTestItem( + testCase.getId(), + testCase.getLabel(), + item.uri, + ); + testItem.range = vscodeRange; + + // Set TestCase data for both describe blocks and leaf tests + testData.set(testItem, testCase); + parent.children.push(testItem); + + if (testType === 'describe' || testType === 'suite') { + // This becomes the new parent for subsequently discovered children + ancestors.push({ item: testItem, children: [] }); + } + }, + }); + + ascend(0); // finish and assign children for all remaining items + } + + async run( + item: vscode.TestItem, + run: vscode.TestRun, + api: RstestApi, + controller?: vscode.TestController, + ): Promise { + if (!this.didResolve && controller) { + await this.updateFromDisk(controller, item); + } + + // Match messaging and behavior from extension.ts + run.appendOutput(`Running all tests in file ${item.id}\r\n`); + + try { + const rstestResults = await api.runFileTests(item); + + const results = rstestResults?.testResults ?? []; + const { + totalDuration, + anyFailed, + matchedResultCount, + unmatchedResultNames, + failedNodeCount, + totalNodeCount, + } = applyResultsToTestCases(item, run, results, { + includeRoot: false, + aggregateFailureMessage: 'Some nested tests failed', + }); + + logger.debug('Applied file test results', { + fileId: item.id, + totalNodeCount, + matchedResultCount, + unmatchedResultCount: unmatchedResultNames.length, + unmatchedResultSample: unmatchedResultNames.slice(0, 3), + failedNodeCount, + totalDuration, + }); + + // Mark the file test as passed if no test failed + if (rstestResults && !anyFailed) { + run.passed(item, totalDuration); + } else if (rstestResults) { + run.failed( + item, + new vscode.TestMessage('Some tests in this file failed'), + totalDuration, + ); + } else { + run.failed( + item, + new vscode.TestMessage('No results returned for this file'), + ); + } + } catch (error: any) { + run.failed( + item, + new vscode.TestMessage( + `Error running file tests: ${error.message || String(error)}`, + ), + ); + // Skip all child tests in case of error + for (const child of gatherTestItems(item.children)) { + run.skipped(child); + } + } + } +} + +export class TestCase { + constructor( + public generation: number, + public testType: string, + private range: vscode.Range, + private name: string, + ) {} + + getId() { + return `${this.name} ${this.range.start.line}:${this.range.start.character}-${this.range.end.line}:${this.range.end.character}`; + } + + getLabel() { + return this.name; + } + + async run( + item: vscode.TestItem, + run: vscode.TestRun, + api: RstestApi, + ): Promise { + // Match messaging and behavior from extension.ts + run.appendOutput(`Running test case ${item.id}\r\n`); + + try { + const rstestResults = await api.runTest(item); + + if (rstestResults && rstestResults.testResults.length > 0) { + const { + totalDuration, + matchedResultCount, + unmatchedResultNames, + failedNodeCount, + totalNodeCount, + rootHadDirectResult, + } = applyResultsToTestCases(item, run, rstestResults.testResults, { + includeRoot: true, + aggregateFailureMessage: 'Some sub-tests in this case failed', + }); + + logger.debug('Applied case test results', { + testId: item.id, + totalNodeCount, + matchedResultCount, + unmatchedResultCount: unmatchedResultNames.length, + unmatchedResultSample: unmatchedResultNames.slice(0, 3), + failedNodeCount, + totalDuration, + rootHadDirectResult, + }); + } else { + run.failed( + item, + new vscode.TestMessage('No results returned for this test'), + ); + } + } catch (error: any) { + run.failed( + item, + new vscode.TestMessage( + `Error running test: ${error.message || String(error)}`, + ), + ); + // Skip all child tests in case of error + if (item.children.size > 0) { + for (const child of gatherTestItems(item.children)) { + run.skipped(child); + } + } + } + } +} diff --git a/packages/vscode/src/types.ts b/packages/vscode/src/types.ts new file mode 100644 index 00000000..ce5870a2 --- /dev/null +++ b/packages/vscode/src/types.ts @@ -0,0 +1,27 @@ +import type { TestFileResult, TestResult } from '@rstest/core'; + +//#region master -> worker +export type WorkerInitData = { + type: 'init'; + rstestPath: string; + cwd: string; +}; + +export type WorkerRunTestData = { + id: string; + type: 'runTest'; + fileFilters: string[]; + testNamePattern: string; +}; +// #endregion + +//#region worker -> master +export type WorkerEvent = WorkerEventFinish; + +export type WorkerEventFinish = { + type: 'finish'; + id: string; + testResults: TestResult[]; + testFileResults?: TestFileResult[]; +}; +//#endregion diff --git a/packages/vscode/src/utils.ts b/packages/vscode/src/utils.ts new file mode 100644 index 00000000..f20ff513 --- /dev/null +++ b/packages/vscode/src/utils.ts @@ -0,0 +1,30 @@ +import vscode from 'vscode'; +import { getConfigValue } from './config'; + +export function shouldIgnorePath(path: string) { + return ( + path.includes('/node_modules/') || + path.includes('/.git/') || + path.endsWith('.git') + ); +} + +export type WorkspaceTestPattern = { + workspaceFolder: vscode.WorkspaceFolder; + pattern: vscode.GlobPattern; +}; + +export function getWorkspaceTestPatterns(): WorkspaceTestPattern[] { + const folders = vscode.workspace.workspaceFolders; + if (!folders) { + return []; + } + + return folders.flatMap((workspaceFolder) => { + const globs = getConfigValue('testFileGlobPattern', workspaceFolder); + return globs.map((glob) => ({ + workspaceFolder, + pattern: new vscode.RelativePattern(workspaceFolder, glob), + })); + }); +} diff --git a/packages/vscode/src/worker/index.ts b/packages/vscode/src/worker/index.ts new file mode 100644 index 00000000..bec39f33 --- /dev/null +++ b/packages/vscode/src/worker/index.ts @@ -0,0 +1,101 @@ +import { WebSocket } from 'ws'; +import type { WorkerInitData, WorkerRunTestData } from '../types'; +import { logger } from './logger'; +import { VscodeReporter } from './reporter'; + +class Worker { + private ws: WebSocket; + public rstestPath!: string; + public cwd!: string; + + constructor() { + this.ws = new WebSocket(process.env.RSTEST_WS_ADDRESS!); + this.ws.on('message', (bufferData) => { + const _data = JSON.parse(bufferData.toString()); + if (_data.type === 'init') { + const data: WorkerInitData = _data; + this.initRstest(data); + } else if (_data.type === 'runTest') { + const data: WorkerRunTestData = _data; + this.runTest(data); + } + }); + } + + public async runTest(data: WorkerRunTestData) { + logger.debug('Received runTest request', { + id: data.id, + fileFilters: data.fileFilters, + testNamePattern: data.testNamePattern, + }); + try { + const rstest = await this.createRstest(data); + rstest.context.fileFilters = data.fileFilters; + rstest.context.normalizedConfig.testNamePattern = data.testNamePattern; + const res = await rstest.runTests(); + logger.debug( + 'Test run completed', + JSON.stringify({ id: data.id, result: res }, null, 2), + ); + } catch (error) { + logger.error('Test run failed', error); + } + } + + public async initRstest(data: WorkerInitData) { + this.rstestPath = data.rstestPath; + this.cwd = data.cwd; + logger.debug('Initialized worker context', { + cwd: this.cwd, + rstestPath: this.rstestPath, + }); + } + + public async createRstest(data: WorkerRunTestData) { + const rstestModule = (await import( + this.rstestPath + )) as typeof import('@rstest/core'); + logger.debug('Loaded Rstest module'); + const { createRstest, loadConfig } = rstestModule; + const { filePath } = await loadConfig({ + cwd: this.cwd, + }); + + logger.debug('Loaded Rstest config', { + id: data.id, + configFile: filePath ?? null, + }); + + const rstest = createRstest( + { + config: { + root: this.cwd, + reporters: [ + new VscodeReporter({ + onTestRunEndCallback: ({ testFileResults, testResults }) => { + this.ws.send( + JSON.stringify({ + type: 'finish', + id: data.id, + testResults, + testFileResults, + }), + ); + }, + }), + ], + }, + configFilePath: filePath ?? undefined, + projects: [], + }, + 'run', + [], + ); + + return rstest; + } +} + +(async () => { + const _worker = new Worker(); +})(); diff --git a/packages/vscode/src/worker/logger.ts b/packages/vscode/src/worker/logger.ts new file mode 100644 index 00000000..d2483df3 --- /dev/null +++ b/packages/vscode/src/worker/logger.ts @@ -0,0 +1,31 @@ +import { inspect } from 'node:util'; + +function format(values: unknown[]): string { + return values + .map((value) => + typeof value === 'string' + ? value + : inspect(value, { depth: 4, colors: false }), + ) + .join(' '); +} + +class WorkerLogger { + public debug(...values: unknown[]) { + console.log(format(values)); + } + + public info(...values: unknown[]) { + console.log(format(values)); + } + + public warn(...values: unknown[]) { + console.warn(format(values)); + } + + public error(...values: unknown[]) { + console.error(format(values)); + } +} + +export const logger = new WorkerLogger(); diff --git a/packages/vscode/src/worker/reporter.ts b/packages/vscode/src/worker/reporter.ts new file mode 100644 index 00000000..f40a9cc1 --- /dev/null +++ b/packages/vscode/src/worker/reporter.ts @@ -0,0 +1,39 @@ +import type { Reporter } from '@rstest/core'; +import { logger } from './logger'; + +export class VscodeReporter implements Reporter { + private onTestRunEndCallback?: (data: { + testFileResults: any; + testResults: any; + }) => void; + + constructor({ + onTestRunEndCallback, + }: { + onTestRunEndCallback?: (data: { + testResults: any; + testFileResults: any; + }) => void; + }) { + this.onTestRunEndCallback = onTestRunEndCallback; + } + + onTestRunEnd: Reporter['onTestRunEnd'] = ({ results, testResults }) => { + if (this.onTestRunEndCallback) { + const fileCount = Array.isArray(results) + ? results.length + : results + ? Object.keys(results).length + : 0; + const testCount = Array.isArray(testResults) ? testResults.length : 0; + logger.debug('Forwarding test results', { + fileCount, + testCount, + }); + this.onTestRunEndCallback({ + testFileResults: results, + testResults: testResults, + }); + } + }; +} diff --git a/packages/vscode/tests/fixtures/.vscode/settings.json b/packages/vscode/tests/fixtures/.vscode/settings.json new file mode 100644 index 00000000..0fdd2da9 --- /dev/null +++ b/packages/vscode/tests/fixtures/.vscode/settings.json @@ -0,0 +1,3 @@ +{ + "rstest.logLevel": "default" +} \ No newline at end of file diff --git a/packages/vscode/tests/fixtures/rstest.config.ts b/packages/vscode/tests/fixtures/rstest.config.ts new file mode 100644 index 00000000..9ee3cbab --- /dev/null +++ b/packages/vscode/tests/fixtures/rstest.config.ts @@ -0,0 +1,3 @@ +import { defineConfig } from '@rstest/core'; + +export default defineConfig({}); diff --git a/packages/vscode/tests/fixtures/src/foo.ts b/packages/vscode/tests/fixtures/src/foo.ts new file mode 100644 index 00000000..e226334a --- /dev/null +++ b/packages/vscode/tests/fixtures/src/foo.ts @@ -0,0 +1,2 @@ +export const sayFoo = () => 'foo'; +export const sayFoo1 = () => 'foo1'; diff --git a/packages/vscode/tests/fixtures/src/index.ts b/packages/vscode/tests/fixtures/src/index.ts new file mode 100644 index 00000000..eae921c8 --- /dev/null +++ b/packages/vscode/tests/fixtures/src/index.ts @@ -0,0 +1 @@ +export const sayHi = () => 'hi'; diff --git a/packages/vscode/tests/fixtures/test/foo.test.ts b/packages/vscode/tests/fixtures/test/foo.test.ts new file mode 100644 index 00000000..b2247547 --- /dev/null +++ b/packages/vscode/tests/fixtures/test/foo.test.ts @@ -0,0 +1,24 @@ +import { describe, expect, it } from '@rstest/core'; +import { sayFoo, sayFoo1 } from '../src/foo'; + +describe('l1', () => { + describe('l2', () => { + it('should return "foo"', () => { + expect(sayFoo()).toBe('foo'); + }); + + it('should also return "foo"', () => { + expect(sayFoo()).toBe('foo'); + }); + + describe('l3', () => { + it('should return "foo1"', () => { + expect(sayFoo1()).toBe('foo2'); + }); + + it('should also return "foo1"', () => { + expect(sayFoo1()).toBe('foo3'); + }); + }); + }); +}); diff --git a/packages/vscode/tests/fixtures/test/index.test.ts b/packages/vscode/tests/fixtures/test/index.test.ts new file mode 100644 index 00000000..28f8a8ee --- /dev/null +++ b/packages/vscode/tests/fixtures/test/index.test.ts @@ -0,0 +1,12 @@ +import { describe, expect, it } from '@rstest/core'; +import { sayHi } from '../src/index'; + +describe('Index', () => { + it('should add two numbers correctly', () => { + expect(1 + 1).toBe(2); + }); + + it('should test source code correctly', () => { + expect(sayHi()).toBe('hi'); + }); +}); diff --git a/packages/vscode/tests/fixtures/test/jsFile.spec.js b/packages/vscode/tests/fixtures/test/jsFile.spec.js new file mode 100644 index 00000000..09b9d018 --- /dev/null +++ b/packages/vscode/tests/fixtures/test/jsFile.spec.js @@ -0,0 +1,8 @@ +// JavaScript test file to verify discovery of *.spec.* patterns +const { describe, it, expect } = require('@rstest/core'); + +describe('JS', () => { + it('should run in JS', () => { + expect(1).toBe(1); + }); +}); diff --git a/packages/vscode/tests/fixtures/test/jsxFile.test.jsx b/packages/vscode/tests/fixtures/test/jsxFile.test.jsx new file mode 100644 index 00000000..09b9d018 --- /dev/null +++ b/packages/vscode/tests/fixtures/test/jsxFile.test.jsx @@ -0,0 +1,8 @@ +// JavaScript test file to verify discovery of *.spec.* patterns +const { describe, it, expect } = require('@rstest/core'); + +describe('JS', () => { + it('should run in JS', () => { + expect(1).toBe(1); + }); +}); diff --git a/packages/vscode/tests/fixtures/test/tsxFile.test.tsx b/packages/vscode/tests/fixtures/test/tsxFile.test.tsx new file mode 100644 index 00000000..1d6be3a8 --- /dev/null +++ b/packages/vscode/tests/fixtures/test/tsxFile.test.tsx @@ -0,0 +1,8 @@ +// JavaScript test file to verify discovery of *.spec.* patterns +import { describe, expect, it } from '@rstest/core'; + +describe('JS', () => { + it('should run in JS', () => { + expect(1).toBe(1); + }); +}); diff --git a/packages/vscode/tests/fixtures/tsconfig.json b/packages/vscode/tests/fixtures/tsconfig.json new file mode 100644 index 00000000..e6b9bdf4 --- /dev/null +++ b/packages/vscode/tests/fixtures/tsconfig.json @@ -0,0 +1,15 @@ +{ + "compilerOptions": { + "target": "ES2020", + "lib": ["DOM", "ES2020"], + "module": "ESNext", + "jsx": "react-jsx", + "strict": true, + "skipLibCheck": true, + "isolatedModules": true, + "resolveJsonModule": true, + "moduleResolution": "bundler", + "useDefineForClassFields": true + }, + "include": ["src"] +} diff --git a/packages/vscode/tests/runTest.ts b/packages/vscode/tests/runTest.ts new file mode 100644 index 00000000..97a1aeea --- /dev/null +++ b/packages/vscode/tests/runTest.ts @@ -0,0 +1,35 @@ +import * as path from 'node:path'; +import { runTests } from '@vscode/test-electron'; + +async function main() { + try { + // The folder containing the Extension Manifest package.json + // Passed to `--extensionDevelopmentPath` + const extensionDevelopmentPath = path.resolve(__dirname, '../'); + + // The path to the extension test script + // Passed to --extensionTestsPath + const extensionTestsPath = path.resolve(__dirname, './suite/index'); + + // Open this folder as the workspace in the Extension Host during tests + // Note: __dirname points to tests-dist at runtime, so resolve back to tests/fixtures + const workspacePath = path.resolve(__dirname, '../tests/fixtures'); + + // Download VS Code, unzip it and run the integration test + await runTests({ + extensionDevelopmentPath, + extensionTestsPath, + launchArgs: [ + // Launch the Extension Host with the fixtures workspace + workspacePath, + // This disables all extensions except the one being testing + '--disable-extensions', + ], + }); + } catch { + console.error('Failed to run tests'); + process.exit(1); + } +} + +main(); diff --git a/packages/vscode/tests/suite/config.test.ts b/packages/vscode/tests/suite/config.test.ts new file mode 100644 index 00000000..19134a8d --- /dev/null +++ b/packages/vscode/tests/suite/config.test.ts @@ -0,0 +1,159 @@ +import * as assert from 'node:assert'; +import * as fs from 'node:fs'; +import * as path from 'node:path'; +import * as vscode from 'vscode'; +import { delay, waitForConfigValue } from './helpers'; + +suite('Configuration Integration', () => { + function clearController(ctrl: vscode.TestController) { + const ids: string[] = []; + ctrl.items.forEach((item) => { + ids.push(item.id); + }); + for (const id of ids) ctrl.items.delete(id); + } + + test('respects rstest.testFileGlobPattern (array-only)', async () => { + const extension = vscode.extensions.getExtension('rstack.rstest'); + assert.ok(extension, 'Extension should be present'); + if (extension && !extension.isActive) { + await extension.activate(); + } + + const rstestInstance: any = extension?.exports; + const testController: vscode.TestController = + rstestInstance?.testController; + assert.ok(testController, 'Test controller should be exported'); + + const folders = vscode.workspace.workspaceFolders; + assert.ok(folders && folders.length > 0, 'Workspace folder is required'); + + const config = vscode.workspace.getConfiguration('rstest'); + const prev = config.get('testFileGlobPattern'); + + try { + // 1) Only discover *.spec.* files + await config.update( + 'testFileGlobPattern', + ['**/*.spec.*'], + vscode.ConfigurationTarget.Workspace, + ); + + clearController(testController); + await testController.resolveHandler?.(undefined as any); + await delay(500); + + const rootsSpec: vscode.TestItem[] = []; + testController.items.forEach((it) => { + rootsSpec.push(it); + }); + assert.ok(rootsSpec.length >= 1, 'Should discover spec files'); + assert.ok( + rootsSpec.some((it) => + it.id.endsWith('/tests/fixtures/test/jsFile.spec.js'), + ), + 'Should include jsFile.spec.js', + ); + // Ensure no duplicate non-spec-only additions by counting unique suffixes + assert.ok( + !rootsSpec.some((it) => + it.id.endsWith('/tests/fixtures/test/foo.test.ts'), + ), + 'Should not include foo.test.ts when only *.spec.* is configured', + ); + + // 2) Only discover *.test.* files + await config.update( + 'testFileGlobPattern', + ['**/*.test.*'], + vscode.ConfigurationTarget.Workspace, + ); + + clearController(testController); + await testController.resolveHandler?.(undefined as any); + await delay(500); + + const rootsTest: vscode.TestItem[] = []; + testController.items.forEach((it) => { + rootsTest.push(it); + }); + assert.ok(rootsTest.length >= 1, 'Should discover test files'); + assert.ok( + rootsTest.some((it) => + it.id.endsWith('/tests/fixtures/test/foo.test.ts'), + ), + 'Should include foo.test.ts', + ); + assert.ok( + rootsTest.some((it) => + it.id.endsWith('/tests/fixtures/test/index.test.ts'), + ), + 'Should include index.test.ts', + ); + assert.ok( + rootsTest.some((it) => + it.id.endsWith('/tests/fixtures/test/tsxFile.test.tsx'), + ), + 'Should include tsxFile.test.tsx', + ); + assert.ok( + rootsTest.some((it) => + it.id.endsWith('/tests/fixtures/test/jsxFile.test.jsx'), + ), + 'Should include jsxFile.test.jsx', + ); + assert.ok( + !rootsTest.some((it) => + it.id.endsWith('/tests/fixtures/test/jsFile.spec.js'), + ), + 'Should not include jsFile.spec.js when only *.test.* is configured', + ); + } finally { + // restore previous setting + await config.update( + 'testFileGlobPattern', + (prev as any) ?? undefined, + vscode.ConfigurationTarget.Workspace, + ); + clearController(testController); + await testController.resolveHandler?.(undefined as any); + await delay(200); + // Clean up test artifacts + const fixturesVscodeDir = path.join(folders[0].uri.fsPath, '.vscode'); + if (fs.existsSync(fixturesVscodeDir)) { + fs.rmSync(fixturesVscodeDir, { recursive: true, force: true }); + } + } + }); + + test('respects rstest.logLevel', async () => { + const config = vscode.workspace.getConfiguration('rstest'); + const prev = config.get('logLevel'); + + try { + await config.update( + 'logLevel', + 'debug', + vscode.ConfigurationTarget.Workspace, + ); + await delay(500); + + let logLevel = config.get('logLevel'); + + logLevel = await waitForConfigValue({ + initialValue: logLevel, + read: () => vscode.workspace.getConfiguration('rstest').get('logLevel'), + expected: 'debug', + }); + + assert.strictEqual(logLevel, 'debug'); + } finally { + await config.update( + 'logLevel', + (prev as any) ?? undefined, + vscode.ConfigurationTarget.Workspace, + ); + await delay(100); + } + }); +}); diff --git a/packages/vscode/tests/suite/helpers.ts b/packages/vscode/tests/suite/helpers.ts new file mode 100644 index 00000000..a4453f00 --- /dev/null +++ b/packages/vscode/tests/suite/helpers.ts @@ -0,0 +1,27 @@ +export async function delay(ms: number) { + await new Promise((resolve) => setTimeout(resolve, ms)); +} + +export async function waitForConfigValue({ + initialValue, + read, + expected, + timeoutMs = 2000, + pollMs = 25, +}: { + initialValue: T; + read: () => T; + expected: T; + timeoutMs?: number; + pollMs?: number; +}): Promise { + const start = Date.now(); + let value = initialValue; + + while (value !== expected && Date.now() - start < timeoutMs) { + await delay(pollMs); + value = read(); + } + + return value; +} diff --git a/packages/vscode/tests/suite/index.test.ts b/packages/vscode/tests/suite/index.test.ts new file mode 100644 index 00000000..07a0c77f --- /dev/null +++ b/packages/vscode/tests/suite/index.test.ts @@ -0,0 +1,185 @@ +import * as assert from 'node:assert'; +import * as vscode from 'vscode'; + +suite('Extension Test Suite', () => { + vscode.window.showInformationMessage('Start all tests.'); + + // Helper: recursively transform a TestItem into a label-only tree. + // Children are sorted by label for stable comparisons. + function toLabelTree(item: vscode.TestItem): { + label: string; + children?: { label: string; children?: any[] }[]; + } { + const nodes: { label: string; children?: any[] }[] = []; + item.children.forEach((child) => { + nodes.push(toLabelTree(child)); + }); + nodes.sort((a, b) => (a.label < b.label ? -1 : a.label > b.label ? 1 : 0)); + return nodes.length + ? { label: item.label, children: nodes } + : { label: item.label }; + } + + test('Extension should discover test items', async () => { + // Wait for the extension to activate and discover tests + await new Promise((resolve) => setTimeout(resolve, 2000)); + + // Check if workspace is opened correctly + const workspaceFolders = vscode.workspace.workspaceFolders; + + assert.ok( + workspaceFolders && workspaceFolders.length > 0, + 'Workspace should be opened', + ); + assert.ok( + workspaceFolders[0].uri.path.includes('fixtures'), + 'Should open the fixtures workspace', + ); + + // Open the foo.test.ts file from fixtures + const fooTestUri = vscode.Uri.joinPath( + workspaceFolders[0].uri, + 'test', + 'foo.test.ts', + ); + const document = await vscode.workspace.openTextDocument(fooTestUri); + await vscode.window.showTextDocument(document); + + // Check if the extension is activated + const extension = vscode.extensions.getExtension('rstack.rstest'); + if (extension && !extension.isActive) { + await extension.activate(); + } + + // Wait additional time for test discovery + await new Promise((resolve) => setTimeout(resolve, 1000)); + + // focus on the testing view of this extension + await vscode.commands.executeCommand('workbench.view.testing.focus'); + await new Promise((resolve) => setTimeout(resolve, 1000)); + + // Get the rstest test controller that the extension should have created + const rstestInstance = extension?.exports; + const testController: vscode.TestController = + rstestInstance?.testController; + + if (testController) { + // Trigger refresh to ensure test discovery + if (testController.refreshHandler) { + // await testController.refreshHandler(); + } + + console.log(`Test controller found with ID: ${testController.id}`); + console.log( + `Test controller has ${testController.items.size} root items`, + ); + + // Iterate through test items and log them + testController.items.forEach((item: vscode.TestItem) => { + console.log(`Root test item: ${item.id} - ${item.label}`); + if (item.children.size > 0) { + item.children.forEach((child: vscode.TestItem) => { + console.log(` Child test item: ${child.id} - ${child.label}`); + }); + } + }); + + // Assert that we have test items and check for specific items + assert.ok( + testController.items.size > 0, + 'Test controller should have discovered test items', + ); + + const itemsArray: vscode.TestItem[] = []; + testController.items.forEach((item) => { + itemsArray.push(item); + }); + + const foo = itemsArray.find((it) => + it.id.endsWith( + '/rstest/packages/vscode/tests/fixtures/test/foo.test.ts', + ), + ); + const index = itemsArray.find((it) => + it.id.endsWith( + '/rstest/packages/vscode/tests/fixtures/test/index.test.ts', + ), + ); + const jsSpec = itemsArray.find((it) => + it.id.endsWith( + '/rstest/packages/vscode/tests/fixtures/test/jsFile.spec.js', + ), + ); + const jsxFile = itemsArray.find((it) => + it.id.endsWith( + '/rstest/packages/vscode/tests/fixtures/test/tsxFile.test.tsx', + ), + ); + const tsxFile = itemsArray.find((it) => + it.id.endsWith( + '/rstest/packages/vscode/tests/fixtures/test/tsxFile.test.tsx', + ), + ); + + assert.ok(foo, 'foo.test.ts should be discovered'); + // Validate foo.test.ts structure via label-only tree + const fooTree = toLabelTree(foo!); + assert.deepStrictEqual(fooTree, { + label: 'foo.test.ts', + children: [ + { + label: 'l1', + children: [ + { + label: 'l2', + children: [ + { + label: 'l3', + children: [ + { label: 'should also return "foo1"' }, + { label: 'should return "foo1"' }, + ], + }, + { label: 'should also return "foo"' }, + { label: 'should return "foo"' }, + ], + }, + ], + }, + ], + }); + + // Open the index.test.ts file from fixtures + const indexTestUri = vscode.Uri.joinPath( + workspaceFolders[0].uri, + 'test', + 'index.test.ts', + ); + const document2 = await vscode.workspace.openTextDocument(indexTestUri); + await vscode.window.showTextDocument(document2); + await new Promise((resolve) => setTimeout(resolve, 1000)); + assert.ok(index, 'index.test.ts should be discovered'); + const indexTree = toLabelTree(index!); + assert.deepStrictEqual(indexTree, { + label: 'index.test.ts', + children: [ + { + label: 'Index', + children: [ + { label: 'should add two numbers correctly' }, + { label: 'should test source code correctly' }, + ], + }, + ], + }); + + assert.ok(jsSpec, 'jsFile.spec.js should be discovered'); + assert.ok(jsxFile, 'tsxFile.test.tsx should be discovered'); + assert.ok(tsxFile, 'tsxFile.test.tsx should be discovered'); + } else { + assert.fail( + 'Test controller should be accessible through extension exports', + ); + } + }); +}); diff --git a/packages/vscode/tests/suite/index.ts b/packages/vscode/tests/suite/index.ts new file mode 100644 index 00000000..27a64721 --- /dev/null +++ b/packages/vscode/tests/suite/index.ts @@ -0,0 +1,45 @@ +import path from 'node:path'; +import glob from 'glob'; +import Mocha from 'mocha'; + +export function run(): Promise { + // Force color output + process.env.FORCE_COLOR = '1'; + process.env.NO_COLOR = ''; + + // Create the mocha test + const mocha = new Mocha({ + ui: 'tdd', + timeout: 20_000, // 20 seconds + color: true, // Force enable colors + }); + + const testsRoot = path.resolve(__dirname, '..'); + + return new Promise((c, e) => { + glob('**/**.test.js', { cwd: testsRoot }, (err, files) => { + if (err) { + return e(err); + } + + // Add files to the test suite + for (const f of files) { + mocha.addFile(path.resolve(testsRoot, f)); + } + + try { + // Run the mocha test + mocha.run((failures) => { + if (failures > 0) { + e(new Error(`${failures} tests failed.`)); + } else { + c(); + } + }); + } catch (err) { + console.error(err); + e(err); + } + }); + }); +} diff --git a/packages/vscode/tests/unit/parse.test.ts b/packages/vscode/tests/unit/parse.test.ts new file mode 100644 index 00000000..363adf4a --- /dev/null +++ b/packages/vscode/tests/unit/parse.test.ts @@ -0,0 +1,333 @@ +import { describe, expect, it } from '@rstest/core'; +import { parseTestFile, type Range } from '../../src/parserTest'; + +describe('parseTestFile', () => { + it('should detect nested describe and test blocks', () => { + const code = ` + describe('outer', () => { + it('inner test', () => {}); + test('another inner test', () => {}); + describe('inner describe', () => { + test('deeply nested test', () => {}); + }); + }); + `; + + const tests: { name: string; type: string }[] = []; + parseTestFile(code, { + onTest: ( + _range: Range, + name: string, + testType: 'test' | 'it' | 'describe' | 'suite', + ) => { + tests.push({ name, type: testType }); + }, + }); + + // The order of discovery is not guaranteed to be in source order, so we sort. + tests.sort((a, b) => a.name.localeCompare(b.name)); + + expect(tests.map((t) => t.name)).toEqual([ + 'another inner test', + 'deeply nested test', + 'inner describe', + 'inner test', + 'outer', + ]); + + expect(tests.map((t) => t.type)).toEqual([ + 'test', + 'test', + 'describe', + 'it', + 'describe', + ]); + }); + + it('should handle template literals in test names', () => { + const code = ` + const a = 'a'; + describe(\`outer \${a}\`, () => { + it('inner test', () => {}); + }); + `; + + const tests: { name: string; type: string }[] = []; + parseTestFile(code, { + onTest: ( + _range: Range, + name: string, + testType: 'test' | 'it' | 'describe' | 'suite', + ) => { + tests.push({ name, type: testType }); + }, + }); + + tests.sort((a, b) => a.name.localeCompare(b.name)); + + // biome-ignore lint/suspicious/noTemplateCurlyInString: use $ here. + expect(tests.map((t) => t.name)).toEqual(['inner test', 'outer ${...}']); + }); + + it('should detect .only, .skip and .todo variants', () => { + const code = ` + describe.skip('skipped describe', () => { + it('inner', () => {}); + }); + test.only('focused test', () => {}); + test["only"]('computed only', () => {}); + test.todo('has todo'); + `; + + const tests: { name: string; type: string }[] = []; + parseTestFile(code, { + onTest: ( + _range: Range, + name: string, + testType: 'test' | 'it' | 'describe' | 'suite', + ) => { + tests.push({ name, type: testType }); + }, + }); + + tests.sort((a, b) => a.name.localeCompare(b.name)); + + expect(tests.map((t) => t.name)).toEqual([ + 'computed only', + 'focused test', + 'has todo', + 'inner', + 'skipped describe', + ]); + expect(tests.map((t) => t.type)).toEqual([ + 'test', + 'test', + 'test', + 'it', + 'describe', + ]); + }); + + it('should detect suite blocks', () => { + const code = ` + suite('root suite', () => { + test('child test', () => {}); + }); + `; + + const tests: { name: string; type: string }[] = []; + parseTestFile(code, { + onTest: ( + _range: Range, + name: string, + testType: 'test' | 'it' | 'describe' | 'suite', + ) => { + tests.push({ name, type: testType }); + }, + }); + + tests.sort((a, b) => a.name.localeCompare(b.name)); + + expect(tests.map((t) => t.name)).toEqual(['child test', 'root suite']); + expect(tests.map((t) => t.type)).toEqual(['test', 'suite']); + }); + + it('should mark non-literal or missing names as "unnamed test"', () => { + const code = ` + const title = getTitle(); + function getTitle() { return 'x'; } + test(title as any, () => {}); + it(123 as any, () => {}); + describe(() => {}, () => {}); + suite((() => 'x') as any, () => {}); + test(() => {}); + `; + + const tests: { name: string; type: string }[] = []; + parseTestFile(code, { + onTest: ( + _range: Range, + name: string, + testType: 'test' | 'it' | 'describe' | 'suite', + ) => { + tests.push({ name, type: testType }); + }, + }); + + expect(tests.length).toBe(5); + expect(tests.every((t) => t.name === 'unnamed test')).toBe(true); + }); + + it('should handle complex template literals with multiple expressions', () => { + const code = ` + const a = 1, b = 2; + test(\`prefix \${a} middle \${b} suffix\`, () => {}); + `; + + const tests: { name: string; type: string }[] = []; + parseTestFile(code, { + onTest: ( + _range: Range, + name: string, + _testType: 'test' | 'it' | 'describe' | 'suite', + ) => { + tests.push({ name, type: 'test' }); + }, + }); + + expect(tests.map((t) => t.name)).toEqual([ + // biome-ignore lint/suspicious/noTemplateCurlyInString: use $ here. + 'prefix ${...} middle ${...} suffix', + ]); + }); + + it('should parse files with TSX/JSX content in callbacks', () => { + const code = ` + describe('jsx', () => { + it('renders', () => { + const el =
Hello
; + }); + }); + `; + + const tests: { name: string; type: string }[] = []; + parseTestFile(code, { + onTest: ( + _range: Range, + name: string, + testType: 'test' | 'it' | 'describe' | 'suite', + ) => { + tests.push({ name, type: testType }); + }, + }); + + tests.sort((a, b) => a.name.localeCompare(b.name)); + + expect(tests.map((t) => t.name)).toEqual(['jsx', 'renders']); + expect(tests.map((t) => t.type)).toEqual(['describe', 'it']); + }); + + it('should ignore non-test-like calls', () => { + const code = ` + foo('bar', () => {}); + something.test('not recognized', () => {}); + console.log('not a test'); + `; + + const tests: { name: string; type: string }[] = []; + parseTestFile(code, { + onTest: ( + _range: Range, + name: string, + testType: 'test' | 'it' | 'describe' | 'suite', + ) => { + tests.push({ name, type: testType }); + }, + }); + + expect(tests.length).toBe(0); + }); + + it('should compute reasonable ranges for calls', () => { + const code = `describe("top", () => {\n it('child', () => {})\n});`; + + const results: { name: string; type: string; range: Range }[] = []; + parseTestFile(code, { + onTest: (range: Range, name: string, testType) => { + results.push({ name, type: testType, range }); + }, + }); + + const byName = Object.fromEntries(results.map((r) => [r.name, r])); + expect(byName.top.range.startLine).toBe(0); + expect(byName.child.range.startLine).toBe(1); + }); + + it('should handle quotes and escaped characters', () => { + const code = ` + describe('he said "hi"', () => { + it('emoji 🚀', () => {}); + }); + `; + + const tests: { name: string; type: string }[] = []; + parseTestFile(code, { + onTest: (_range: Range, name: string, testType) => { + tests.push({ name, type: testType }); + }, + }); + + tests.sort((a, b) => a.name.localeCompare(b.name)); + expect(tests.map((t) => t.name)).toEqual(['emoji 🚀', 'he said "hi"']); + }); + + it('should handle comments and whitespace around arguments', () => { + const code = ` + test /* c1 */ ( /* c2 */ 'spaced' /* c3 */ , () => {} ); + it/*a*/(/*b*/"also spaced"/*c*/,() => {}); + `; + + const tests: { name: string; type: string }[] = []; + parseTestFile(code, { + onTest: (_range: Range, name: string, testType) => { + tests.push({ name, type: testType }); + }, + }); + + tests.sort((a, b) => a.name.localeCompare(b.name)); + expect(tests.map((t) => t.name)).toEqual(['also spaced', 'spaced']); + }); + + it('should detect describe without a callback', () => { + const code = ` + describe('name only'); + `; + + const tests: { name: string; type: string }[] = []; + parseTestFile(code, { + onTest: (_range: Range, name: string, testType) => { + tests.push({ name, type: testType }); + }, + }); + + expect(tests).toEqual([{ name: 'name only', type: 'describe' }]); + }); + + it('should find tests inside control flow blocks', () => { + const code = ` + if (true) { + describe('cond', () => { + for (const _ of [1]) { + test('inside loop', () => {}); + } + }); + } + `; + + const tests: { name: string; type: string }[] = []; + parseTestFile(code, { + onTest: (_range: Range, name: string, testType) => { + tests.push({ name, type: testType }); + }, + }); + + tests.sort((a, b) => a.name.localeCompare(b.name)); + expect(tests.map((t) => t.name)).toEqual(['cond', 'inside loop']); + expect(tests.map((t) => t.type)).toEqual(['describe', 'test']); + }); + + it('should detect suite.skip variant', () => { + const code = ` + suite.skip('skipped suite', () => {}); + `; + + const tests: { name: string; type: string }[] = []; + parseTestFile(code, { + onTest: (_range: Range, name: string, testType) => { + tests.push({ name, type: testType }); + }, + }); + + expect(tests).toEqual([{ name: 'skipped suite', type: 'suite' }]); + }); +}); diff --git a/packages/vscode/tsconfig.json b/packages/vscode/tsconfig.json new file mode 100644 index 00000000..e5ae3740 --- /dev/null +++ b/packages/vscode/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "ES2024", + "lib": ["ES2024"], + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "outDir": "dist", + "sourceMap": true, + "noEmit": true, + "strict": true, + "skipLibCheck": true + }, + "include": ["src", "tests"], + "exclude": ["node_modules"] +} diff --git a/packages/vscode/tsconfig.test.json b/packages/vscode/tsconfig.test.json new file mode 100644 index 00000000..86a99ca6 --- /dev/null +++ b/packages/vscode/tsconfig.test.json @@ -0,0 +1,23 @@ +{ + "compilerOptions": { + "module": "commonjs", + "target": "ES2024", + "lib": ["ES2024"], + "allowSyntheticDefaultImports": true, + "esModuleInterop": true, + "outDir": "tests-dist", + "sourceMap": false, + "strict": true, + "rootDir": "tests", + "skipLibCheck": true + }, + "inlcude": ["./tests/suite", "./tests/runTests.ts"], + "exclude": [ + "./rslib.config.ts", + "./rstest.config.ts", + "./src", + "./sample", + "./tests/unit", + "./tests/fixtures" + ] +} diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index bc0b347c..8df9260b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -15,10 +15,10 @@ importers: version: 2.2.4 '@changesets/cli': specifier: ^2.29.7 - version: 2.29.7(@types/node@22.16.5) + version: 2.29.7(@types/node@22.18.6) '@rsdoctor/rspack-plugin': specifier: ^1.2.3 - version: 1.2.3(@rsbuild/core@1.5.7)(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) + version: 1.2.3(@rsbuild/core@1.5.10)(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) '@rslint/core': specifier: ^0.1.13 version: 0.1.13 @@ -33,7 +33,7 @@ importers: version: 11.0.4 '@types/node': specifier: ^22.16.5 - version: 22.16.5 + version: 22.18.6 check-dependency-version-consistency: specifier: ^5.0.1 version: 5.0.1 @@ -54,7 +54,7 @@ importers: version: 0.8.0 nx: specifier: ^21.5.2 - version: 21.5.2 + version: 21.5.3(@swc/core@1.13.5(@swc/helpers@0.5.17)) path-serializer: specifier: 0.5.1 version: 0.5.1 @@ -78,7 +78,7 @@ importers: version: 1.5.0 '@rslib/core': specifier: 0.13.3 - version: 0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.16.5))(typescript@5.9.2) + version: 0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.18.6))(typescript@5.9.2) '@rstest/core': specifier: workspace:* version: link:../packages/core @@ -96,7 +96,7 @@ importers: version: 6.5.1 memfs: specifier: ^4.42.0 - version: 4.42.0 + version: 4.43.0 pathe: specifier: ^2.0.3 version: 2.0.3 @@ -296,7 +296,7 @@ importers: devDependencies: '@rsbuild/plugin-react': specifier: ^1.4.0 - version: 1.4.0(@rsbuild/core@1.5.7) + version: 1.4.0(@rsbuild/core@1.5.10) '@types/react': specifier: ^19.1.13 version: 19.1.13 @@ -330,7 +330,7 @@ importers: version: 1.0.6(@rsbuild/core@1.5.0) '@rsbuild/plugin-vue': specifier: ^1.1.2 - version: 1.1.2(@rsbuild/core@1.5.0)(vue@3.5.21(typescript@5.9.2)) + version: 1.1.2(@rsbuild/core@1.5.0)(@swc/core@1.13.5(@swc/helpers@0.5.17))(vue@3.5.21(typescript@5.9.2)) '@rsbuild/plugin-vue-jsx': specifier: ^1.1.1 version: 1.1.1(@babel/core@7.28.3)(@rsbuild/core@1.5.0) @@ -363,7 +363,7 @@ importers: version: link:../../packages/coverage-istanbul '@types/node': specifier: ^22.16.5 - version: 22.16.5 + version: 22.18.6 typescript: specifier: ^5.9.2 version: 5.9.2 @@ -425,10 +425,10 @@ importers: version: 0.3.31 '@microsoft/api-extractor': specifier: ^7.52.13 - version: 7.52.13(@types/node@22.16.5) + version: 7.52.13(@types/node@22.18.6) '@rslib/core': specifier: 0.13.3 - version: 0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.16.5))(typescript@5.9.2) + version: 0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.18.6))(typescript@5.9.2) '@rstest/tsconfig': specifier: workspace:* version: link:../../scripts/tsconfig @@ -482,7 +482,7 @@ importers: version: 26.1.0 license-webpack-plugin: specifier: ^4.0.2 - version: 4.0.2(webpack@5.101.2) + version: 4.0.2(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) pathe: specifier: ^2.0.3 version: 2.0.3 @@ -528,7 +528,7 @@ importers: devDependencies: '@rslib/core': specifier: 0.13.3 - version: 0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.16.5))(typescript@5.9.2) + version: 0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.18.6))(typescript@5.9.2) '@rstest/core': specifier: workspace:* version: link:../core @@ -546,27 +546,81 @@ importers: version: 3.0.4 '@types/node': specifier: ^22.16.5 - version: 22.16.5 + version: 22.18.6 typescript: specifier: ^5.9.2 version: 5.9.2 + packages/vscode: + devDependencies: + '@rsbuild/core': + specifier: 1.5.0 + version: 1.5.0 + '@rslib/core': + specifier: 0.12.2 + version: 0.12.2(@microsoft/api-extractor@7.52.13(@types/node@22.13.8))(typescript@5.9.2) + '@rstest/core': + specifier: workspace:* + version: link:../core + '@swc/core': + specifier: ^1.13.5 + version: 1.13.5(@swc/helpers@0.5.17) + '@types/glob': + specifier: ^7.1.1 + version: 7.2.0 + '@types/mocha': + specifier: ^10.0.10 + version: 10.0.10 + '@types/node': + specifier: ^22.13.8 + version: 22.13.8 + '@types/vscode': + specifier: ^1.100.0 + version: 1.103.0 + '@types/ws': + specifier: ^8.18.1 + version: 8.18.1 + '@vscode/test-cli': + specifier: ^0.0.11 + version: 0.0.11 + '@vscode/test-electron': + specifier: ^2.5.2 + version: 2.5.2 + '@vscode/vsce': + specifier: 3.6.0 + version: 3.6.0 + get-port: + specifier: ^7.1.0 + version: 7.1.0 + glob: + specifier: ^7.1.4 + version: 7.2.3 + mocha: + specifier: ^11.7.2 + version: 11.7.2 + typescript: + specifier: ^5.9.2 + version: 5.9.2 + ws: + specifier: ^8.18.3 + version: 8.18.3 + scripts/tsconfig: {} website: devDependencies: '@rsbuild/plugin-sass': specifier: ^1.4.0 - version: 1.4.0(@rsbuild/core@1.5.7) + version: 1.4.0(@rsbuild/core@1.5.10) '@rspress/core': specifier: ^2.0.0-beta.32 - version: 2.0.0-beta.32(@types/react@19.1.13) + version: 2.0.0-beta.33(@types/react@19.1.13) '@rspress/plugin-algolia': specifier: 2.0.0-beta.32 - version: 2.0.0-beta.32(@algolia/client-search@5.37.0)(@rspress/core@2.0.0-beta.32(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) + version: 2.0.0-beta.32(@algolia/client-search@5.37.0)(@rspress/core@2.0.0-beta.33(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) '@rspress/plugin-llms': specifier: 2.0.0-beta.32 - version: 2.0.0-beta.32(@rspress/core@2.0.0-beta.32(@types/react@19.1.13)) + version: 2.0.0-beta.32(@rspress/core@2.0.0-beta.33(@types/react@19.1.13)) '@rstack-dev/doc-ui': specifier: 1.11.0 version: 1.11.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1) @@ -575,7 +629,7 @@ importers: version: link:../scripts/tsconfig '@types/node': specifier: ^22.16.5 - version: 22.16.5 + version: 22.18.6 '@types/react': specifier: ^19.1.13 version: 19.1.13 @@ -590,13 +644,13 @@ importers: version: 19.1.1(react@19.1.1) rsbuild-plugin-google-analytics: specifier: ^1.0.4 - version: 1.0.4(@rsbuild/core@1.5.7) + version: 1.0.4(@rsbuild/core@1.5.10) rsbuild-plugin-open-graph: specifier: ^1.1.0 - version: 1.1.0(@rsbuild/core@1.5.7) + version: 1.1.0(@rsbuild/core@1.5.10) rspress-plugin-font-open-sans: specifier: ^1.0.3 - version: 1.0.3(@rspress/core@2.0.0-beta.32(@types/react@19.1.13)) + version: 1.0.3(@rspress/core@2.0.0-beta.33(@types/react@19.1.13)) rspress-plugin-sitemap: specifier: ^1.2.1 version: 1.2.1 @@ -750,6 +804,56 @@ packages: resolution: {integrity: sha512-Hb4o6h1Pf6yRUAX07DR4JVY7dmQw+RVQMW5/m55GoiAT/VRoKCWBtIUPPOnqDVhbx1Cjfil9b6EDrgJsUAujEQ==} engines: {node: '>= 10'} + '@azu/format-text@1.0.2': + resolution: {integrity: sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==} + + '@azu/style-format@1.0.1': + resolution: {integrity: sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==} + + '@azure/abort-controller@2.1.2': + resolution: {integrity: sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==} + engines: {node: '>=18.0.0'} + + '@azure/core-auth@1.10.0': + resolution: {integrity: sha512-88Djs5vBvGbHQHf5ZZcaoNHo6Y8BKZkt3cw2iuJIQzLEgH4Ox6Tm4hjFhbqOxyYsgIG/eJbFEHpxRIfEEWv5Ow==} + engines: {node: '>=20.0.0'} + + '@azure/core-client@1.10.0': + resolution: {integrity: sha512-O4aP3CLFNodg8eTHXECaH3B3CjicfzkxVtnrfLkOq0XNP7TIECGfHpK/C6vADZkWP75wzmdBnsIA8ksuJMk18g==} + engines: {node: '>=20.0.0'} + + '@azure/core-rest-pipeline@1.22.0': + resolution: {integrity: sha512-OKHmb3/Kpm06HypvB3g6Q3zJuvyXcpxDpCS1PnU8OV6AJgSFaee/covXBcPbWc6XDDxtEPlbi3EMQ6nUiPaQtw==} + engines: {node: '>=20.0.0'} + + '@azure/core-tracing@1.3.0': + resolution: {integrity: sha512-+XvmZLLWPe67WXNZo9Oc9CrPj/Tm8QnHR92fFAFdnbzwNdCH1h+7UdpaQgRSBsMY+oW1kHXNUZQLdZ1gHX3ROw==} + engines: {node: '>=20.0.0'} + + '@azure/core-util@1.13.0': + resolution: {integrity: sha512-o0psW8QWQ58fq3i24Q1K2XfS/jYTxr7O1HRcyUE9bV9NttLU+kYOH82Ixj8DGlMTOWgxm1Sss2QAfKK5UkSPxw==} + engines: {node: '>=20.0.0'} + + '@azure/identity@4.12.0': + resolution: {integrity: sha512-6vuh2R3Cte6SD6azNalLCjIDoryGdcvDVEV7IDRPtm5lHX5ffkDlIalaoOp5YJU08e4ipjJENel20kSMDLAcug==} + engines: {node: '>=20.0.0'} + + '@azure/logger@1.3.0': + resolution: {integrity: sha512-fCqPIfOcLE+CGqGPd66c8bZpwAji98tZ4JI9i/mlTNTlsIWslCfpg48s/ypyLxZTump5sypjrKn2/kY7q8oAbA==} + engines: {node: '>=20.0.0'} + + '@azure/msal-browser@4.22.1': + resolution: {integrity: sha512-/I76rBJpt5ZVfFXk+GkKxD4w1DZEbVpNn0aQjvRgnDnTYo3L/f8Oeo3R1O9eL/ccg5j1537iRLr7UwVhwnHtyg==} + engines: {node: '>=0.8.0'} + + '@azure/msal-common@15.12.0': + resolution: {integrity: sha512-4ucXbjVw8KJ5QBgnGJUeA07c8iznwlk5ioHIhI4ASXcXgcf2yRFhWzYOyWg/cI49LC9ekpFJeQtO3zjDTbl6TQ==} + engines: {node: '>=0.8.0'} + + '@azure/msal-node@3.7.3': + resolution: {integrity: sha512-MoJxkKM/YpChfq4g2o36tElyzNUMG8mfD6u8NbuaPAsqfGpaw249khAcJYNoIOigUzRw45OjXCOrexE6ImdUxg==} + engines: {node: '>=16'} + '@babel/code-frame@7.26.2': resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} @@ -905,6 +1009,9 @@ packages: resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==} engines: {node: '>=6.9.0'} + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@biomejs/biome@2.2.4': resolution: {integrity: sha512-TBHU5bUy/Ok6m8c0y3pZiuO/BZoY/OcGxoLlrfQof5s8ISVwbVBdFINPQZyFfKwil8XibYWb7JMwnT8wT4WVPg==} engines: {node: '>=14.21.3'} @@ -1067,12 +1174,21 @@ packages: '@emnapi/core@1.4.5': resolution: {integrity: sha512-XsLw1dEOpkSX/WucdqUhPWP7hDxSvZiY+fsUC14h+FtQ2Ifni4znbBt8punRX+Uj2JG/uDb8nEHVKvrVlvdZ5Q==} + '@emnapi/core@1.5.0': + resolution: {integrity: sha512-sbP8GzB1WDzacS8fgNPpHlp6C9VZe+SJP3F90W9rLemaQj2PzIuTEl1qDOYQf58YIpyjViI24y9aPWCjEzY2cg==} + '@emnapi/runtime@1.4.5': resolution: {integrity: sha512-++LApOtY0pEEz1zrd9vy1/zXVaVJJ/EbAF3u0fXIzPJEDtnITsBGbbK0EkM72amhl/R5b+5xx0Y/QhcVOpuulg==} + '@emnapi/runtime@1.5.0': + resolution: {integrity: sha512-97/BJ3iXHww3djw6hYIfErCZFee7qCtrneuLa20UXFCOTCfBM2cvQHjWJ2EG0s0MtdNwInarqCTz35i4wWXHsQ==} + '@emnapi/wasi-threads@1.0.4': resolution: {integrity: sha512-PJR+bOmMOPH8AtcTGAyYNiuJ3/Fcoj2XN/gBEWzDIKh254XO+mM9XoXHk5GNEhodxeMznbg7BlRojVbKN+gC6g==} + '@emnapi/wasi-threads@1.1.0': + resolution: {integrity: sha512-WI0DdZ8xFSbgMjR1sFsKABJ/C5OnRrjT06JXbZKexJGrDuPTzZdDYfFlsgcCXCyf+suG5QU2e/y1Wo2V/OapLQ==} + '@epic-web/invariant@1.0.0': resolution: {integrity: sha512-lrTPqgvfFQtR/eY/qkIzp98OGdNJu0m5ji3q/nJI8v3SXkRKEnWiOxMmbvcSoAIzv/cGiuvRy57k4suKQSAdwA==} @@ -1097,6 +1213,10 @@ packages: resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} + '@istanbuljs/schema@0.1.3': + resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} + engines: {node: '>=8'} + '@jest/diff-sequences@30.0.1': resolution: {integrity: sha512-n5H8QLDJ47QqbCNn5SuFjCRDrOLEZ0h8vAHCK5RL9Ls7Xa8AQLa/YxAc9UjFqoEDM48muwtBGjtMY5cr0PLDCw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -1135,6 +1255,9 @@ packages: '@jridgewell/source-map@0.3.11': resolution: {integrity: sha512-ZMp1V8ZFcPG5dIWnQLr3NSI1MiCU7UETdS/A0G8V/XWHvJv3ZsFqutJn1Y5RPmAPX6F3BiE397OqveU/9NCuIA==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/sourcemap-codec@1.5.5': resolution: {integrity: sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==} @@ -1186,11 +1309,6 @@ packages: '@mdx-js/mdx@3.1.1': resolution: {integrity: sha512-f6ZO2ifpwAQIpzGWaBQT2TXxPv6z3RBzQKpVftEWN78Vl/YweF1uwussDx8ECAXVtr3Rs89fKyG9YlzUs9DyGQ==} - '@mdx-js/react@2.3.0': - resolution: {integrity: sha512-zQH//gdOmuu7nt2oJR29vFhDv88oGPmVw6BggmrHeMI+xgEkp1B2dX9/bMBSYtK0dyLX/aOmesKS09g222K1/g==} - peerDependencies: - react: '>=16' - '@mdx-js/react@3.1.1': resolution: {integrity: sha512-f++rKLQgUVYDAtECQ6fn/is15GkEH9+nZPM3MS0RcxVqoTfawHvDlSCH7JbMhAM6uJ32v3eXLvLmLvjGu7PTQw==} peerDependencies: @@ -1234,6 +1352,9 @@ packages: '@napi-rs/wasm-runtime@1.0.1': resolution: {integrity: sha512-KVlQ/jgywZpixGCKMNwxStmmbYEMyokZpCf2YuIChhfJA2uqfAKNEM8INz7zzTo55iEXfBhIIs3VqYyqzDLj8g==} + '@napi-rs/wasm-runtime@1.0.5': + resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==} + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1246,53 +1367,53 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@nx/nx-darwin-arm64@21.5.2': - resolution: {integrity: sha512-PrfZbV2blRHoWLor+xDVwPY/dk46kbsmuTXCZRYlNAwko521Y9dCAJT0UOROic3zoUasQ+TwqsQextIcKCotIA==} + '@nx/nx-darwin-arm64@21.5.3': + resolution: {integrity: sha512-XKOaBpkBzPd5l9in1ax7KQrAiqm4hi46pzQ/qq4Jo20/RKTpc2ZZSFujjuI8wF75oZ6+iV+cvuxSbwbuX6AxQQ==} cpu: [arm64] os: [darwin] - '@nx/nx-darwin-x64@21.5.2': - resolution: {integrity: sha512-YaLY2Cqbjrl+pDddHV7GFtokn81GLvoqg+i9k0Eiid8B0dDLBZpJ3VQKr4RkTzxBX38UuHbJUwrZc8L9z8vqEw==} + '@nx/nx-darwin-x64@21.5.3': + resolution: {integrity: sha512-auGY/gvB5B2In25gozlNV6lb4so14OIpIh/dPgXXrHL5YTuky2i6NFiTOq2D1RWtv5kkoK73rQXDbffDXUS6SA==} cpu: [x64] os: [darwin] - '@nx/nx-freebsd-x64@21.5.2': - resolution: {integrity: sha512-2z/Wd42/KHFyT0zRVxWHlaRBQz12Fd1A0FCGJzuWI8G2meh9tYt4MN96gQ4q/rLQ0fmfFEEECq6pmOfCi8t9Mg==} + '@nx/nx-freebsd-x64@21.5.3': + resolution: {integrity: sha512-IsPCC8CpIRd7dzcRQ+j1zAEZObKVkSLQ3GI7rqybEf0/vWZz6T7UbxGHNtFB7AlaecCbHshZ3Mg5mPVXYSR+iA==} cpu: [x64] os: [freebsd] - '@nx/nx-linux-arm-gnueabihf@21.5.2': - resolution: {integrity: sha512-lY2O1py8x+l39XAFFuplKlzouPC9K/gERYEB/b5jHGf7PGfNj0BX2MDmUztgTty6kKUnkRele39aSoQqWok0gA==} + '@nx/nx-linux-arm-gnueabihf@21.5.3': + resolution: {integrity: sha512-IDW5wy2x7KNFK5u8v94KarJ0h4Fk49pVMKcAI6imeQOJnc0lh0TwID4cqVTCg73BLJXbIV3+Ok01jDKrDsTL/w==} cpu: [arm] os: [linux] - '@nx/nx-linux-arm64-gnu@21.5.2': - resolution: {integrity: sha512-gcpkXXPpWaf8wB0FZUaKmk8Jdv+QMHLiOcQuuXYi1X0vbgotVTl/y+dccwG1EZml6V5JIRGtg2YDM61a7Olp1Q==} + '@nx/nx-linux-arm64-gnu@21.5.3': + resolution: {integrity: sha512-GQF/xjGeqt4tYWf9jT1D0GRPrcAjajTB1QpSavUaiT1jDkByuN11WvuWeTfBdPJpYWFxvH887+r+uMEg8zRE4A==} cpu: [arm64] os: [linux] - '@nx/nx-linux-arm64-musl@21.5.2': - resolution: {integrity: sha512-oCSUwT0hORgFJWIGjwl6x4/2mVusw+3YAcSrvDePAXadjPSEMLZlJEE+4HExzqLFFBTxc+ucvyOIk08P4BtNJg==} + '@nx/nx-linux-arm64-musl@21.5.3': + resolution: {integrity: sha512-C5j2pzfe0zoAJelHXzPdTGeU19VvvHVaoesiKPeH9EvJwLLb9FoeIn+6//x3jDUNUqIHdn4+63kMA6mdBQSpMQ==} cpu: [arm64] os: [linux] - '@nx/nx-linux-x64-gnu@21.5.2': - resolution: {integrity: sha512-rgJTQk0iaidxEIMOuRQJS36Sk4+qcpJP0uwymvgyoTpZyBdkX38NHH3D+E6sudPSFWsiVxJpkCzYE4ScSKF8Ew==} + '@nx/nx-linux-x64-gnu@21.5.3': + resolution: {integrity: sha512-HI+tdkvzFcnJQpU9m1FjvlxW7ZsJeF4os8OG4HSLRTQfFT8HCXXzp6b9sojTr+4Nfvp5r3T/J/UJM9tOJXW9Aw==} cpu: [x64] os: [linux] - '@nx/nx-linux-x64-musl@21.5.2': - resolution: {integrity: sha512-KeS36526VruYO9HzhFGqhE5tbps7e94DV0b4j5wfPr7V51EfPzvjAiMWllsQDARv67wdbQ80c0Wg516XTlekgA==} + '@nx/nx-linux-x64-musl@21.5.3': + resolution: {integrity: sha512-ntlBqcO9wVajUjYwzBU5ru2iBORttO4nurKvjnpBbyCF1mOjSJ3uFcFMzktbp2cxpRE5JRAadGq9/pZisez1AQ==} cpu: [x64] os: [linux] - '@nx/nx-win32-arm64-msvc@21.5.2': - resolution: {integrity: sha512-jlRTycYKOiSqc0fcqvabOH/HZX9BOG0S8EGsLmqEr2OkJLZc25ByD1n22P486R2n+m8GQwL6pX+L1LPpOPmz0A==} + '@nx/nx-win32-arm64-msvc@21.5.3': + resolution: {integrity: sha512-VgX1VnKDRgWcjIMJ0V3zZ6OPuYkvA7rzgn8wbZWyBh2/1GFFffypJJsGeXRPCZBFHjF3UFYcwjzCMoStZ35b5g==} cpu: [arm64] os: [win32] - '@nx/nx-win32-x64-msvc@21.5.2': - resolution: {integrity: sha512-Ur8GPdz52kLS5uE9IQf0wBtGyvQm4Y3M1ZDjRkR+oGf26aVGNTK6C0+kMJPuggR4Z6lurmHYA34ViGi2hHPPpA==} + '@nx/nx-win32-x64-msvc@21.5.3': + resolution: {integrity: sha512-bEQxvsglGInSi51HJUJ7X1lqekzn5xAOddY4tpmOzBXVadx4fuMT8X/PLDLorAAShNZ36g/7sYbtWaBuJNz3tQ==} cpu: [x64] os: [win32] @@ -1401,8 +1522,13 @@ packages: engines: {node: '>=18.12.0'} hasBin: true - '@rsbuild/core@1.5.7': - resolution: {integrity: sha512-1/yyJJfZo4hqMsL3WQQmMDYFp0L/znHqjHrYE6NKsiKhkBEwEwSVMk1M5QoRu2EcRL1acW5AJf7WJyKFfPZ//Q==} + '@rsbuild/core@1.5.0-beta.4': + resolution: {integrity: sha512-h1jqpjZunalsdxTcJCbY8DovLu6F4MQgsYdZyxDjUp0xuggQayi1tpcE6MhLs3WWa077g+LZ2Am4gKt/pl/W9Q==} + engines: {node: '>=18.12.0'} + hasBin: true + + '@rsbuild/core@1.5.10': + resolution: {integrity: sha512-8FDZhtw18XRfCDEZjzt6Xi9ZR+oYpIj7d1AfGX+BVDzLpDCoAHJ/4dWy0ryl8ADssZeezY9JPqKWfTfVJEpc9Q==} engines: {node: '>=18.12.0'} hasBin: true @@ -1476,6 +1602,19 @@ packages: '@rsdoctor/utils@1.2.3': resolution: {integrity: sha512-HawWrcqXeqdhj4dKhdjJg4BXvstcQauYSRx0cnYH78f7z9PW60Smr6vYpByXC87rK3JKpa6CNiZi+qhI5yTAog==} + '@rslib/core@0.12.2': + resolution: {integrity: sha512-5DPVxmzzyoQlLqSt8Y/8kbYNtbJ0AEVUXd1hDFQ0Iq5Eb5XA4363PDeLdfeKJ1h93YqT7M9WZ3Cyhvosx1EimQ==} + engines: {node: '>=18.12.0'} + hasBin: true + peerDependencies: + '@microsoft/api-extractor': ^7 + typescript: ^5 + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + typescript: + optional: true + '@rslib/core@0.13.3': resolution: {integrity: sha512-W9U3KBC3VZbpJSfceRi6UpHFqbwuNGXjrwCuAErxS1YHi1fM0K15xIjQDNMsYoWsAQg0kazFZ5HHAxYUuEkiyA==} engines: {node: '>=18.12.0'} @@ -1528,8 +1667,13 @@ packages: cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-arm64@1.5.4': - resolution: {integrity: sha512-qD+n4D8KOOSoWdngK87iXl6lqbx1J63f6/xZFLPVIstzxIUbNyo9V9tpJYsoT3gYpnLkPVqA+KwQI0ozgYEXvw==} + '@rspack/binding-darwin-arm64@1.5.0-beta.1': + resolution: {integrity: sha512-aXSbz9Bo480xNDK6v64SZ19I/bmMuxaOuex6V9q0S+v3qx/ZsUWL+5aUd71scq7EfAb3KkvQFsYACpt5PMZ9DQ==} + cpu: [arm64] + os: [darwin] + + '@rspack/binding-darwin-arm64@1.5.5': + resolution: {integrity: sha512-Kg3ywEZHLX+aROfTQ5tMOv+Ud+8b4jk8ruUgsi0W8oBkEkR5xBdhFa9vcf6pzy+gfoLCnEI68U9i8ttm+G0csA==} cpu: [arm64] os: [darwin] @@ -1538,8 +1682,13 @@ packages: cpu: [x64] os: [darwin] - '@rspack/binding-darwin-x64@1.5.4': - resolution: {integrity: sha512-g75qkrLLa28kVp7pkWAjUADwr+0GumEF134VWHuL+TAm7VCw4IXRKnZhquE8K5kcqRpLcLX4guRqZzK9OEu/hg==} + '@rspack/binding-darwin-x64@1.5.0-beta.1': + resolution: {integrity: sha512-addeCT0bXtfOfvJZdVuHWBl20Cd8RmweOX03OiEH4AmQc9EgUEP/oCGpOmakBXxUCl3x/RnlrXx2nD1uDyuyLA==} + cpu: [x64] + os: [darwin] + + '@rspack/binding-darwin-x64@1.5.5': + resolution: {integrity: sha512-uoGTYnlYW8m47yiDCKvXOehhAOH12wlePJq4sbUbBoHmG07vbDw7fUqnvy2k8319NTVEpMJWGoKyisgI09/uMQ==} cpu: [x64] os: [darwin] @@ -1548,8 +1697,13 @@ packages: cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-gnu@1.5.4': - resolution: {integrity: sha512-O3zSTz/dy1EJHd7YS8zzmAG2zxewEZJi7QlYiU+YhFuqjP2ab6ZFWLHkglvrSy4aHyC8fx9OkSjioYtHUcCSdQ==} + '@rspack/binding-linux-arm64-gnu@1.5.0-beta.1': + resolution: {integrity: sha512-fYgOfSsA0J0rUA40ZEexrMRKyIVAUo4m0KShTm6yVaAzQHWVZ0xjjcoLFNxCVE7EvAPI7wl9fDOyr7Y8EylVfQ==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-arm64-gnu@1.5.5': + resolution: {integrity: sha512-KgVN3TeUJ3iNwwOX3JGY4arvoLHX94eItJ4TeOSyetRiSJUrQI0evP16i5kIh+n+p7mVnXmfUS944Gl+uNsJmg==} cpu: [arm64] os: [linux] @@ -1558,8 +1712,13 @@ packages: cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl@1.5.4': - resolution: {integrity: sha512-ki84vbRY1gbf1T3BHiKAdi3m0hQFmqiAIYvFuLGA9Vop1R+W2C3Mzh8Q5YL6TnWOP0eiwizuigztz4/07fPf6Q==} + '@rspack/binding-linux-arm64-musl@1.5.0-beta.1': + resolution: {integrity: sha512-wWlOzsoJU2HJyPxoCDScW4zt3+5WO6NI8B7jSmhVA9dfmvCYUKktt/YZpskcgMsvCgtzXTE62wDc+VTQ5ucp9A==} + cpu: [arm64] + os: [linux] + + '@rspack/binding-linux-arm64-musl@1.5.5': + resolution: {integrity: sha512-1gKthlCQinXtWar6Hl9Il6BQ/NgYBH0NVuUsjjf85ejD/cTPQENKyIpGvVa1rSIHSfnG/XujUbruHAeY9mEHCA==} cpu: [arm64] os: [linux] @@ -1568,8 +1727,13 @@ packages: cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-gnu@1.5.4': - resolution: {integrity: sha512-SJVQSgR1JqDEnURI79SRcn/gcdG+yFb2mLUYV/TSPUTxMIlu44p5+fnOY6+6qMtjQhO6J4C2+UyV00U/yjlikA==} + '@rspack/binding-linux-x64-gnu@1.5.0-beta.1': + resolution: {integrity: sha512-OlgQIQLDLDDXvbUYBEfZmofO3uTDi0rGfIr58PXz/wTF87KdwqlU0HyjIeaeDUaQlV+lNXNysuCwvI0hl/o2tw==} + cpu: [x64] + os: [linux] + + '@rspack/binding-linux-x64-gnu@1.5.5': + resolution: {integrity: sha512-haPFg4M9GwpSI5g9BQhKUNdzCKDvFexIUkLiAHBjFU9iWQTEcI9VfYPixestOIwzUv7E34rHM+jAsmRGWdgmXw==} cpu: [x64] os: [linux] @@ -1578,8 +1742,13 @@ packages: cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@1.5.4': - resolution: {integrity: sha512-UL1xw3yLsFH6UD/ubXXbRaDRNl+qI22QgugKYuqmpDGfOcVlv4fGpf3faPwYJasqPjhDWvcoyd8OqI+ftWKWEA==} + '@rspack/binding-linux-x64-musl@1.5.0-beta.1': + resolution: {integrity: sha512-LkQSyfyf5Jy0UGD0tvm2Gz+0VjboawtRrYd+qYHE0Pm4h7tTJWyqnh02LRTROxOl3GrssC1VGn6J8XYTxOAWug==} + cpu: [x64] + os: [linux] + + '@rspack/binding-linux-x64-musl@1.5.5': + resolution: {integrity: sha512-oUny56JEkCZvIu4n8/P7IPLPNtJnL89EDhxHINH87XLBY3OOgo8JHELR11Zj9SFWiGNsRcLqi+Q78tWa0ligBQ==} cpu: [x64] os: [linux] @@ -1587,8 +1756,12 @@ packages: resolution: {integrity: sha512-8rVpl6xfaAFJgo1wCd+emksfl+/8nlehrtkmjY9bj79Ou+kp07L9e1B+UU0jfs8e7aLPntQuF68kzLHwYLzWIQ==} cpu: [wasm32] - '@rspack/binding-wasm32-wasi@1.5.4': - resolution: {integrity: sha512-VPGhik1M87SZQzmX2sRvXrO6KgycSbmJ/bLqVuXHYGjsLkYqw4auKCJrkZcKa1GVsSvpVNC3FlTUk2QxjpmNSA==} + '@rspack/binding-wasm32-wasi@1.5.0-beta.1': + resolution: {integrity: sha512-ysnuVnqC9byoYfoAi/TsV0U5ZUxU0snnVPa/SvQEO6ew3J2GaNDq1vS1zWo0SOA4eLmwkop0/UcH8n3VXOy7NA==} + cpu: [wasm32] + + '@rspack/binding-wasm32-wasi@1.5.5': + resolution: {integrity: sha512-tRgxBgIXaBKBH/0KlwvyqbIMqQrg8jKOyFOEQseEE7Oqs2M9KkJ7Vp5QN11u3NvZ9nz5GbZxmVGBMkdj9Gth1w==} cpu: [wasm32] '@rspack/binding-win32-arm64-msvc@1.5.0': @@ -1596,8 +1769,13 @@ packages: cpu: [arm64] os: [win32] - '@rspack/binding-win32-arm64-msvc@1.5.4': - resolution: {integrity: sha512-YxhK8dTv/6ff//C5Djm87TkiePuvGRoxLgsHgwR7C0rnA8lS5gLNwrNY9FjAY1x6WamnGGirFK97rigaeTDn+g==} + '@rspack/binding-win32-arm64-msvc@1.5.0-beta.1': + resolution: {integrity: sha512-vcMXybMchQomBODyi6aIMCur8/oQktw+iVv0dH3hiiWy0v2g8xS9VLMjWXfGZAhonhRe7YWTP12dxCPbWmQyZw==} + cpu: [arm64] + os: [win32] + + '@rspack/binding-win32-arm64-msvc@1.5.5': + resolution: {integrity: sha512-wGWd2yluoFdQgtkIbny6FoHnzahTk+o9RzrptjeS1u/NV1lKrWzmWhwZojMGOUqPiaukZKaziOEo7gpRn2XbEQ==} cpu: [arm64] os: [win32] @@ -1606,8 +1784,13 @@ packages: cpu: [ia32] os: [win32] - '@rspack/binding-win32-ia32-msvc@1.5.4': - resolution: {integrity: sha512-SU4EyAo1BI1zV/sSDF2cqoN+Qq6iIHLwtq0RJI5WQ4Yjn/mhhRFxNoerPCJUpPiiCxvG/IrpGzGi90MwFnMtNQ==} + '@rspack/binding-win32-ia32-msvc@1.5.0-beta.1': + resolution: {integrity: sha512-fCj904xjc5iKOdUS0VLUE/LbAQZWlub/TF0ZKhzq2UK8WWwrfhA5U8ZHximU0A0LVDoMVZCM5M12rO12P0uHKw==} + cpu: [ia32] + os: [win32] + + '@rspack/binding-win32-ia32-msvc@1.5.5': + resolution: {integrity: sha512-Ikml8AQkzjPCG24vTO4pG2bpJ8vp93jVEgo9X9uYjO2vQbIp5QSOmeZOTM7tXCf8AfTfHEF/yAdE/pR/+tXXGQ==} cpu: [ia32] os: [win32] @@ -1616,16 +1799,24 @@ packages: cpu: [x64] os: [win32] - '@rspack/binding-win32-x64-msvc@1.5.4': - resolution: {integrity: sha512-xEgOCnD2FCUcxRgg3X5etq81vvf8rWwvPASfrG234diSduvU6zRiuiyYFMLTMDwQNEzZEFGHp7wIZNCKHudbng==} + '@rspack/binding-win32-x64-msvc@1.5.0-beta.1': + resolution: {integrity: sha512-iWCoFMwP2aUea1mIp2+mTE7IKj6wp9hxMuZgOcEGWQidE7pUss5/Zp3wrOSWnnyovIeQLmK9wsQEA/W3i3MiAQ==} + cpu: [x64] + os: [win32] + + '@rspack/binding-win32-x64-msvc@1.5.5': + resolution: {integrity: sha512-m2059ms0i/GIQGWTlZ5GI6SWpuMFAPMsWlhXLk2LZRIydhi+N/YPkmc33lFRTlDA3QpKDCvowvCvIIA7g6WSlg==} cpu: [x64] os: [win32] '@rspack/binding@1.5.0': resolution: {integrity: sha512-UGXQmwEu2gdO+tnGv2q4rOWJdWioy6dlLXeZOLYAZVh3mrfKJhZWtDEygX9hCdE5thWNRTlEvx30QQchJAszIQ==} - '@rspack/binding@1.5.4': - resolution: {integrity: sha512-HtLF5uxbf77hDarB/Wl26XgaTyWkhMogDPUOC1mLU+YPke1vYem8p8yr+McUkRtbhYoqtFMcVcT3S8jKJPP3+g==} + '@rspack/binding@1.5.0-beta.1': + resolution: {integrity: sha512-qZ+cxvsNvXBOPX0NEP+KfxQlJI7TDZR2XLS8Jl+zHl2kgulEOBWsBa7Q1Dcw73YQgz2owxP3OWl3f8LWXnnC1Q==} + + '@rspack/binding@1.5.5': + resolution: {integrity: sha512-JkB943uBU0lABnKG/jdO+gg3/eeO9CEQMR/1dL6jSU9GTxaNf3XIVc05RhRC7qoVsiXuhSMMFxWyV0hyHxp2bA==} '@rspack/core@1.5.0': resolution: {integrity: sha512-eEtiKV+CUcAtnt1K+eiHDzmBXQcNM8CfCXOzr0+gHGp4w4Zks2B8RF36sYD03MM2bg8VRXXsf0MicQ8FvRMCOg==} @@ -1636,8 +1827,17 @@ packages: '@swc/helpers': optional: true - '@rspack/core@1.5.4': - resolution: {integrity: sha512-s/bVG+KRZjIpPP2f4TOQkJ/D+rql7HAV0MFEWoqoyeNnln/p6I28RYbw5zYF+Qg4J0swR8Qk2pbn7qlIdGusLQ==} + '@rspack/core@1.5.0-beta.1': + resolution: {integrity: sha512-o3yQreNKldm0k96wPMpXBI9p0B03LpeK3XyV4vhk24RfLIa2p6C2LPF4xn6U2M28CFQkSbeu1vwlMHnfW4xHNg==} + engines: {node: '>=18.12.0'} + peerDependencies: + '@swc/helpers': '>=0.5.1' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@rspack/core@1.5.5': + resolution: {integrity: sha512-AOIuMktK6X/xHAjJ/0QJ2kbSkILXj641GCPE+EOfWO27ODA8fHPArKbyz5AVGVePV3aUfEo2VFcsNzP67VBEPA==} engines: {node: '>=18.12.0'} peerDependencies: '@swc/helpers': '>=0.5.1' @@ -1658,8 +1858,8 @@ packages: webpack-hot-middleware: optional: true - '@rspress/core@2.0.0-beta.32': - resolution: {integrity: sha512-gShXFSpULNEFjSz+reOWKauUlCBi74PR3R/ej6NpiLnIY5iz7FJuOYuDOajzK2rWxkDkFo3Jqh1tZn5jCrtpJw==} + '@rspress/core@2.0.0-beta.33': + resolution: {integrity: sha512-SIvnXK94DvXyYZspfe7l+dMPn99RBPRPYWeii/IBaXdiogTabuULaLB7NlGZ28UUxkqdso6XT5K5O+vduK3LZA==} engines: {node: '>=18.0.0'} hasBin: true @@ -1727,15 +1927,15 @@ packages: peerDependencies: '@rspress/core': ^2.0.0-beta.32 - '@rspress/runtime@2.0.0-beta.32': - resolution: {integrity: sha512-gIxn8JxiZRtEfLsoJoJlfvpOxQBVctDMJfEHc0RMYcqz7YTmlosHdmJi9NICykTLeUP/PaubPuvGdBMPSymGtg==} + '@rspress/runtime@2.0.0-beta.33': + resolution: {integrity: sha512-90A70W+5dq1M7V0KVe1vKUNOz9tuBpx8PZO+F06ItzqJ4Yl8Y1JxqGgrZkEDLyI4gTNoskDPvMWT9b+ZVuGokA==} engines: {node: '>=18.0.0'} - '@rspress/shared@2.0.0-beta.32': - resolution: {integrity: sha512-OhiiIWBtFe29MYh71i9HG0QlUyiAc/LyoGqHOCy1EJfX6hLljydc04WAifz0PcaCbTRh96yiWVPE3ieOqS35Uw==} + '@rspress/shared@2.0.0-beta.33': + resolution: {integrity: sha512-Dy+r+y/9Q3hV7CAuxc/XibxEKKC/cKGv6a3RTdXKp6VxcA4KY0hB5Wi1CT1CdXJpgsTeEgJW1VpmXRiSiCdQhA==} - '@rspress/theme-default@2.0.0-beta.32': - resolution: {integrity: sha512-+8RDQJDzkRrSfbAB5ORxwVZoS55rp/pE2DkbLkZd4DlFcCdfGkkuNc6mR2n8SpmMB8T04odfVCkR06ihgv8RVw==} + '@rspress/theme-default@2.0.0-beta.33': + resolution: {integrity: sha512-Y9DsMSP6hw+2bvMfJe5TBvS7OczaRrwsSgkClMj+U3gdwrxI08iVnEWMp+Q/igCLBlJb2YKZO7065TCCBn/hiQ==} engines: {node: '>=18.0.0'} '@rstack-dev/doc-ui@1.11.0': @@ -1763,6 +1963,51 @@ packages: '@rushstack/ts-command-line@5.0.3': resolution: {integrity: sha512-bgPhQEqLVv/2hwKLYv/XvsTWNZ9B/+X1zJ7WgQE9rO5oiLzrOZvkIW4pk13yOQBhHyjcND5qMOa6p83t+Z66iQ==} + '@secretlint/config-creator@10.2.2': + resolution: {integrity: sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==} + engines: {node: '>=20.0.0'} + + '@secretlint/config-loader@10.2.2': + resolution: {integrity: sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==} + engines: {node: '>=20.0.0'} + + '@secretlint/core@10.2.2': + resolution: {integrity: sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==} + engines: {node: '>=20.0.0'} + + '@secretlint/formatter@10.2.2': + resolution: {integrity: sha512-10f/eKV+8YdGKNQmoDUD1QnYL7TzhI2kzyx95vsJKbEa8akzLAR5ZrWIZ3LbcMmBLzxlSQMMccRmi05yDQ5YDA==} + engines: {node: '>=20.0.0'} + + '@secretlint/node@10.2.2': + resolution: {integrity: sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==} + engines: {node: '>=20.0.0'} + + '@secretlint/profiler@10.2.2': + resolution: {integrity: sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==} + + '@secretlint/resolver@10.2.2': + resolution: {integrity: sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==} + + '@secretlint/secretlint-formatter-sarif@10.2.2': + resolution: {integrity: sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==} + + '@secretlint/secretlint-rule-no-dotenv@10.2.2': + resolution: {integrity: sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==} + engines: {node: '>=20.0.0'} + + '@secretlint/secretlint-rule-preset-recommend@10.2.2': + resolution: {integrity: sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==} + engines: {node: '>=20.0.0'} + + '@secretlint/source-creator@10.2.2': + resolution: {integrity: sha512-h6I87xJfwfUTgQ7irWq7UTdq/Bm1RuQ/fYhA3dtTIAop5BwSFmZyrchph4WcoEvbN460BWKmk4RYSvPElIIvxw==} + engines: {node: '>=20.0.0'} + + '@secretlint/types@10.2.2': + resolution: {integrity: sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==} + engines: {node: '>=20.0.0'} + '@selderee/plugin-htmlparser2@0.11.0': resolution: {integrity: sha512-P33hHGdldxGabLFjPPpaTxVolMrzrcegejx+0GxjrIb9Zv48D8yAIA/QTDR2dFl7Uz7urX8aX6+5bCZslr+gWQ==} @@ -1806,9 +2051,84 @@ packages: '@socket.io/component-emitter@3.1.2': resolution: {integrity: sha512-9BCxFwvbGg/RsZK9tjXd8s4UcwR0MWeFQ1XEKIQVVvAGJyINdrqKMcTRyLoK8Rse1GjzLV9cwjWV1olXRWEXVA==} + '@swc/core-darwin-arm64@1.13.5': + resolution: {integrity: sha512-lKNv7SujeXvKn16gvQqUQI5DdyY8v7xcoO3k06/FJbHJS90zEwZdQiMNRiqpYw/orU543tPaWgz7cIYWhbopiQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [darwin] + + '@swc/core-darwin-x64@1.13.5': + resolution: {integrity: sha512-ILd38Fg/w23vHb0yVjlWvQBoE37ZJTdlLHa8LRCFDdX4WKfnVBiblsCU9ar4QTMNdeTBEX9iUF4IrbNWhaF1Ng==} + engines: {node: '>=10'} + cpu: [x64] + os: [darwin] + + '@swc/core-linux-arm-gnueabihf@1.13.5': + resolution: {integrity: sha512-Q6eS3Pt8GLkXxqz9TAw+AUk9HpVJt8Uzm54MvPsqp2yuGmY0/sNaPPNVqctCX9fu/Nu8eaWUen0si6iEiCsazQ==} + engines: {node: '>=10'} + cpu: [arm] + os: [linux] + + '@swc/core-linux-arm64-gnu@1.13.5': + resolution: {integrity: sha512-aNDfeN+9af+y+M2MYfxCzCy/VDq7Z5YIbMqRI739o8Ganz6ST+27kjQFd8Y/57JN/hcnUEa9xqdS3XY7WaVtSw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-arm64-musl@1.13.5': + resolution: {integrity: sha512-9+ZxFN5GJag4CnYnq6apKTnnezpfJhCumyz0504/JbHLo+Ue+ZtJnf3RhyA9W9TINtLE0bC4hKpWi8ZKoETyOQ==} + engines: {node: '>=10'} + cpu: [arm64] + os: [linux] + + '@swc/core-linux-x64-gnu@1.13.5': + resolution: {integrity: sha512-WD530qvHrki8Ywt/PloKUjaRKgstQqNGvmZl54g06kA+hqtSE2FTG9gngXr3UJxYu/cNAjJYiBifm7+w4nbHbA==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-linux-x64-musl@1.13.5': + resolution: {integrity: sha512-Luj8y4OFYx4DHNQTWjdIuKTq2f5k6uSXICqx+FSabnXptaOBAbJHNbHT/06JZh6NRUouaf0mYXN0mcsqvkhd7Q==} + engines: {node: '>=10'} + cpu: [x64] + os: [linux] + + '@swc/core-win32-arm64-msvc@1.13.5': + resolution: {integrity: sha512-cZ6UpumhF9SDJvv4DA2fo9WIzlNFuKSkZpZmPG1c+4PFSEMy5DFOjBSllCvnqihCabzXzpn6ykCwBmHpy31vQw==} + engines: {node: '>=10'} + cpu: [arm64] + os: [win32] + + '@swc/core-win32-ia32-msvc@1.13.5': + resolution: {integrity: sha512-C5Yi/xIikrFUzZcyGj9L3RpKljFvKiDMtyDzPKzlsDrKIw2EYY+bF88gB6oGY5RGmv4DAX8dbnpRAqgFD0FMEw==} + engines: {node: '>=10'} + cpu: [ia32] + os: [win32] + + '@swc/core-win32-x64-msvc@1.13.5': + resolution: {integrity: sha512-YrKdMVxbYmlfybCSbRtrilc6UA8GF5aPmGKBdPvjrarvsmf4i7ZHGCEnLtfOMd3Lwbs2WUZq3WdMbozYeLU93Q==} + engines: {node: '>=10'} + cpu: [x64] + os: [win32] + + '@swc/core@1.13.5': + resolution: {integrity: sha512-WezcBo8a0Dg2rnR82zhwoR6aRNxeTGfK5QCD6TQ+kg3xx/zNT02s/0o+81h/3zhvFSB24NtqEr8FTw88O5W/JQ==} + engines: {node: '>=10'} + peerDependencies: + '@swc/helpers': '>=0.5.17' + peerDependenciesMeta: + '@swc/helpers': + optional: true + + '@swc/counter@0.1.3': + resolution: {integrity: sha512-e2BR4lsJkkRlKZ/qCHPw9ZaSxc0MVUd7gtbtaB7aMvHeJVYe8sOB8DBZkP2DtISHGSku9sCK6T6cnY0CtXrOCQ==} + '@swc/helpers@0.5.17': resolution: {integrity: sha512-5IKx/Y13RsYd+sauPb2x+U/xZikHjolzfuDgTAl/Tdf3Q8rslRvC19NKDLgAJQ6wsqADk10ntlv08nPFw/gO/A==} + '@swc/types@0.1.24': + resolution: {integrity: sha512-tjTMh3V4vAORHtdTprLlfoMptu1WfTZG9Rsca6yOKyNYsRr+MUXutKmliB17orgSZk5DpnDxs8GUdd/qwYxOng==} + '@testing-library/dom@10.4.1': resolution: {integrity: sha512-o4PXJQidqJl82ckFaXUeoAW+XysPLauYI43Abki5hABd853iMhitooc6znOnczgbTYmEP6U6/y1ZyKAIsvMKGg==} engines: {node: '>=18'} @@ -1832,9 +2152,27 @@ packages: '@types/react-dom': optional: true + '@textlint/ast-node-types@15.2.2': + resolution: {integrity: sha512-9ByYNzWV8tpz6BFaRzeRzIov8dkbSZu9q7IWqEIfmRuLWb2qbI/5gTvKcoWT1HYs4XM7IZ8TKSXcuPvMb6eorA==} + + '@textlint/linter-formatter@15.2.2': + resolution: {integrity: sha512-oMVaMJ3exFvXhCj3AqmCbLaeYrTNLqaJnLJMIlmnRM3/kZdxvku4OYdaDzgtlI194cVxamOY5AbHBBVnY79kEg==} + + '@textlint/module-interop@15.2.2': + resolution: {integrity: sha512-2rmNcWrcqhuR84Iio1WRzlc4tEoOMHd6T7urjtKNNefpTt1owrTJ9WuOe60yD3FrTW0J/R0ux5wxUbP/eaeFOA==} + + '@textlint/resolver@15.2.2': + resolution: {integrity: sha512-4hGWjmHt0y+5NAkoYZ8FvEkj8Mez9TqfbTm3BPjoV32cIfEixl2poTOgapn1rfm73905GSO3P1jiWjmgvii13Q==} + + '@textlint/types@15.2.2': + resolution: {integrity: sha512-X2BHGAR3yXJsCAjwYEDBIk9qUDWcH4pW61ISfmtejau+tVqKtnbbvEZnMTb6mWgKU1BvTmftd5DmB1XVDUtY3g==} + '@tybys/wasm-util@0.10.0': resolution: {integrity: sha512-VyyPYFlOMNylG45GoAe0xDoLwWuowvf92F9kySqzYh8vmYm7D2u4iUJKa1tOUpS70Ku13ASrOkS4ScXFsTaCNQ==} + '@tybys/wasm-util@0.10.1': + resolution: {integrity: sha512-9tTaPJLSiejZKx+Bmog4uSubteqTvFrVrURwkmHixBo0G4seD0zUxp98E1DzUBJxLQ3NPwXrGKDiVjwx/DpPsg==} + '@tybys/wasm-util@0.9.0': resolution: {integrity: sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==} @@ -1892,6 +2230,9 @@ packages: '@types/fs-extra@11.0.4': resolution: {integrity: sha512-yTbItCNreRooED33qjunPthRcSjERP1r4MqCZc7wv0u2sUkzTFp45tgUfS5+r7FrZPdmCCNflLhVSP/o+SemsQ==} + '@types/glob@7.2.0': + resolution: {integrity: sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==} + '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} @@ -1928,6 +2269,13 @@ packages: '@types/mdx@2.0.13': resolution: {integrity: sha512-+OWZQfAYyio6YkJb3HLxDrvnx6SWWDbC0zVPfBRzUk0/nqoDyf6dNxQi3eArPe8rJ473nobTMQ/8Zk+LxJ+Yuw==} + '@types/minimatch@6.0.0': + resolution: {integrity: sha512-zmPitbQ8+6zNutpwgcQuLcsEpn/Cj54Kbn7L5pX0Os5kdWplB7xPgEh/g+SWOB/qmows2gpuCaPyduq8ZZRnxA==} + deprecated: This is a stub types definition. minimatch provides its own type definitions, so you do not need this installed. + + '@types/mocha@10.0.10': + resolution: {integrity: sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q==} + '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} @@ -1937,8 +2285,14 @@ packages: '@types/node@20.19.4': resolution: {integrity: sha512-OP+We5WV8Xnbuvw0zC2m4qfB/BJvjyCwtNjhHdJxV1639SGSKrLmJkc3fMnp2Qy8nJyHp8RO6umxELN/dS1/EA==} - '@types/node@22.16.5': - resolution: {integrity: sha512-bJFoMATwIGaxxx8VJPeM8TonI8t579oRvgAuT8zFugJsJZgzqv0Fu8Mhp68iecjzG7cnN3mO2dJQ5uUM2EFrgQ==} + '@types/node@22.13.8': + resolution: {integrity: sha512-G3EfaZS+iOGYWLLRCEAXdWK9my08oHNZ+FHluRiggIYJPOXzhOiDgpVCUHaUvyIC5/fj7C/p637jdzC666AOKQ==} + + '@types/node@22.18.6': + resolution: {integrity: sha512-r8uszLPpeIWbNKtvWRt/DbVi5zbqZyj1PTmhRMqBMvDnaz1QpmSKujUtJLrqGZeoM8v72MfYggDceY4K1itzWQ==} + + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} '@types/pixelmatch@5.2.6': resolution: {integrity: sha512-wC83uexE5KGuUODn6zkm9gMzTwdY5L0chiK+VrKcDfEjzxh1uadlWTvOmAbCpnM9zx/Ww3f8uKlYQVnO/TrqVg==} @@ -1951,6 +2305,9 @@ packages: '@types/react@19.1.13': resolution: {integrity: sha512-hHkbU/eoO3EG5/MZkuFSKmYqPbSVk5byPFa3e7y/8TybHiLMACgI8seVYlicwk7H5K/rI2px9xrQp/C+AUDTiQ==} + '@types/sarif@2.1.7': + resolution: {integrity: sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==} + '@types/sinonjs__fake-timers@8.1.5': resolution: {integrity: sha512-mQkU2jY8jJEF7YHjHvsQO8+3ughTL1mcnn96igfhONmR+fUPSKIkefQYpSe8bsly2Ep7oQbn/6VG5/9/0qcArQ==} @@ -1972,15 +2329,25 @@ packages: '@types/unist@3.0.3': resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} + '@types/vscode@1.103.0': + resolution: {integrity: sha512-o4hanZAQdNfsKecexq9L3eHICd0AAvdbLk6hA60UzGXbGH/q8b/9xv2RgR7vV3ZcHuyKVq7b37IGd/+gM4Tu+Q==} + '@types/whatwg-mimetype@3.0.2': resolution: {integrity: sha512-c2AKvDT8ToxLIOUlN51gTiHXflsfIFisS4pO7pDPoKouJCESkhZnEy623gwP9laCy5lnLDAw1vAzu2vM2YLOrA==} + '@types/ws@8.18.1': + resolution: {integrity: sha512-ThVF6DCVhA8kUGy+aazFQ4kXQ7E1Ty7A3ypFOe0IcJV8O/M511G99AW24irKrW56Wt44yG9+ij8FaqoBGkuBXg==} + '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} + '@typespec/ts-http-runtime@0.3.0': + resolution: {integrity: sha512-sOx1PKSuFwnIl7z4RN0Ls7N9AQawmR9r66eI5rFCzLDIs8HTIYrIpH9QjYWoX0lkgGrkLxXhi4QnK7MizPRrIg==} + engines: {node: '>=20.0.0'} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} @@ -2004,6 +2371,68 @@ packages: '@vitest/utils@3.2.4': resolution: {integrity: sha512-fB2V0JFrQSMsCo9HiSq3Ezpdv4iYaXRG1Sx8edX3MwxfyNn83mKiGzOcH+Fkxt4MHxr3y42fQi1oeAInqgX2QA==} + '@vscode/test-cli@0.0.11': + resolution: {integrity: sha512-qO332yvzFqGhBMJrp6TdwbIydiHgCtxXc2Nl6M58mbH/Z+0CyLR76Jzv4YWPEthhrARprzCRJUqzFvTHFhTj7Q==} + engines: {node: '>=18'} + hasBin: true + + '@vscode/test-electron@2.5.2': + resolution: {integrity: sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg==} + engines: {node: '>=16'} + + '@vscode/vsce-sign-alpine-arm64@2.0.5': + resolution: {integrity: sha512-XVmnF40APwRPXSLYA28Ye+qWxB25KhSVpF2eZVtVOs6g7fkpOxsVnpRU1Bz2xG4ySI79IRuapDJoAQFkoOgfdQ==} + cpu: [arm64] + os: [alpine] + + '@vscode/vsce-sign-alpine-x64@2.0.5': + resolution: {integrity: sha512-JuxY3xcquRsOezKq6PEHwCgd1rh1GnhyH6urVEWUzWn1c1PC4EOoyffMD+zLZtFuZF5qR1I0+cqDRNKyPvpK7Q==} + cpu: [x64] + os: [alpine] + + '@vscode/vsce-sign-darwin-arm64@2.0.5': + resolution: {integrity: sha512-z2Q62bk0ptADFz8a0vtPvnm6vxpyP3hIEYMU+i1AWz263Pj8Mc38cm/4sjzxu+LIsAfhe9HzvYNS49lV+KsatQ==} + cpu: [arm64] + os: [darwin] + + '@vscode/vsce-sign-darwin-x64@2.0.5': + resolution: {integrity: sha512-ma9JDC7FJ16SuPXlLKkvOD2qLsmW/cKfqK4zzM2iJE1PbckF3BlR08lYqHV89gmuoTpYB55+z8Y5Fz4wEJBVDA==} + cpu: [x64] + os: [darwin] + + '@vscode/vsce-sign-linux-arm64@2.0.5': + resolution: {integrity: sha512-Hr1o0veBymg9SmkCqYnfaiUnes5YK6k/lKFA5MhNmiEN5fNqxyPUCdRZMFs3Ajtx2OFW4q3KuYVRwGA7jdLo7Q==} + cpu: [arm64] + os: [linux] + + '@vscode/vsce-sign-linux-arm@2.0.5': + resolution: {integrity: sha512-cdCwtLGmvC1QVrkIsyzv01+o9eR+wodMJUZ9Ak3owhcGxPRB53/WvrDHAFYA6i8Oy232nuen1YqWeEohqBuSzA==} + cpu: [arm] + os: [linux] + + '@vscode/vsce-sign-linux-x64@2.0.5': + resolution: {integrity: sha512-XLT0gfGMcxk6CMRLDkgqEPTyG8Oa0OFe1tPv2RVbphSOjFWJwZgK3TYWx39i/7gqpDHlax0AP6cgMygNJrA6zg==} + cpu: [x64] + os: [linux] + + '@vscode/vsce-sign-win32-arm64@2.0.5': + resolution: {integrity: sha512-hco8eaoTcvtmuPhavyCZhrk5QIcLiyAUhEso87ApAWDllG7djIrWiOCtqn48k4pHz+L8oCQlE0nwNHfcYcxOPw==} + cpu: [arm64] + os: [win32] + + '@vscode/vsce-sign-win32-x64@2.0.5': + resolution: {integrity: sha512-1ixKFGM2FwM+6kQS2ojfY3aAelICxjiCzeg4nTHpkeU1Tfs4RC+lVLrgq5NwcBC7ZLr6UfY3Ct3D6suPeOf7BQ==} + cpu: [x64] + os: [win32] + + '@vscode/vsce-sign@2.0.6': + resolution: {integrity: sha512-j9Ashk+uOWCDHYDxgGsqzKq5FXW9b9MW7QqOIYZ8IYpneJclWTBeHZz2DJCSKQgo+JAqNcaRRE1hzIx0dswqAw==} + + '@vscode/vsce@3.6.0': + resolution: {integrity: sha512-u2ZoMfymRNJb14aHNawnXJtXHLXDVKc1oKZaH4VELKT/9iWKRVgtQOdwxCgtwSxJoqYvuK4hGlBWQJ05wxADhg==} + engines: {node: '>= 20'} + hasBin: true + '@vue/babel-helper-vue-transform-on@1.5.0': resolution: {integrity: sha512-0dAYkerNhhHutHZ34JtTl2czVQHUNWv6xEbkdF5W+Yrv5pCWsqjeORdOgbtW2I9gWlt+wBmVn+ttqN9ZxR5tzA==} @@ -2020,15 +2449,27 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@vue/compiler-core@3.5.20': + resolution: {integrity: sha512-8TWXUyiqFd3GmP4JTX9hbiTFRwYHgVL/vr3cqhr4YQ258+9FADwvj7golk2sWNGHR67QgmCZ8gz80nQcMokhwg==} + '@vue/compiler-core@3.5.21': resolution: {integrity: sha512-8i+LZ0vf6ZgII5Z9XmUvrCyEzocvWT+TeR2VBUVlzIH6Tyv57E20mPZ1bCS+tbejgUgmjrEh7q/0F0bibskAmw==} + '@vue/compiler-dom@3.5.20': + resolution: {integrity: sha512-whB44M59XKjqUEYOMPYU0ijUV0G+4fdrHVKDe32abNdX/kJe1NUEMqsi4cwzXa9kyM9w5S8WqFsrfo1ogtBZGQ==} + '@vue/compiler-dom@3.5.21': resolution: {integrity: sha512-jNtbu/u97wiyEBJlJ9kmdw7tAr5Vy0Aj5CgQmo+6pxWNQhXZDPsRr1UWPN4v3Zf82s2H3kF51IbzZ4jMWAgPlQ==} + '@vue/compiler-sfc@3.5.20': + resolution: {integrity: sha512-SFcxapQc0/feWiSBfkGsa1v4DOrnMAQSYuvDMpEaxbpH5dKbnEM5KobSNSgU+1MbHCl+9ftm7oQWxvwDB6iBfw==} + '@vue/compiler-sfc@3.5.21': resolution: {integrity: sha512-SXlyk6I5eUGBd2v8Ie7tF6ADHE9kCR6mBEuPyH1nUZ0h6Xx6nZI29i12sJKQmzbDyr2tUHMhhTt51Z6blbkTTQ==} + '@vue/compiler-ssr@3.5.20': + resolution: {integrity: sha512-RSl5XAMc5YFUXpDQi+UQDdVjH9FnEpLDHIALg5J0ITHxkEzJ8uQLlo7CIbjPYqmZtt6w0TsIPbo1izYXwDG7JA==} + '@vue/compiler-ssr@3.5.21': resolution: {integrity: sha512-vKQ5olH5edFZdf5ZrlEgSO1j1DMA4u23TVK5XR1uMhvwnYvVdDF0nHXJUblL/GvzlShQbjhZZ2uvYmDlAbgo9w==} @@ -2046,6 +2487,9 @@ packages: peerDependencies: vue: 3.5.21 + '@vue/shared@3.5.20': + resolution: {integrity: sha512-SoRGP596KU/ig6TfgkCMbXkr4YJ91n/QSdMuqeP5r3hVIYA3CPHUBCc7Skak0EAKV+5lL4KyIh61VA/pK1CIAA==} + '@vue/shared@3.5.21': resolution: {integrity: sha512-+2k1EQpnYuVuu3N7atWyG3/xoFWIVJZq4Mz8XNOdScFI0etES75fbny/oU4lKWk/577P1zmg0ioYvpGEDZ3DLw==} @@ -2191,6 +2635,10 @@ packages: resolution: {integrity: sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==} engines: {node: '>=6'} + ansi-escapes@7.1.0: + resolution: {integrity: sha512-YdhtCd19sKRKfAAUsrcC1wzm4JuzJoiX4pOJqIoW2qmKj5WzG/dL8uUJ0361zaXtHqK7gEhOwtAtz7t3Yq3X5g==} + engines: {node: '>=18'} + ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2246,6 +2694,9 @@ packages: axios@1.12.2: resolution: {integrity: sha512-vMJzPewAlRyOgxV2dU0Cuz2O8zzzx9VYtbJOaBgXFeLc4IV/Eg50n4LowmehOOR61S8ZMpc2K5Sa7g6A4jfkUw==} + azure-devops-node-api@12.5.0: + resolution: {integrity: sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==} + babel-plugin-vue-jsx-hmr@1.0.0: resolution: {integrity: sha512-XRq+XTD4bub6HkavELMhihvLX2++JkSBAxRXlqQK32b+Tb0S9PEqxrDSMpOEZ1iGyOaJZj9Y0uU/FzICdyL9MA==} @@ -2273,6 +2724,10 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + binaryextensions@6.11.0: + resolution: {integrity: sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==} + engines: {node: '>=4'} + birpc@2.5.0: resolution: {integrity: sha512-VSWO/W6nNQdyP520F1mhf+Lc2f8pjGQOtoHHm7Ze8Go1kX7akpVIrtTa0fn+HB0QJEDVacl6aO08YE0PgXfdnQ==} @@ -2286,6 +2741,15 @@ packages: body-scroll-lock@4.0.0-beta.0: resolution: {integrity: sha512-a7tP5+0Mw3YlUJcGAKUqIBkYYGlYxk2fnCasq/FUph1hadxlTRjF+gAcZksxANnaMnALjxEddmSi/H3OR8ugcQ==} + boolbase@1.0.0: + resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + + boundary@2.0.0: + resolution: {integrity: sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==} + + brace-expansion@1.1.12: + resolution: {integrity: sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==} + brace-expansion@2.0.1: resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} @@ -2293,30 +2757,48 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + browser-stdout@1.3.1: + resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} + browserslist-load-config@1.0.0: resolution: {integrity: sha512-jj4xzExS1hRVMUIFQSkW4l3KPni5JRxnKfYfRpirooK5S4CjY31PhqfEjCB/mfqgCxkZIxc9rcu0pyXlEpYp/Q==} browserslist-to-es-version@1.0.0: resolution: {integrity: sha512-i6dR03ClGy9ti97FSa4s0dpv01zW/t5VbvGjFfTLsrRQFsPgSeyGkCrlU7BTJuI5XDHVY5S2JgDnDsvQXifJ8w==} - browserslist@4.25.1: - resolution: {integrity: sha512-KGj0KoOMXLpSNkkEI6Z6mShmQy0bc1I+T7K9N81k4WWMrfz+6fQ6es80B/YLAeRoKvjYE1YSHHOW1qe9xIVzHw==} + browserslist@4.24.5: + resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true buffer-builder@0.2.0: resolution: {integrity: sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==} + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + + buffer-equal-constant-time@1.0.1: + resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} + buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} buffer@5.7.1: resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + bundle-name@4.1.0: + resolution: {integrity: sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==} + engines: {node: '>=18'} + bytes@3.1.2: resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} engines: {node: '>= 0.8'} + c8@9.1.0: + resolution: {integrity: sha512-mBWcT5iqNir1zIkzSPyI3NCR9EZCVI3WUD+AVO17MVWTSFNyUueXE82qTeampNtTr+ilN/5Ua3j24LgbCKjDVg==} + engines: {node: '>=14.14.0'} + hasBin: true + cac@6.7.14: resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} engines: {node: '>=8'} @@ -2329,8 +2811,12 @@ packages: resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} - caniuse-lite@1.0.30001727: - resolution: {integrity: sha512-pB68nIHmbN6L/4C6MH1DokyR3bYqFwjaSs/sWDHGj4CTcFtQUQMuJftVwWkXq7mNWOybD3KhUv3oWHoGxgP14Q==} + camelcase@6.3.0: + resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} + engines: {node: '>=10'} + + caniuse-lite@1.0.30001718: + resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2371,6 +2857,13 @@ packages: resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} engines: {node: '>= 16'} + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.1.2: + resolution: {integrity: sha512-IkxPpb5rS/d1IiLbHMgfPuS0FgiWTtFIm/Nj+2woXDLTZ7fOT2eqzgYbdMlLweqlHbsZjxEChoVK+7iph7jyQg==} + engines: {node: '>=20.18.1'} + chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} @@ -2379,6 +2872,9 @@ packages: resolution: {integrity: sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==} engines: {node: '>= 14.16.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -2395,10 +2891,18 @@ packages: resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} engines: {node: '>=8'} + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + cli-spinners@2.6.1: resolution: {integrity: sha512-x/5fWmGMnbKQAaNwN+UZlV79qBLM9JFnJuJ03gIi5whrob0xV0ofNVHy9DhwGdsMJQc2OKv0oGmLzvaqvAVv+g==} engines: {node: '>=6'} + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2407,6 +2911,10 @@ packages: resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} engines: {node: '>=0.8'} + cockatiel@3.2.1: + resolution: {integrity: sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==} + engines: {node: '>=16'} + collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} @@ -2431,6 +2939,10 @@ packages: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@13.1.0: resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} engines: {node: '>=18'} @@ -2438,6 +2950,9 @@ packages: commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + concat-map@0.0.1: + resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} + config-chain@1.1.13: resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==} @@ -2462,6 +2977,9 @@ packages: core-js@3.45.1: resolution: {integrity: sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==} + core-util-is@1.0.3: + resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} + cors@2.8.5: resolution: {integrity: sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==} engines: {node: '>= 0.10'} @@ -2478,6 +2996,13 @@ packages: cspell-ban-words@0.0.4: resolution: {integrity: sha512-w+18WPFAEmo2F+Fr4L29+GdY5ckOLN95WPwb/arfrtuzzB5VzQRFyIujo0T7pq+xFE0Z2gjfLn33Wk/u5ctNQQ==} + css-select@5.2.2: + resolution: {integrity: sha512-TizTzUddG/xYLA3NXodFM0fSbNizXjOKhqiQQwvhlspadZokn1KDy0NZFS0wuEubIYAV5/c1/lAr0TaaFXEXzw==} + + css-what@6.2.2: + resolution: {integrity: sha512-u/O3vwbptzhMs3L1fQE82ZSLHQQfto5gyZzwteVIEyeaY5Fc7R4dapF/BvRoSYFeqfBk4m0V1Vafq5Pjv25wvA==} + engines: {node: '>= 6'} + css.escape@1.5.1: resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==} @@ -2521,12 +3046,20 @@ packages: supports-color: optional: true + decamelize@4.0.0: + resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} + engines: {node: '>=10'} + decimal.js@10.5.0: resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} decode-named-character-reference@1.1.0: resolution: {integrity: sha512-Wy+JTSbFThEOXQIR2L6mxJvEs+veIzpmqD7ynWxMXGpnk3smkHQOp6forLdHsKpAMW9iJpaBBIxz285t1n1C3w==} + decompress-response@6.0.0: + resolution: {integrity: sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==} + engines: {node: '>=10'} + deep-eql@4.1.4: resolution: {integrity: sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==} engines: {node: '>=6'} @@ -2535,10 +3068,22 @@ packages: resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} engines: {node: '>=6'} + deep-extend@0.6.0: + resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} + engines: {node: '>=4.0.0'} + deepmerge@4.3.1: resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} engines: {node: '>=0.10.0'} + default-browser-id@5.0.0: + resolution: {integrity: sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==} + engines: {node: '>=18'} + + default-browser@5.2.1: + resolution: {integrity: sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==} + engines: {node: '>=18'} + defaults@1.0.4: resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} @@ -2546,6 +3091,10 @@ packages: resolution: {integrity: sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og==} engines: {node: '>=8'} + define-lazy-prop@3.0.0: + resolution: {integrity: sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==} + engines: {node: '>=12'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -2575,6 +3124,10 @@ packages: engines: {node: '>=0.10'} hasBin: true + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + detect-newline@4.0.1: resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2582,6 +3135,10 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + diff@7.0.0: + resolution: {integrity: sha512-PJWHUb1RFevKCwaFA9RlG5tCd+FO5iRh9A8HEtkmBH2Li03iJriB6m6JIN4rGz3K3JLawI7/veA1xzRKP6ISBw==} + engines: {node: '>=0.3.1'} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -2620,9 +3177,16 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} + ecdsa-sig-formatter@1.0.11: + resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + edit-json-file@1.8.1: resolution: {integrity: sha512-x8L381+GwqxQejPipwrUZIyAg5gDQ9tLVwiETOspgXiaQztLsrOm7luBW5+Pe31aNezuzDY79YyzF+7viCRPXA==} + editions@6.22.0: + resolution: {integrity: sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==} + engines: {ecmascript: '>= es5', node: '>=4'} + editorconfig@1.0.4: resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==} engines: {node: '>=14'} @@ -2631,8 +3195,11 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.187: - resolution: {integrity: sha512-cl5Jc9I0KGUoOoSbxvTywTa40uspGJt/BDBoDLoxJRSBpWh4FFXBsjNRHfQrONsV/OoEjDfHUmZQa2d6Ze4YgA==} + electron-to-chromium@1.5.150: + resolution: {integrity: sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA==} + + emoji-regex@10.5.0: + resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -2648,6 +3215,9 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + encoding-sniffer@0.2.1: + resolution: {integrity: sha512-5gvq20T6vfpekVtqrYQsSCFZ1wEg5+wW0/QaZMWkFr6BqD3NfKs0rLCx4rrVlSWJeZb5NBJgVLswK/w2MWU+Gw==} + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -2688,6 +3258,10 @@ packages: engines: {node: '>=4'} hasBin: true + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + error-stack-parser@2.1.4: resolution: {integrity: sha512-Sk5V6wVazPhq5MhpO+AUxJn5x7XSXGl1R93Vn7i+zS15KDVxQijejNCrz8340/2bgLBjR9GtEG8ZVKONDjcqGQ==} @@ -2731,6 +3305,10 @@ packages: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} + 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'} @@ -2784,6 +3362,10 @@ packages: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + expect@30.0.5: resolution: {integrity: sha512-P0te2pt+hHI5qLJkIR+iMvS+lYUZml8rKKsohVHAGY+uClp9XVbdyYNJOIjSRpHVp8s8YqxJCiHUkSYZGr8rtQ==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -2811,6 +3393,9 @@ packages: fastq@1.19.1: resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} + fd-slicer@1.1.0: + resolution: {integrity: sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==} + fdir@6.5.0: resolution: {integrity: sha512-tIbYtZbucOs0BRGqPJkshJUYdL+SDH7dVM8gjy+ERp3WAUjLEFJE+02kanyHtwjWOnwrKYBiwAmM0p4kLJAnXg==} engines: {node: '>=12.0.0'} @@ -2840,6 +3425,10 @@ packages: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} + find-up@5.0.0: + resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} + engines: {node: '>=10'} + find-value@1.0.13: resolution: {integrity: sha512-epNL4mnl3HUYrwVQtZ8s0nxkE4ogAoSqO1V1fa670Ww1fXp8Yr74zNS9Aib/vLNf0rq0AF/4mboo7ev5XkikXQ==} @@ -2850,8 +3439,8 @@ packages: flexsearch@0.7.43: resolution: {integrity: sha512-c5o/+Um8aqCSOXGcZoqZOm+NqtVwNsvVpWv6lfmSclU954O3wvQKxxK8zj74fPaSJbXpSLTs4PRhh+wnoCXnKg==} - follow-redirects@1.15.11: - resolution: {integrity: sha512-deG2P0JfjrTxl50XGCDyfI97ZGVCxIpfKYmfyrQ54n5FO/0gfIES8C/Psl6kWVDolizcaaxZJnTS0QSMxvnsBQ==} + follow-redirects@1.15.9: + resolution: {integrity: sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -2899,6 +3488,9 @@ packages: resolution: {integrity: sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==} engines: {node: '>=6 <7 || >=8'} + fs.realpath@1.0.0: + resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -2915,6 +3507,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} + get-east-asian-width@1.3.1: + resolution: {integrity: sha512-R1QfovbPsKmosqTnPoRFiJ7CF9MLRgb53ChvMZm+r4p76/+8yKDy17qLL2PKInORy2RkZZekuK0efYgmzTkXyQ==} + engines: {node: '>=18'} + get-intrinsic@1.3.0: resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} @@ -2923,6 +3519,10 @@ packages: resolution: {integrity: sha512-g/Q1aTSDOxFpchXC4i8ZWvxA1lnPqx/JHqcpIw0/LX9T8x/GBbi6YnlN5nhaKIFkT8oFsscUKgDJYxfwfS6QsQ==} engines: {node: '>=8'} + get-port@7.1.0: + resolution: {integrity: sha512-QB9NKEeDg3xxVwCCwJQ9+xycaz6pBB6iQ76wiWMl1927n0Kir6alPiP+yuiICLLU4jpMe08dXfpebuQppFA2zw==} + engines: {node: '>=16'} + get-proto@1.0.1: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} @@ -2934,6 +3534,9 @@ packages: git-hooks-list@4.1.1: resolution: {integrity: sha512-cmP497iLq54AZnv4YRAEMnEyQ1eIn4tGKbmswqwmFV4GBnAqE8NLtWxxdXa++AalfgL5EBH4IxTPyquEuGY/jA==} + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + github-slugger@2.0.0: resolution: {integrity: sha512-IaOQ9puYtjrkq7Y0Ygl9KDZnrf/aiUJYUpVf89y8kyaxbRG7Y1SrX/jaumrv81vc61+kiMempujsM3Yw7w5qcw==} @@ -2954,6 +3557,15 @@ packages: resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true + glob@11.0.3: + resolution: {integrity: sha512-2Nim7dha1KVkaiF4q6Dj+ngPPMdfvLJEOpZk/jKiUAkqKebpGAWQXAq9z1xu9HKu5lWfqw/FASuccEjyznjPaA==} + engines: {node: 20 || >=22} + hasBin: true + + glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + deprecated: Glob versions prior to v9 are no longer supported + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -3035,6 +3647,10 @@ packages: hastscript@9.0.1: resolution: {integrity: sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==} + he@1.2.0: + resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} + hasBin: true + heading-case@1.0.2: resolution: {integrity: sha512-/auUg52lwuEOlb3IhtTj5UQvqdr3J/e07ibuK+YU/JI8QI+FVWsMbxGbYbwSpD5qLXXUAs2MzdiBt1/K/Q0fTw==} hasBin: true @@ -3042,6 +3658,14 @@ packages: hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + html-encoding-sniffer@4.0.0: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} @@ -3104,6 +3728,9 @@ packages: resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==} engines: {node: '>= 4'} + immediate@3.0.6: + resolution: {integrity: sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==} + immutable@5.1.2: resolution: {integrity: sha512-qHKXW1q6liAk1Oys6umoaZbDRqjcjgSrbnrifHsfsttza7zcvRAsL7mMV6xWcyhwQy7Xj5v4hhbr6b+iDYwlmQ==} @@ -3115,6 +3742,14 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + index-to-position@1.1.0: + resolution: {integrity: sha512-XPdx9Dq4t9Qk1mTMbWONJqU7boCoumEH7fRET37HX5+khDUl3J2W6PdALxhILYlIYx2amlwYcRPp28p0tSiojg==} + engines: {node: '>=18'} + + inflight@1.0.6: + resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} + deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -3150,6 +3785,11 @@ packages: engines: {node: '>=8'} hasBin: true + is-docker@3.0.0: + resolution: {integrity: sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + hasBin: true + is-extendable@0.1.1: resolution: {integrity: sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==} engines: {node: '>=0.10.0'} @@ -3169,14 +3809,27 @@ packages: is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} + is-inside-container@1.0.0: + resolution: {integrity: sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==} + engines: {node: '>=14.16'} + hasBin: true + is-interactive@1.0.0: resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} engines: {node: '>=8'} + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} + is-plain-obj@2.1.0: + resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} + engines: {node: '>=8'} + is-plain-obj@4.1.0: resolution: {integrity: sha512-+Pgi+vMuUNkJyExiMBt5IlFoMyKnr5zhJ4Uspz58WOhBF5QoIZkFyNHIbBAtHwzVAgk5RtndVNsDRN61/mmDqg==} engines: {node: '>=12'} @@ -3200,6 +3853,14 @@ packages: resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} engines: {node: '>=10'} + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -3208,6 +3869,13 @@ packages: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} + is-wsl@3.1.0: + resolution: {integrity: sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==} + engines: {node: '>=16'} + + isarray@1.0.0: + resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -3227,12 +3895,20 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} + istextorbinary@9.5.0: + resolution: {integrity: sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==} + engines: {node: '>=4'} + iterate-object@1.3.5: resolution: {integrity: sha512-eL23u8oFooYTq6TtJKjp2RYjZnCkUYQvC0T/6fJfWykXJ3quvdDdzKZ3CEjy8b3JGOvLTjDYMEMIp5243R906A==} jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} + jackspeak@4.1.1: + resolution: {integrity: sha512-zptv57P3GpL+O0I7VdMJNBZCu+BPHVQUk55Ft8/QCJjTVxrnJHuVuX/0Bl2A6/+2oyR/ZMEuFKwmzqqZ/U5nPQ==} + engines: {node: 20 || >=22} + jest-diff@30.0.5: resolution: {integrity: sha512-1UIqE9PoEKaHcIKvq2vbibrCog4Y8G0zmOxgQUVEiTqwR5hJVMCoDsN1vFvI5JvwD37hjueZ1C4l2FyGnfpE0A==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -3342,6 +4018,22 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + jsonwebtoken@9.0.2: + resolution: {integrity: sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==} + engines: {node: '>=12', npm: '>=6'} + + jszip@3.10.1: + resolution: {integrity: sha512-xXDvecyTpGLrqFrvkrUSoxxfJI5AH7U8zxxtVclpsUtMCq4JQ290LY8AW5c7Ggnr/Y/oK+bQMbqK2qmtk3pN4g==} + + jwa@1.4.2: + resolution: {integrity: sha512-eeH5JO+21J78qMvTIDdBXidBd6nG2kZjg5Ohz/1fpa28Z4CcsWUzJ1ZZyFq/3z3N17aZy+ZuBoHljASbL1WfOw==} + + jws@3.2.2: + resolution: {integrity: sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==} + + keytar@7.9.0: + resolution: {integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==} + kind-of@6.0.3: resolution: {integrity: sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==} engines: {node: '>=0.10.0'} @@ -3349,6 +4041,10 @@ packages: leac@0.6.0: resolution: {integrity: sha512-y+SqErxb8h7nE/fiEX07jsbuhrpO9lL8eca7/Y1nuWV2moNlXhyd59iDGcRf6moVyDMbmTNzL40SUyrFU/yDpg==} + leven@3.1.0: + resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} + engines: {node: '>=6'} + license-webpack-plugin@4.0.2: resolution: {integrity: sha512-771TFWFD70G1wLTC4oU2Cw4qvtmNrIw+wRvBtn+okgHl7slJVi7zfNcdmqDL72BojM30VNJ2UHylr1o77U37Jw==} peerDependencies: @@ -3357,6 +4053,9 @@ packages: webpack: optional: true + lie@3.3.0: + resolution: {integrity: sha512-UaiMJzeWRlEujzAuw5LokY1L5ecNQYZKfmyZ9L7wDHb/p5etKaxXhohBcrw0EYby+G/NA52vRSN4N39dxHAIwQ==} + lines-and-columns@2.0.3: resolution: {integrity: sha512-cNOjgCnLB+FnvWWtyRTzmB3POJ+cXxTA81LoW7u8JdmhfXzriropYwpjShnz1QLLWsQwY7nIxoDmcPTwphDK9w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3365,6 +4064,9 @@ packages: resolution: {integrity: sha512-wM1+Z03eypVAVUCE7QdSqpVIvelbOakn1M0bPDoA4SGWPx3sNDVUiMo3L6To6WWGClB7VyXnhQ4Sn7gxiJbE6A==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + linkify-it@5.0.0: + resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} + loader-runner@4.3.0: resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} engines: {node: '>=6.11.5'} @@ -3377,9 +4079,34 @@ packages: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} + locate-path@6.0.0: + resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} + engines: {node: '>=10'} + lodash-es@4.17.21: resolution: {integrity: sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==} + lodash.includes@4.3.0: + resolution: {integrity: sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==} + + lodash.isboolean@3.0.3: + resolution: {integrity: sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==} + + lodash.isinteger@4.0.4: + resolution: {integrity: sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==} + + lodash.isnumber@3.0.3: + resolution: {integrity: sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==} + + lodash.isplainobject@4.0.6: + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} + + lodash.isstring@4.0.1: + resolution: {integrity: sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==} + + lodash.once@4.1.1: + resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash.startcase@4.4.0: resolution: {integrity: sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==} @@ -3396,6 +4123,10 @@ packages: resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} engines: {node: '>=10'} + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -3405,6 +4136,10 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.2.1: + resolution: {integrity: sha512-r8LA6i4LP4EeWOhqBaZZjDWwehd1xUJPCJd9Sv300H0ZmcUER4+JPh7bqqZeqs1o5pgtgvXm+d9UGrB5zZGDiQ==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} @@ -3416,6 +4151,9 @@ packages: resolution: {integrity: sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ==} hasBin: true + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + magic-string@0.30.19: resolution: {integrity: sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==} @@ -3427,6 +4165,10 @@ packages: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} + markdown-it@14.1.0: + resolution: {integrity: sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==} + hasBin: true + markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} @@ -3482,6 +4224,9 @@ packages: mdast-util-to-string@4.0.0: resolution: {integrity: sha512-0H44vDimn51F0YwvxSJSm0eCDOJTRlmN0R1yBh4HLj9wiV1Dn0QoXGbvFAWj2hSItVTlCmBF1hqKlIyUBVFLPg==} + mdurl@2.0.0: + resolution: {integrity: sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==} + media-typer@0.3.0: resolution: {integrity: sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==} engines: {node: '>= 0.6'} @@ -3489,8 +4234,8 @@ packages: medium-zoom@1.1.0: resolution: {integrity: sha512-ewyDsp7k4InCUp3jRmwHBRFGyjBimKps/AJLjRSox+2q/2H4p/PNpQf+pwONWlJiOudkBXtbdmVbFjqyybfTmQ==} - memfs@4.42.0: - resolution: {integrity: sha512-RG+4HMGyIVp6UWDWbFmZ38yKrSzblPnfJu0PyPt0hw52KW4PPlPp+HdV4qZBG0hLDuYVnf8wfQT4NymKXnlQjA==} + memfs@4.43.0: + resolution: {integrity: sha512-XCdhMy33sgxCwJ4JgjSasLGgOjFm9/i+IEhO03gPHroJeTBhM7ZQ1+v3j7di9nNKtcLGjVvKjHVOkTbVop/R/Q==} engines: {node: '>= 4.0.0'} merge-stream@2.0.0: @@ -3617,10 +4362,23 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mimic-response@3.1.0: + resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} + engines: {node: '>=10'} + min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -3629,6 +4387,9 @@ packages: resolution: {integrity: sha512-IPZ167aShDZZUMdRk66cyQAW3qr0WzbHkPdMYa8bzZhlHhO3jALbKdxcaak7W9FfT2rZNpQuUu4Od7ILEpXSaw==} engines: {node: 20 || >=22} + minimatch@3.1.2: + resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} + minimatch@9.0.1: resolution: {integrity: sha512-0jWhJpD/MdhPXwPuiRkCbfYfSKp2qnn2eOc279qI7f+osl/l+prKSrvhg157zSYvx/1nmgn2NqdT6k2Z7zSH9w==} engines: {node: '>=16 || 14 >=14.17'} @@ -3648,6 +4409,14 @@ packages: resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + mocha@11.7.2: + resolution: {integrity: sha512-lkqVJPmqqG/w5jmmFtiRvtA2jkDyNVUcefFJKb2uyX4dekk8Okgqop3cgbFiaIvj8uCRJVTP5x9dfxGyXm2jvQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + motion-dom@12.23.6: resolution: {integrity: sha512-G2w6Nw7ZOVSzcQmsdLc0doMe64O/Sbuc2bVAbgMz6oP/6/pRStKRiVRV4bQfHp5AHYAKEGhEdVHTM+R3FDgi5w==} @@ -3668,6 +4437,9 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + nano-staged@0.8.0: resolution: {integrity: sha512-QSEqPGTCJbkHU2yLvfY6huqYPjdBrOaTMKatO1F8nCSrkQGXeKwtCiCnsdxnuMhbg3DTVywKaeWLGCE5oJpq0g==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3678,6 +4450,9 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -3685,6 +4460,13 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + node-abi@3.77.0: + resolution: {integrity: sha512-DSmt0OEcLoK4i3NuscSbGjOf3bqiDEutejqENSplMSFA/gmB8mkED9G4pKWnPl7MDU4rSHebKPHeitpDfyH0cQ==} + engines: {node: '>=10'} + + node-addon-api@4.3.0: + resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} + node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} @@ -3694,11 +4476,19 @@ packages: node-releases@2.0.19: resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-sarif-builder@3.2.0: + resolution: {integrity: sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==} + engines: {node: '>=18'} + nopt@7.2.1: resolution: {integrity: sha512-taM24ViiimT/XntxbPyJQzCG+p4EKOpgD3mxFwW38mGjVUrfERQOeY4EDHjdnptttfHuHQXFx+lTP08Q+mLa/w==} engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} hasBin: true + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} @@ -3710,11 +4500,14 @@ packages: nprogress@0.2.0: resolution: {integrity: sha512-I19aIingLgR1fmhftnbWWO3dXc0hSxqHQHQb3H8m+K3TnEn/iSeTZZOyvKXWqQESMwuUVnatlCnZdLBZZt2VSA==} + nth-check@2.1.1: + resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} + nwsapi@2.2.20: resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} - nx@21.5.2: - resolution: {integrity: sha512-hvq3W6mWsNuXzO1VWXpVcbGuF3e4cx0PyPavy8RgZUinbnh3Gk+f+2DGXyjKEyAG3Ql0Nl3V4RJERZzXEVl7EA==} + nx@21.5.3: + resolution: {integrity: sha512-+XwzK3OWZw/7zLdhNHBms9VdAA8F6w6QsX8qFQ3+3CnbqEy0IDmVxTXb8c711LDMbEtNn94EiWvSV6C00FKw9Q==} hasBin: true peerDependencies: '@swc-node/register': ^1.8.0 @@ -3748,12 +4541,20 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + oniguruma-parser@0.12.1: resolution: {integrity: sha512-8Unqkvk1RYc6yq2WBYRj4hdnsAxVze8i7iPfQr8e4uSP3tRv0rpZcbGUDvxfQQcdwHt/e9PrMvGCsa8OqG9X3w==} oniguruma-to-es@4.3.3: resolution: {integrity: sha512-rPiZhzC3wXwE59YQMRDodUwwT9FZ9nNBwQQfsd1wfdtlKEyCdRV0avrTcSZ5xlIvGRVPd/cx6ZN45ECmS39xvg==} + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -3762,6 +4563,10 @@ packages: resolution: {integrity: sha512-zAKMgGXUim0Jyd6CXK9lraBnD3H5yPGBPPOkC23a2BG6hsm4Zu6OQSjQuEtV0BHDf4aKHcUFvJiGRrFuW3MG8g==} engines: {node: '>=10'} + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} + outdent@0.5.0: resolution: {integrity: sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==} @@ -3773,14 +4578,26 @@ packages: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} + p-limit@3.1.0: + resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} + engines: {node: '>=10'} + p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} + p-locate@5.0.0: + resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} + engines: {node: '>=10'} + p-map@2.1.0: resolution: {integrity: sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==} engines: {node: '>=6'} + p-map@7.0.3: + resolution: {integrity: sha512-VkndIv2fIB99swvQoA65bm+fsmt6UNdGeIB0oxBs+WhAhdh08QA04JXpI7rbB9r08/nkbysKoya9rtDERYOYMA==} + engines: {node: '>=18'} + p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -3791,9 +4608,25 @@ packages: package-manager-detector@0.2.10: resolution: {integrity: sha512-1wlNZK7HW+UE3eGCcMv3hDaYokhspuIeH6enXSnCL1eEZSVDsy/dYwo/4CczhUsrKLA1SSXB+qce8Glw5DEVtw==} + pako@1.0.11: + resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} + parse-entities@4.0.2: resolution: {integrity: sha512-GG2AQYWoLgL877gQIKeRPGO1xF9+eG1ujIb5soS5gPvLQ1y2o8FL90w2QWNdf9I361Mpp7726c+lj3U0qK1uGw==} + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + + parse-semver@1.1.1: + resolution: {integrity: sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==} + + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + parse5@7.3.0: resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} @@ -3811,6 +4644,10 @@ packages: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} + path-is-absolute@1.0.1: + resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} + engines: {node: '>=0.10.0'} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -3822,6 +4659,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.0: + resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} + engines: {node: 20 || >=22} + path-serializer@0.5.1: resolution: {integrity: sha512-bMTznw/TiZbmxlPQEV1pFatJFQcBKt3i9glDcPqygSx5xGrcM4MTCSjY+3SgW9Y628zfRmuJ1uAc/t/A3Tw0QA==} @@ -3843,6 +4684,9 @@ packages: peberminta@0.9.0: resolution: {integrity: sha512-XIxfHpEuSJbITd1H3EeQwpcZbTLHc+VVr8ANI9t5sit565tsI4/xK3KWTUFE2e6QiangUkh3B0jihzmGnNrRsQ==} + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -3850,6 +4694,10 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + picomatch@4.0.3: resolution: {integrity: sha512-5gTmgEY/sqK6gFXLIsQNH19lWb4ebPDLA4SdLP7dsWkIXHWlG66oPuVvXSGFPppYZz8ZDZq0dYYrbHfBCVUb1Q==} engines: {node: '>=12'} @@ -3862,6 +4710,13 @@ packages: resolution: {integrity: sha512-o8mkY4E/+LNUf6LzX96ht6k6CEDi65k9G2rjMtBe9Oo+VPKSvl+0GKHuH/AlG+GA5LPG/i5hrekkxUc3s2HU+Q==} hasBin: true + pluralize@2.0.0: + resolution: {integrity: sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + pngjs@3.4.0: resolution: {integrity: sha512-NCrCHhWmnQklfH4MtJMRjZ2a8c80qXeMlQMv2uVp9ISJMTt562SbGd6n2oq0PaPgKm7Z6pL9E2UlLIhC+SHL3w==} engines: {node: '>=4.0.0'} @@ -3874,6 +4729,11 @@ packages: resolution: {integrity: sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==} engines: {node: ^10 || ^12 || >=14} + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} + engines: {node: '>=10'} + hasBin: true + prettier-plugin-packagejson@2.5.19: resolution: {integrity: sha512-Qsqp4+jsZbKMpEGZB1UP1pxeAT8sCzne2IwnKkr+QhUe665EXUo3BAvTf1kAPCqyMv9kg3ZmO0+7eOni/C6Uag==} peerDependencies: @@ -3900,6 +4760,9 @@ packages: resolution: {integrity: sha512-D1tKtYvByrBkFLe2wHJl2bwMJIiT8rW+XA+TiataH79/FszLQMrpGEvzUVkzPau7OCO0Qnrhpe87PqtOAIB8Yw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} + process-nextick-args@2.0.1: + resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} + property-information@6.5.0: resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} @@ -3912,6 +4775,13 @@ packages: proxy-from-env@1.1.0: resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + pump@3.0.3: + resolution: {integrity: sha512-todwxLMY7/heScKmntwQG8CXVkWUOdYxIvY2s0VWAAMh/nd8SoYiRaKjlr7+iCs984f2P8zvrfWcDDYVb73NfA==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -3936,6 +4806,13 @@ packages: resolution: {integrity: sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==} engines: {node: '>= 0.8'} + rc-config-loader@4.1.3: + resolution: {integrity: sha512-kD7FqML7l800i6pS6pvLyIE2ncbk9Du8Q0gp/4hMPhJU6ZxApkoLcGD8ZeqgiAlfwZ6BlETq6qqe+12DUL207w==} + + rc@1.2.8: + resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} + hasBin: true + react-dom@19.1.1: resolution: {integrity: sha512-Dlq/5LAZgF0Gaz6yiqZCf6VCcZs1ghAJyrsu84Q/GT0gV+mCxbfmKNoGRKBYMJ8IEdGPqu49YWXD02GCknEDkw==} peerDependencies: @@ -3971,10 +4848,21 @@ packages: resolution: {integrity: sha512-w8nqGImo45dmMIfljjMwOGtbmC/mk4CMYhWIicdSflH91J9TyCyczcPFXJzrZ/ZXcgGRFeP6BU0BEJTw6tZdfQ==} engines: {node: '>=0.10.0'} + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} + read-yaml-file@1.1.0: resolution: {integrity: sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==} engines: {node: '>=6'} + read@1.0.7: + resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} + engines: {node: '>=0.8'} + + readable-stream@2.3.8: + resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} + readable-stream@3.6.2: resolution: {integrity: sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==} engines: {node: '>= 6'} @@ -4070,6 +4958,10 @@ packages: resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} engines: {node: '>=8'} + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + reusify@1.1.0: resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} @@ -4077,6 +4969,19 @@ packages: rrweb-cssom@0.8.0: resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + rsbuild-plugin-dts@0.12.2: + resolution: {integrity: sha512-qI7wwT7R6T5LzuwcBWt6dZYaS1Fv5Tg2D3OHbAX9MXYn2oJ3eJjdwXU2LcLALd1CpXUPaQCjOTHRMJzHT0++JQ==} + engines: {node: '>=18.12.0'} + peerDependencies: + '@microsoft/api-extractor': ^7 + '@rsbuild/core': 1.x + typescript: ^5 + peerDependenciesMeta: + '@microsoft/api-extractor': + optional: true + typescript: + optional: true + rsbuild-plugin-dts@0.13.3: resolution: {integrity: sha512-clPsUpLq4URqntM0xCF6WMBBx+iTxU0z2mkdJNLnWEx7qPjxAEiHOqFYPQsvaHxNkKRan6Yb75I7XhRMjo0Vrg==} engines: {node: '>=18.12.0'} @@ -4120,12 +5025,19 @@ packages: rspress-plugin-sitemap@1.2.1: resolution: {integrity: sha512-JMf2/SKerX3oiFuNaRAnPJxOtBl5hOF0qupK63Fh9CaTb6Mn440iximV+1V0fd/XeOhHlN0oLJPFUDrrkgkcwg==} + run-applescript@7.1.0: + resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} + engines: {node: '>=18'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} rxjs@7.8.2: resolution: {integrity: sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==} + safe-buffer@5.1.2: + resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + safe-buffer@5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} @@ -4246,6 +5158,9 @@ packages: engines: {node: '>=14.0.0'} hasBin: true + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + saxes@6.0.0: resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} engines: {node: '>=v12.22.7'} @@ -4257,6 +5172,11 @@ packages: resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} engines: {node: '>= 10.13.0'} + secretlint@10.2.2: + resolution: {integrity: sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==} + engines: {node: '>=20.0.0'} + hasBin: true + section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -4264,6 +5184,10 @@ packages: selderee@0.11.0: resolution: {integrity: sha512-5TF+l7p4+OsnP8BCCvSyZiSPc4x4//p5uPwK8TCnVPJYRmU2aYKMpOXvw8zM5a5JvuuCGN1jmsMwuU2W02ukfA==} + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} + hasBin: true + semver@6.3.1: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true @@ -4285,6 +5209,9 @@ packages: resolution: {integrity: sha512-zTEg4HL0RwVrqcWs3ztF+x1vkxfm0lP+MQQFPiMJTKVceBwEV0A569Ou8l9IYQG8jOZdMVI1hGsc0tmeD2o/Lw==} engines: {node: '>=11.0'} + setimmediate@1.0.5: + resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} @@ -4322,6 +5249,12 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + simple-git-hooks@2.13.1: resolution: {integrity: sha512-WszCLXwT4h2k1ufIXAgsbiTOazqqevFCIncOuUBZJ91DdvWcC5+OFkluWRQPrcuSYd8fjq+o2y1QfWqYMoAToQ==} hasBin: true @@ -4382,6 +5315,18 @@ packages: spawndamnit@3.0.1: resolution: {integrity: sha512-MmnduQUuHCoFckZoWnXsTg7JaiLBJrKFj9UI2MbRPGaJeVpsLcVBu6P/IGZovziM/YBsellCmsprgNA+w0CzVg==} + 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-license-ids@3.0.22: + resolution: {integrity: sha512-4PRT4nh1EImPbt2jASOKHX7PB7I+e4IWNLvkKFDxNhJlfjbYlleYQh285Z/3mPTHSAK/AvdMmw5BNNuYH8ShgQ==} + sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} @@ -4410,6 +5355,10 @@ packages: std-env@3.9.0: resolution: {integrity: sha512-UGvjygr6F6tpH7o2qyqR6QYpwraIjKSdtzyBdyytFOHmPZY917kwdwLG0RbOjWOnKmnm3PeHjaoLLMie7kPLQw==} + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -4422,6 +5371,13 @@ packages: resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} engines: {node: '>=12'} + string-width@7.2.0: + resolution: {integrity: sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ==} + engines: {node: '>=18'} + + string_decoder@1.1.1: + resolution: {integrity: sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==} + string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} @@ -4448,10 +5404,17 @@ packages: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} + strip-json-comments@2.0.1: + resolution: {integrity: sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==} + engines: {node: '>=0.10.0'} + strip-json-comments@3.1.1: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + structured-source@4.0.0: + resolution: {integrity: sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==} + style-to-js@1.1.16: resolution: {integrity: sha512-/Q6ld50hKYPH3d/r6nr117TZkHR0w0kGGIVfpG9N6D8NymRPM9RqCUv4pRpJ62E5DqOYx2AFpbZMyCPnjQCnOw==} @@ -4466,6 +5429,14 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + supports-color@9.4.0: + resolution: {integrity: sha512-VL+lNrEoIXww1coLPOmiEmK/0sGigko5COxI09KzHc2VJXJsQ37UaQ+8quuxjDeA7+KnLGTWRyOXSLLR2Wb4jw==} + engines: {node: '>=12'} + + supports-hyperlinks@3.2.0: + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} + engines: {node: '>=14.18'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -4496,6 +5467,9 @@ packages: resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} engines: {node: '>=6'} + tar-fs@2.1.3: + resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} + tar-stream@2.2.0: resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} engines: {node: '>=6'} @@ -4504,6 +5478,10 @@ packages: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + terminal-link@4.0.0: + resolution: {integrity: sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==} + engines: {node: '>=18'} + terser-webpack-plugin@5.3.14: resolution: {integrity: sha512-vkZjpUjb6OMS7dhV+tILUW6BhpDR7P2L/aQSAv+Uwk+m8KATX9EccViHTJR2qDtACKPIYndLGCyl3FMo+r2LMw==} engines: {node: '>= 10.13.0'} @@ -4525,6 +5503,17 @@ packages: engines: {node: '>=10'} hasBin: true + test-exclude@6.0.0: + resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} + engines: {node: '>=8'} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + textextensions@6.11.0: + resolution: {integrity: sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==} + engines: {node: '>=4'} + thingies@2.5.0: resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} engines: {node: '>=10.18'} @@ -4607,6 +5596,13 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tunnel-agent@0.6.0: + resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + + tunnel@0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + type-detect@4.0.8: resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==} engines: {node: '>=4'} @@ -4623,10 +5619,17 @@ packages: resolution: {integrity: sha512-2/AwEFQDFEy30iOLjrvHDIH7e4HEWH+f1Yl1bI5XMqzuoCUqwYCdxachgsgv0og/JdVZUhbfjcJAoHj5L1753A==} engines: {node: '>=16'} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + type-is@1.6.18: resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} engines: {node: '>= 0.6'} + typed-rest-client@1.8.11: + resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} + typescript@5.8.2: resolution: {integrity: sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==} engines: {node: '>=14.17'} @@ -4637,12 +5640,29 @@ packages: engines: {node: '>=14.17'} hasBin: true + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + underscore@1.13.7: + resolution: {integrity: sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==} + + undici-types@6.20.0: + resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} + undici@7.16.0: + resolution: {integrity: sha512-QEg3HPMll0o3t2ourKwOeUAZ159Kn9mx5pnzHRQO8+Wixmh88YdZRiIwat0iNzNNXn0yoEtXJqFpyW7eM8BV7g==} + engines: {node: '>=20.18.1'} + unhead@2.0.14: resolution: {integrity: sha512-dRP6OCqtShhMVZQe1F4wdt/WsYl2MskxKK+cvfSo0lQnrPJ4oAUQEkxRg7pPP+vJENabhlir31HwAyHUv7wfMg==} + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + unicorn-magic@0.3.0: resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} engines: {node: '>=18'} @@ -4696,6 +5716,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-join@4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + util-deprecate@1.0.2: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} @@ -4703,6 +5726,17 @@ packages: resolution: {integrity: sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==} engines: {node: '>= 0.4.0'} + uuid@8.3.2: + resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} + hasBin: true + + v8-to-istanbul@9.3.0: + resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} + engines: {node: '>=10.12.0'} + + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + varint@6.0.0: resolution: {integrity: sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==} @@ -4710,6 +5744,10 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + version-range@4.15.0: + resolution: {integrity: sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==} + engines: {node: '>=4'} + vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -4801,6 +5839,9 @@ packages: engines: {node: '>= 8'} hasBin: true + workerpool@9.3.3: + resolution: {integrity: sha512-slxCaKbYjEdFT/o2rH9xS1hf4uRDch1w7Uo+apxhZ+sf/1d9e0ZVkn42kPNGP2dgjIx6YFvSevj0zHvbWe2jdw==} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -4824,8 +5865,8 @@ packages: utf-8-validate: optional: true - ws@8.18.2: - resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} + ws@8.18.3: + resolution: {integrity: sha512-PEIGCY5tSlUt50cqyMXfCzX+oOPqN0vuGqWzbcJ2xvnkzkq46oOpz7dQaTDBdfICb4N14+GARUDw2XV2N4tvzg==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -4836,10 +5877,22 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + xml-name-validator@5.0.0: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} + xml2js@0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + engines: {node: '>=4.0.0'} + + xmlbuilder@11.0.1: + resolution: {integrity: sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==} + engines: {node: '>=4.0'} + xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} @@ -4862,10 +5915,24 @@ packages: resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} + yargs-unparser@2.0.0: + resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} + engines: {node: '>=10'} + yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} + yauzl@2.10.0: + resolution: {integrity: sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==} + + yazl@2.5.1: + resolution: {integrity: sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==} + + yocto-queue@0.1.0: + resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} + engines: {node: '>=10'} + zwitch@2.0.4: resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} @@ -5036,26 +6103,115 @@ snapshots: '@ast-grep/napi-win32-ia32-msvc': 0.37.0 '@ast-grep/napi-win32-x64-msvc': 0.37.0 - '@babel/code-frame@7.26.2': + '@azu/format-text@1.0.2': {} + + '@azu/style-format@1.0.1': dependencies: - '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 + '@azu/format-text': 1.0.2 - '@babel/code-frame@7.27.1': + '@azure/abort-controller@2.1.2': dependencies: - '@babel/helper-validator-identifier': 7.27.1 - js-tokens: 4.0.0 - picocolors: 1.1.1 + tslib: 2.8.1 - '@babel/compat-data@7.28.0': {} + '@azure/core-auth@1.10.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-util': 1.13.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color - '@babel/core@7.28.3': + '@azure/core-client@1.10.0': dependencies: - '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.27.1 - '@babel/generator': 7.28.3 - '@babel/helper-compilation-targets': 7.27.2 + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.0 + '@azure/core-rest-pipeline': 1.22.0 + '@azure/core-tracing': 1.3.0 + '@azure/core-util': 1.13.0 + '@azure/logger': 1.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-rest-pipeline@1.22.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.0 + '@azure/core-tracing': 1.3.0 + '@azure/core-util': 1.13.0 + '@azure/logger': 1.3.0 + '@typespec/ts-http-runtime': 0.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-tracing@1.3.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-util@1.13.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@typespec/ts-http-runtime': 0.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/identity@4.12.0': + dependencies: + '@azure/abort-controller': 2.1.2 + '@azure/core-auth': 1.10.0 + '@azure/core-client': 1.10.0 + '@azure/core-rest-pipeline': 1.22.0 + '@azure/core-tracing': 1.3.0 + '@azure/core-util': 1.13.0 + '@azure/logger': 1.3.0 + '@azure/msal-browser': 4.22.1 + '@azure/msal-node': 3.7.3 + open: 10.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/logger@1.3.0': + dependencies: + '@typespec/ts-http-runtime': 0.3.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/msal-browser@4.22.1': + dependencies: + '@azure/msal-common': 15.12.0 + + '@azure/msal-common@15.12.0': {} + + '@azure/msal-node@3.7.3': + dependencies: + '@azure/msal-common': 15.12.0 + jsonwebtoken: 9.0.2 + uuid: 8.3.2 + + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/code-frame@7.27.1': + dependencies: + '@babel/helper-validator-identifier': 7.27.1 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.28.0': {} + + '@babel/core@7.28.3': + dependencies: + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.28.3 + '@babel/helper-compilation-targets': 7.27.2 '@babel/helper-module-transforms': 7.28.3(@babel/core@7.28.3) '@babel/helpers': 7.28.3 '@babel/parser': 7.28.3 @@ -5063,7 +6219,7 @@ snapshots: '@babel/traverse': 7.28.3 '@babel/types': 7.28.2 convert-source-map: 2.0.0 - debug: 4.4.1 + debug: 4.3.7(supports-color@8.1.1) gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -5086,7 +6242,7 @@ snapshots: dependencies: '@babel/compat-data': 7.28.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.25.1 + browserslist: 4.24.5 lru-cache: 5.1.1 semver: 6.3.1 @@ -5245,7 +6401,7 @@ snapshots: '@babel/parser': 7.28.3 '@babel/template': 7.27.2 '@babel/types': 7.28.2 - debug: 4.4.1 + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -5254,6 +6410,8 @@ snapshots: '@babel/helper-string-parser': 7.27.1 '@babel/helper-validator-identifier': 7.27.1 + '@bcoe/v8-coverage@0.2.3': {} + '@biomejs/biome@2.2.4': optionalDependencies: '@biomejs/cli-darwin-arm64': 2.2.4 @@ -5320,7 +6478,7 @@ snapshots: dependencies: '@changesets/types': 6.1.0 - '@changesets/cli@2.29.7(@types/node@22.16.5)': + '@changesets/cli@2.29.7(@types/node@22.18.6)': dependencies: '@changesets/apply-release-plan': 7.0.13 '@changesets/assemble-release-plan': 6.0.9 @@ -5336,7 +6494,7 @@ snapshots: '@changesets/should-skip-package': 0.1.2 '@changesets/types': 6.1.0 '@changesets/write': 0.4.0 - '@inquirer/external-editor': 1.0.1(@types/node@22.16.5) + '@inquirer/external-editor': 1.0.1(@types/node@22.18.6) '@manypkg/get-packages': 1.1.3 ansi-colors: 4.1.3 ci-info: 3.9.0 @@ -5475,22 +6633,38 @@ snapshots: '@emnapi/wasi-threads': 1.0.4 tslib: 2.8.1 + '@emnapi/core@1.5.0': + dependencies: + '@emnapi/wasi-threads': 1.1.0 + tslib: 2.8.1 + optional: true + '@emnapi/runtime@1.4.5': dependencies: tslib: 2.8.1 + '@emnapi/runtime@1.5.0': + dependencies: + tslib: 2.8.1 + optional: true + '@emnapi/wasi-threads@1.0.4': dependencies: tslib: 2.8.1 + '@emnapi/wasi-threads@1.1.0': + dependencies: + tslib: 2.8.1 + optional: true + '@epic-web/invariant@1.0.0': {} - '@inquirer/external-editor@1.0.1(@types/node@22.16.5)': + '@inquirer/external-editor@1.0.1(@types/node@22.18.6)': dependencies: chardet: 2.1.0 iconv-lite: 0.6.3 optionalDependencies: - '@types/node': 22.16.5 + '@types/node': 22.18.6 '@isaacs/balanced-match@4.0.1': {} @@ -5507,6 +6681,8 @@ snapshots: wrap-ansi: 8.1.0 wrap-ansi-cjs: wrap-ansi@7.0.0 + '@istanbuljs/schema@0.1.3': {} + '@jest/diff-sequences@30.0.1': {} '@jest/expect-utils@30.0.5': @@ -5519,7 +6695,7 @@ snapshots: '@jest/pattern@30.0.1': dependencies: - '@types/node': 22.16.5 + '@types/node': 22.18.6 jest-regex-util: 30.0.1 '@jest/schemas@30.0.5': @@ -5532,13 +6708,13 @@ snapshots: '@jest/schemas': 30.0.5 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.16.5 + '@types/node': 22.18.6 '@types/yargs': 17.0.33 chalk: 4.1.2 '@jridgewell/gen-mapping@0.3.13': dependencies: - '@jridgewell/sourcemap-codec': 1.5.5 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.31 '@jridgewell/resolve-uri@3.1.2': {} @@ -5548,12 +6724,14 @@ snapshots: '@jridgewell/gen-mapping': 0.3.13 '@jridgewell/trace-mapping': 0.3.31 + '@jridgewell/sourcemap-codec@1.5.0': {} + '@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 + '@jridgewell/sourcemap-codec': 1.5.0 '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': dependencies: @@ -5635,35 +6813,57 @@ snapshots: transitivePeerDependencies: - supports-color - '@mdx-js/react@2.3.0(react@19.1.1)': + '@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1)': dependencies: '@types/mdx': 2.0.13 '@types/react': 19.1.13 react: 19.1.1 - '@mdx-js/react@3.1.1(@types/react@19.1.13)(react@19.1.1)': + '@microsoft/api-extractor-model@7.30.7(@types/node@22.13.8)': dependencies: - '@types/mdx': 2.0.13 - '@types/react': 19.1.13 - react: 19.1.1 + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.14.0(@types/node@22.13.8) + transitivePeerDependencies: + - '@types/node' + optional: true + + '@microsoft/api-extractor-model@7.30.7(@types/node@22.18.6)': + dependencies: + '@microsoft/tsdoc': 0.15.1 + '@microsoft/tsdoc-config': 0.17.1 + '@rushstack/node-core-library': 5.14.0(@types/node@22.18.6) + transitivePeerDependencies: + - '@types/node' - '@microsoft/api-extractor-model@7.30.7(@types/node@22.16.5)': + '@microsoft/api-extractor@7.52.13(@types/node@22.13.8)': dependencies: + '@microsoft/api-extractor-model': 7.30.7(@types/node@22.13.8) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.14.0(@types/node@22.16.5) + '@rushstack/node-core-library': 5.14.0(@types/node@22.13.8) + '@rushstack/rig-package': 0.5.3 + '@rushstack/terminal': 0.16.0(@types/node@22.13.8) + '@rushstack/ts-command-line': 5.0.3(@types/node@22.13.8) + lodash: 4.17.21 + minimatch: 10.0.3 + resolve: 1.22.10 + semver: 7.5.4 + source-map: 0.6.1 + typescript: 5.8.2 transitivePeerDependencies: - '@types/node' + optional: true - '@microsoft/api-extractor@7.52.13(@types/node@22.16.5)': + '@microsoft/api-extractor@7.52.13(@types/node@22.18.6)': dependencies: - '@microsoft/api-extractor-model': 7.30.7(@types/node@22.16.5) + '@microsoft/api-extractor-model': 7.30.7(@types/node@22.18.6) '@microsoft/tsdoc': 0.15.1 '@microsoft/tsdoc-config': 0.17.1 - '@rushstack/node-core-library': 5.14.0(@types/node@22.16.5) + '@rushstack/node-core-library': 5.14.0(@types/node@22.18.6) '@rushstack/rig-package': 0.5.3 - '@rushstack/terminal': 0.16.0(@types/node@22.16.5) - '@rushstack/ts-command-line': 5.0.3(@types/node@22.16.5) + '@rushstack/terminal': 0.16.0(@types/node@22.18.6) + '@rushstack/ts-command-line': 5.0.3(@types/node@22.18.6) lodash: 4.17.21 minimatch: 10.0.3 resolve: 1.22.10 @@ -5720,6 +6920,13 @@ snapshots: '@tybys/wasm-util': 0.10.0 optional: true + '@napi-rs/wasm-runtime@1.0.5': + dependencies: + '@emnapi/core': 1.5.0 + '@emnapi/runtime': 1.5.0 + '@tybys/wasm-util': 0.10.1 + optional: true + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -5732,34 +6939,34 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.19.1 - '@nx/nx-darwin-arm64@21.5.2': + '@nx/nx-darwin-arm64@21.5.3': optional: true - '@nx/nx-darwin-x64@21.5.2': + '@nx/nx-darwin-x64@21.5.3': optional: true - '@nx/nx-freebsd-x64@21.5.2': + '@nx/nx-freebsd-x64@21.5.3': optional: true - '@nx/nx-linux-arm-gnueabihf@21.5.2': + '@nx/nx-linux-arm-gnueabihf@21.5.3': optional: true - '@nx/nx-linux-arm64-gnu@21.5.2': + '@nx/nx-linux-arm64-gnu@21.5.3': optional: true - '@nx/nx-linux-arm64-musl@21.5.2': + '@nx/nx-linux-arm64-musl@21.5.3': optional: true - '@nx/nx-linux-x64-gnu@21.5.2': + '@nx/nx-linux-x64-gnu@21.5.3': optional: true - '@nx/nx-linux-x64-musl@21.5.2': + '@nx/nx-linux-x64-musl@21.5.3': optional: true - '@nx/nx-win32-arm64-msvc@21.5.2': + '@nx/nx-win32-arm64-msvc@21.5.3': optional: true - '@nx/nx-win32-x64-msvc@21.5.2': + '@nx/nx-win32-x64-msvc@21.5.3': optional: true '@one-ini/wasm@0.1.1': {} @@ -5842,9 +7049,17 @@ snapshots: core-js: 3.45.1 jiti: 2.5.1 - '@rsbuild/core@1.5.7': + '@rsbuild/core@1.5.0-beta.4': + dependencies: + '@rspack/core': 1.5.0-beta.1(@swc/helpers@0.5.17) + '@rspack/lite-tapable': 1.0.1 + '@swc/helpers': 0.5.17 + core-js: 3.45.1 + jiti: 2.5.1 + + '@rsbuild/core@1.5.10': dependencies: - '@rspack/core': 1.5.4(@swc/helpers@0.5.17) + '@rspack/core': 1.5.5(@swc/helpers@0.5.17) '@rspack/lite-tapable': 1.0.1 '@swc/helpers': 0.5.17 core-js: 3.45.1 @@ -5864,7 +7079,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@rsbuild/plugin-check-syntax@1.3.0(@rsbuild/core@1.5.7)': + '@rsbuild/plugin-check-syntax@1.3.0(@rsbuild/core@1.5.10)': dependencies: acorn: 8.15.0 browserslist-to-es-version: 1.0.0 @@ -5872,7 +7087,7 @@ snapshots: picocolors: 1.1.1 source-map: 0.7.4 optionalDependencies: - '@rsbuild/core': 1.5.7 + '@rsbuild/core': 1.5.10 '@rsbuild/plugin-react@1.4.0(@rsbuild/core@1.5.0)': dependencies: @@ -5882,17 +7097,17 @@ snapshots: transitivePeerDependencies: - webpack-hot-middleware - '@rsbuild/plugin-react@1.4.0(@rsbuild/core@1.5.7)': + '@rsbuild/plugin-react@1.4.0(@rsbuild/core@1.5.10)': dependencies: - '@rsbuild/core': 1.5.7 + '@rsbuild/core': 1.5.10 '@rspack/plugin-react-refresh': 1.5.0(react-refresh@0.17.0) react-refresh: 0.17.0 transitivePeerDependencies: - webpack-hot-middleware - '@rsbuild/plugin-sass@1.4.0(@rsbuild/core@1.5.7)': + '@rsbuild/plugin-sass@1.4.0(@rsbuild/core@1.5.10)': dependencies: - '@rsbuild/core': 1.5.7 + '@rsbuild/core': 1.5.10 deepmerge: 4.3.1 loader-utils: 2.0.4 postcss: 8.5.6 @@ -5910,11 +7125,11 @@ snapshots: - '@babel/core' - supports-color - '@rsbuild/plugin-vue@1.1.2(@rsbuild/core@1.5.0)(vue@3.5.21(typescript@5.9.2))': + '@rsbuild/plugin-vue@1.1.2(@rsbuild/core@1.5.0)(@swc/core@1.13.5(@swc/helpers@0.5.17))(vue@3.5.21(typescript@5.9.2))': dependencies: '@rsbuild/core': 1.5.0 - vue-loader: 17.4.2(vue@3.5.21(typescript@5.9.2))(webpack@5.101.2) - webpack: 5.101.2 + vue-loader: 17.4.2(vue@3.5.21(typescript@5.9.2))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + webpack: 5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)) transitivePeerDependencies: - '@swc/core' - '@vue/compiler-sfc' @@ -5925,13 +7140,13 @@ snapshots: '@rsdoctor/client@1.2.3': {} - '@rsdoctor/core@1.2.3(@rsbuild/core@1.5.7)(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2)': + '@rsdoctor/core@1.2.3(@rsbuild/core@1.5.10)(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: - '@rsbuild/plugin-check-syntax': 1.3.0(@rsbuild/core@1.5.7) - '@rsdoctor/graph': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) - '@rsdoctor/sdk': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) - '@rsdoctor/types': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) - '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) + '@rsbuild/plugin-check-syntax': 1.3.0(@rsbuild/core@1.5.10) + '@rsdoctor/graph': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/sdk': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/types': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) axios: 1.12.2 browserslist-load-config: 1.0.0 enhanced-resolve: 5.12.0 @@ -5950,10 +7165,10 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/graph@1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2)': + '@rsdoctor/graph@1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: - '@rsdoctor/types': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) - '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) + '@rsdoctor/types': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) lodash.unionby: 4.8.0 source-map: 0.7.4 transitivePeerDependencies: @@ -5961,16 +7176,16 @@ snapshots: - supports-color - webpack - '@rsdoctor/rspack-plugin@1.2.3(@rsbuild/core@1.5.7)(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2)': + '@rsdoctor/rspack-plugin@1.2.3(@rsbuild/core@1.5.10)(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: - '@rsdoctor/core': 1.2.3(@rsbuild/core@1.5.7)(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) - '@rsdoctor/graph': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) - '@rsdoctor/sdk': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) - '@rsdoctor/types': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) - '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) + '@rsdoctor/core': 1.2.3(@rsbuild/core@1.5.10)(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/graph': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/sdk': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/types': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) lodash: 4.17.21 optionalDependencies: - '@rspack/core': 1.5.4(@swc/helpers@0.5.17) + '@rspack/core': 1.5.5(@swc/helpers@0.5.17) transitivePeerDependencies: - '@rsbuild/core' - bufferutil @@ -5979,12 +7194,12 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/sdk@1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2)': + '@rsdoctor/sdk@1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: '@rsdoctor/client': 1.2.3 - '@rsdoctor/graph': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) - '@rsdoctor/types': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) - '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) + '@rsdoctor/graph': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/types': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) '@types/fs-extra': 11.0.4 body-parser: 1.20.3 cors: 2.8.5 @@ -6003,20 +7218,20 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/types@1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2)': + '@rsdoctor/types@1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: '@types/connect': 3.4.38 '@types/estree': 1.0.5 '@types/tapable': 2.2.7 source-map: 0.7.4 optionalDependencies: - '@rspack/core': 1.5.4(@swc/helpers@0.5.17) - webpack: 5.101.2 + '@rspack/core': 1.5.5(@swc/helpers@0.5.17) + webpack: 5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)) - '@rsdoctor/utils@1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2)': + '@rsdoctor/utils@1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: '@babel/code-frame': 7.26.2 - '@rsdoctor/types': 1.2.3(@rspack/core@1.5.4(@swc/helpers@0.5.17))(webpack@5.101.2) + '@rsdoctor/types': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) '@types/estree': 1.0.5 acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) @@ -6037,12 +7252,21 @@ snapshots: - supports-color - webpack - '@rslib/core@0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.16.5))(typescript@5.9.2)': + '@rslib/core@0.12.2(@microsoft/api-extractor@7.52.13(@types/node@22.13.8))(typescript@5.9.2)': + dependencies: + '@rsbuild/core': 1.5.0-beta.4 + rsbuild-plugin-dts: 0.12.2(@microsoft/api-extractor@7.52.13(@types/node@22.13.8))(@rsbuild/core@1.5.0-beta.4)(typescript@5.9.2) + tinyglobby: 0.2.15 + optionalDependencies: + '@microsoft/api-extractor': 7.52.13(@types/node@22.13.8) + typescript: 5.9.2 + + '@rslib/core@0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.18.6))(typescript@5.9.2)': dependencies: - '@rsbuild/core': 1.5.7 - rsbuild-plugin-dts: 0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.16.5))(@rsbuild/core@1.5.7)(typescript@5.9.2) + '@rsbuild/core': 1.5.10 + rsbuild-plugin-dts: 0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.18.6))(@rsbuild/core@1.5.10)(typescript@5.9.2) optionalDependencies: - '@microsoft/api-extractor': 7.52.13(@types/node@22.16.5) + '@microsoft/api-extractor': 7.52.13(@types/node@22.18.6) typescript: 5.9.2 transitivePeerDependencies: - '@typescript/native-preview' @@ -6077,37 +7301,55 @@ snapshots: '@rspack/binding-darwin-arm64@1.5.0': optional: true - '@rspack/binding-darwin-arm64@1.5.4': + '@rspack/binding-darwin-arm64@1.5.0-beta.1': + optional: true + + '@rspack/binding-darwin-arm64@1.5.5': optional: true '@rspack/binding-darwin-x64@1.5.0': optional: true - '@rspack/binding-darwin-x64@1.5.4': + '@rspack/binding-darwin-x64@1.5.0-beta.1': + optional: true + + '@rspack/binding-darwin-x64@1.5.5': optional: true '@rspack/binding-linux-arm64-gnu@1.5.0': optional: true - '@rspack/binding-linux-arm64-gnu@1.5.4': + '@rspack/binding-linux-arm64-gnu@1.5.0-beta.1': + optional: true + + '@rspack/binding-linux-arm64-gnu@1.5.5': optional: true '@rspack/binding-linux-arm64-musl@1.5.0': optional: true - '@rspack/binding-linux-arm64-musl@1.5.4': + '@rspack/binding-linux-arm64-musl@1.5.0-beta.1': + optional: true + + '@rspack/binding-linux-arm64-musl@1.5.5': optional: true '@rspack/binding-linux-x64-gnu@1.5.0': optional: true - '@rspack/binding-linux-x64-gnu@1.5.4': + '@rspack/binding-linux-x64-gnu@1.5.0-beta.1': + optional: true + + '@rspack/binding-linux-x64-gnu@1.5.5': optional: true '@rspack/binding-linux-x64-musl@1.5.0': optional: true - '@rspack/binding-linux-x64-musl@1.5.4': + '@rspack/binding-linux-x64-musl@1.5.0-beta.1': + optional: true + + '@rspack/binding-linux-x64-musl@1.5.5': optional: true '@rspack/binding-wasm32-wasi@1.5.0': @@ -6115,27 +7357,41 @@ snapshots: '@napi-rs/wasm-runtime': 1.0.1 optional: true - '@rspack/binding-wasm32-wasi@1.5.4': + '@rspack/binding-wasm32-wasi@1.5.0-beta.1': dependencies: '@napi-rs/wasm-runtime': 1.0.1 optional: true + '@rspack/binding-wasm32-wasi@1.5.5': + dependencies: + '@napi-rs/wasm-runtime': 1.0.5 + optional: true + '@rspack/binding-win32-arm64-msvc@1.5.0': optional: true - '@rspack/binding-win32-arm64-msvc@1.5.4': + '@rspack/binding-win32-arm64-msvc@1.5.0-beta.1': + optional: true + + '@rspack/binding-win32-arm64-msvc@1.5.5': optional: true '@rspack/binding-win32-ia32-msvc@1.5.0': optional: true - '@rspack/binding-win32-ia32-msvc@1.5.4': + '@rspack/binding-win32-ia32-msvc@1.5.0-beta.1': + optional: true + + '@rspack/binding-win32-ia32-msvc@1.5.5': optional: true '@rspack/binding-win32-x64-msvc@1.5.0': optional: true - '@rspack/binding-win32-x64-msvc@1.5.4': + '@rspack/binding-win32-x64-msvc@1.5.0-beta.1': + optional: true + + '@rspack/binding-win32-x64-msvc@1.5.5': optional: true '@rspack/binding@1.5.0': @@ -6151,18 +7407,31 @@ snapshots: '@rspack/binding-win32-ia32-msvc': 1.5.0 '@rspack/binding-win32-x64-msvc': 1.5.0 - '@rspack/binding@1.5.4': + '@rspack/binding@1.5.0-beta.1': + optionalDependencies: + '@rspack/binding-darwin-arm64': 1.5.0-beta.1 + '@rspack/binding-darwin-x64': 1.5.0-beta.1 + '@rspack/binding-linux-arm64-gnu': 1.5.0-beta.1 + '@rspack/binding-linux-arm64-musl': 1.5.0-beta.1 + '@rspack/binding-linux-x64-gnu': 1.5.0-beta.1 + '@rspack/binding-linux-x64-musl': 1.5.0-beta.1 + '@rspack/binding-wasm32-wasi': 1.5.0-beta.1 + '@rspack/binding-win32-arm64-msvc': 1.5.0-beta.1 + '@rspack/binding-win32-ia32-msvc': 1.5.0-beta.1 + '@rspack/binding-win32-x64-msvc': 1.5.0-beta.1 + + '@rspack/binding@1.5.5': optionalDependencies: - '@rspack/binding-darwin-arm64': 1.5.4 - '@rspack/binding-darwin-x64': 1.5.4 - '@rspack/binding-linux-arm64-gnu': 1.5.4 - '@rspack/binding-linux-arm64-musl': 1.5.4 - '@rspack/binding-linux-x64-gnu': 1.5.4 - '@rspack/binding-linux-x64-musl': 1.5.4 - '@rspack/binding-wasm32-wasi': 1.5.4 - '@rspack/binding-win32-arm64-msvc': 1.5.4 - '@rspack/binding-win32-ia32-msvc': 1.5.4 - '@rspack/binding-win32-x64-msvc': 1.5.4 + '@rspack/binding-darwin-arm64': 1.5.5 + '@rspack/binding-darwin-x64': 1.5.5 + '@rspack/binding-linux-arm64-gnu': 1.5.5 + '@rspack/binding-linux-arm64-musl': 1.5.5 + '@rspack/binding-linux-x64-gnu': 1.5.5 + '@rspack/binding-linux-x64-musl': 1.5.5 + '@rspack/binding-wasm32-wasi': 1.5.5 + '@rspack/binding-win32-arm64-msvc': 1.5.5 + '@rspack/binding-win32-ia32-msvc': 1.5.5 + '@rspack/binding-win32-x64-msvc': 1.5.5 '@rspack/core@1.5.0(@swc/helpers@0.5.17)': dependencies: @@ -6172,10 +7441,18 @@ snapshots: optionalDependencies: '@swc/helpers': 0.5.17 - '@rspack/core@1.5.4(@swc/helpers@0.5.17)': + '@rspack/core@1.5.0-beta.1(@swc/helpers@0.5.17)': + dependencies: + '@module-federation/runtime-tools': 0.18.0 + '@rspack/binding': 1.5.0-beta.1 + '@rspack/lite-tapable': 1.0.1 + optionalDependencies: + '@swc/helpers': 0.5.17 + + '@rspack/core@1.5.5(@swc/helpers@0.5.17)': dependencies: '@module-federation/runtime-tools': 0.18.0 - '@rspack/binding': 1.5.4 + '@rspack/binding': 1.5.5 '@rspack/lite-tapable': 1.0.1 optionalDependencies: '@swc/helpers': 0.5.17 @@ -6188,16 +7465,16 @@ snapshots: html-entities: 2.6.0 react-refresh: 0.17.0 - '@rspress/core@2.0.0-beta.32(@types/react@19.1.13)': + '@rspress/core@2.0.0-beta.33(@types/react@19.1.13)': dependencies: '@mdx-js/mdx': 3.1.1 '@mdx-js/react': 3.1.1(@types/react@19.1.13)(react@19.1.1) - '@rsbuild/core': 1.5.7 - '@rsbuild/plugin-react': 1.4.0(@rsbuild/core@1.5.7) + '@rsbuild/core': 1.5.10 + '@rsbuild/plugin-react': 1.4.0(@rsbuild/core@1.5.10) '@rspress/mdx-rs': 0.6.6 - '@rspress/runtime': 2.0.0-beta.32 - '@rspress/shared': 2.0.0-beta.32 - '@rspress/theme-default': 2.0.0-beta.32 + '@rspress/runtime': 2.0.0-beta.33 + '@rspress/shared': 2.0.0-beta.33 + '@rspress/theme-default': 2.0.0-beta.33(@types/react@19.1.13) '@shikijs/rehype': 3.12.2 '@types/unist': 3.0.3 '@unhead/react': 2.0.14(react@19.1.1) @@ -6264,11 +7541,11 @@ snapshots: '@rspress/mdx-rs-win32-arm64-msvc': 0.6.6 '@rspress/mdx-rs-win32-x64-msvc': 0.6.6 - '@rspress/plugin-algolia@2.0.0-beta.32(@algolia/client-search@5.37.0)(@rspress/core@2.0.0-beta.32(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': + '@rspress/plugin-algolia@2.0.0-beta.32(@algolia/client-search@5.37.0)(@rspress/core@2.0.0-beta.33(@types/react@19.1.13))(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': dependencies: '@docsearch/css': 3.9.0 '@docsearch/react': 3.9.0(@algolia/client-search@5.37.0)(@types/react@19.1.13)(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@rspress/core': 2.0.0-beta.32(@types/react@19.1.13) + '@rspress/core': 2.0.0-beta.33(@types/react@19.1.13) transitivePeerDependencies: - '@algolia/client-search' - '@types/react' @@ -6276,9 +7553,9 @@ snapshots: - react-dom - search-insights - '@rspress/plugin-llms@2.0.0-beta.32(@rspress/core@2.0.0-beta.32(@types/react@19.1.13))': + '@rspress/plugin-llms@2.0.0-beta.32(@rspress/core@2.0.0-beta.33(@types/react@19.1.13))': dependencies: - '@rspress/core': 2.0.0-beta.32(@types/react@19.1.13) + '@rspress/core': 2.0.0-beta.33(@types/react@19.1.13) remark-mdx: 3.1.1 remark-parse: 11.0.0 remark-stringify: 11.0.0 @@ -6287,27 +7564,27 @@ snapshots: transitivePeerDependencies: - supports-color - '@rspress/runtime@2.0.0-beta.32': + '@rspress/runtime@2.0.0-beta.33': dependencies: - '@rspress/shared': 2.0.0-beta.32 + '@rspress/shared': 2.0.0-beta.33 '@unhead/react': 2.0.14(react@19.1.1) react: 19.1.1 react-dom: 19.1.1(react@19.1.1) react-router-dom: 6.30.1(react-dom@19.1.1(react@19.1.1))(react@19.1.1) - '@rspress/shared@2.0.0-beta.32': + '@rspress/shared@2.0.0-beta.33': dependencies: - '@rsbuild/core': 1.5.7 + '@rsbuild/core': 1.5.10 '@shikijs/rehype': 3.12.2 gray-matter: 4.0.3 lodash-es: 4.17.21 unified: 11.0.5 - '@rspress/theme-default@2.0.0-beta.32': + '@rspress/theme-default@2.0.0-beta.33(@types/react@19.1.13)': dependencies: - '@mdx-js/react': 2.3.0(react@19.1.1) - '@rspress/runtime': 2.0.0-beta.32 - '@rspress/shared': 2.0.0-beta.32 + '@mdx-js/react': 3.1.1(@types/react@19.1.13)(react@19.1.1) + '@rspress/runtime': 2.0.0-beta.33 + '@rspress/shared': 2.0.0-beta.33 '@unhead/react': 2.0.14(react@19.1.1) body-scroll-lock: 4.0.0-beta.0 copy-to-clipboard: 3.3.3 @@ -6320,6 +7597,7 @@ snapshots: react-dom: 19.1.1(react@19.1.1) shiki: 3.12.2 transitivePeerDependencies: + - '@types/react' - supports-color '@rstack-dev/doc-ui@1.11.0(react-dom@19.1.1(react@19.1.1))(react@19.1.1)': @@ -6330,7 +7608,7 @@ snapshots: - react - react-dom - '@rushstack/node-core-library@5.14.0(@types/node@22.16.5)': + '@rushstack/node-core-library@5.14.0(@types/node@22.13.8)': dependencies: ajv: 8.13.0 ajv-draft-04: 1.0.0(ajv@8.13.0) @@ -6341,29 +7619,135 @@ snapshots: resolve: 1.22.10 semver: 7.5.4 optionalDependencies: - '@types/node': 22.16.5 + '@types/node': 22.13.8 + optional: true + + '@rushstack/node-core-library@5.14.0(@types/node@22.18.6)': + dependencies: + ajv: 8.13.0 + ajv-draft-04: 1.0.0(ajv@8.13.0) + ajv-formats: 3.0.1 + fs-extra: 11.3.2 + import-lazy: 4.0.0 + jju: 1.4.0 + resolve: 1.22.10 + semver: 7.5.4 + optionalDependencies: + '@types/node': 22.18.6 '@rushstack/rig-package@0.5.3': dependencies: resolve: 1.22.10 strip-json-comments: 3.1.1 - '@rushstack/terminal@0.16.0(@types/node@22.16.5)': + '@rushstack/terminal@0.16.0(@types/node@22.13.8)': dependencies: - '@rushstack/node-core-library': 5.14.0(@types/node@22.16.5) + '@rushstack/node-core-library': 5.14.0(@types/node@22.13.8) supports-color: 8.1.1 optionalDependencies: - '@types/node': 22.16.5 + '@types/node': 22.13.8 + optional: true + + '@rushstack/terminal@0.16.0(@types/node@22.18.6)': + dependencies: + '@rushstack/node-core-library': 5.14.0(@types/node@22.18.6) + supports-color: 8.1.1 + optionalDependencies: + '@types/node': 22.18.6 + + '@rushstack/ts-command-line@5.0.3(@types/node@22.13.8)': + dependencies: + '@rushstack/terminal': 0.16.0(@types/node@22.13.8) + '@types/argparse': 1.0.38 + argparse: 1.0.10 + string-argv: 0.3.2 + transitivePeerDependencies: + - '@types/node' + optional: true - '@rushstack/ts-command-line@5.0.3(@types/node@22.16.5)': + '@rushstack/ts-command-line@5.0.3(@types/node@22.18.6)': dependencies: - '@rushstack/terminal': 0.16.0(@types/node@22.16.5) + '@rushstack/terminal': 0.16.0(@types/node@22.18.6) '@types/argparse': 1.0.38 argparse: 1.0.10 string-argv: 0.3.2 transitivePeerDependencies: - '@types/node' + '@secretlint/config-creator@10.2.2': + dependencies: + '@secretlint/types': 10.2.2 + + '@secretlint/config-loader@10.2.2': + dependencies: + '@secretlint/profiler': 10.2.2 + '@secretlint/resolver': 10.2.2 + '@secretlint/types': 10.2.2 + ajv: 8.17.1 + debug: 4.4.1 + rc-config-loader: 4.1.3 + transitivePeerDependencies: + - supports-color + + '@secretlint/core@10.2.2': + dependencies: + '@secretlint/profiler': 10.2.2 + '@secretlint/types': 10.2.2 + debug: 4.4.1 + structured-source: 4.0.0 + transitivePeerDependencies: + - supports-color + + '@secretlint/formatter@10.2.2': + dependencies: + '@secretlint/resolver': 10.2.2 + '@secretlint/types': 10.2.2 + '@textlint/linter-formatter': 15.2.2 + '@textlint/module-interop': 15.2.2 + '@textlint/types': 15.2.2 + chalk: 5.4.1 + debug: 4.4.1 + pluralize: 8.0.0 + strip-ansi: 7.1.2 + table: 6.9.0 + terminal-link: 4.0.0 + transitivePeerDependencies: + - supports-color + + '@secretlint/node@10.2.2': + dependencies: + '@secretlint/config-loader': 10.2.2 + '@secretlint/core': 10.2.2 + '@secretlint/formatter': 10.2.2 + '@secretlint/profiler': 10.2.2 + '@secretlint/source-creator': 10.2.2 + '@secretlint/types': 10.2.2 + debug: 4.4.1 + p-map: 7.0.3 + transitivePeerDependencies: + - supports-color + + '@secretlint/profiler@10.2.2': {} + + '@secretlint/resolver@10.2.2': {} + + '@secretlint/secretlint-formatter-sarif@10.2.2': + dependencies: + node-sarif-builder: 3.2.0 + + '@secretlint/secretlint-rule-no-dotenv@10.2.2': + dependencies: + '@secretlint/types': 10.2.2 + + '@secretlint/secretlint-rule-preset-recommend@10.2.2': {} + + '@secretlint/source-creator@10.2.2': + dependencies: + '@secretlint/types': 10.2.2 + istextorbinary: 9.5.0 + + '@secretlint/types@10.2.2': {} + '@selderee/plugin-htmlparser2@0.11.0': dependencies: domhandler: 5.0.3 @@ -6425,10 +7809,63 @@ snapshots: '@socket.io/component-emitter@3.1.2': {} + '@swc/core-darwin-arm64@1.13.5': + optional: true + + '@swc/core-darwin-x64@1.13.5': + optional: true + + '@swc/core-linux-arm-gnueabihf@1.13.5': + optional: true + + '@swc/core-linux-arm64-gnu@1.13.5': + optional: true + + '@swc/core-linux-arm64-musl@1.13.5': + optional: true + + '@swc/core-linux-x64-gnu@1.13.5': + optional: true + + '@swc/core-linux-x64-musl@1.13.5': + optional: true + + '@swc/core-win32-arm64-msvc@1.13.5': + optional: true + + '@swc/core-win32-ia32-msvc@1.13.5': + optional: true + + '@swc/core-win32-x64-msvc@1.13.5': + optional: true + + '@swc/core@1.13.5(@swc/helpers@0.5.17)': + dependencies: + '@swc/counter': 0.1.3 + '@swc/types': 0.1.24 + optionalDependencies: + '@swc/core-darwin-arm64': 1.13.5 + '@swc/core-darwin-x64': 1.13.5 + '@swc/core-linux-arm-gnueabihf': 1.13.5 + '@swc/core-linux-arm64-gnu': 1.13.5 + '@swc/core-linux-arm64-musl': 1.13.5 + '@swc/core-linux-x64-gnu': 1.13.5 + '@swc/core-linux-x64-musl': 1.13.5 + '@swc/core-win32-arm64-msvc': 1.13.5 + '@swc/core-win32-ia32-msvc': 1.13.5 + '@swc/core-win32-x64-msvc': 1.13.5 + '@swc/helpers': 0.5.17 + + '@swc/counter@0.1.3': {} + '@swc/helpers@0.5.17': dependencies: tslib: 2.8.1 + '@swc/types@0.1.24': + dependencies: + '@swc/counter': 0.1.3 + '@testing-library/dom@10.4.1': dependencies: '@babel/code-frame': 7.27.1 @@ -6459,11 +7896,45 @@ snapshots: '@types/react': 19.1.13 '@types/react-dom': 19.1.9(@types/react@19.1.13) + '@textlint/ast-node-types@15.2.2': {} + + '@textlint/linter-formatter@15.2.2': + dependencies: + '@azu/format-text': 1.0.2 + '@azu/style-format': 1.0.1 + '@textlint/module-interop': 15.2.2 + '@textlint/resolver': 15.2.2 + '@textlint/types': 15.2.2 + chalk: 4.1.2 + debug: 4.4.1 + js-yaml: 3.14.1 + lodash: 4.17.21 + pluralize: 2.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + table: 6.9.0 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + '@textlint/module-interop@15.2.2': {} + + '@textlint/resolver@15.2.2': {} + + '@textlint/types@15.2.2': + dependencies: + '@textlint/ast-node-types': 15.2.2 + '@tybys/wasm-util@0.10.0': dependencies: tslib: 2.8.1 optional: true + '@tybys/wasm-util@0.10.1': + dependencies: + tslib: 2.8.1 + optional: true + '@tybys/wasm-util@0.9.0': dependencies: tslib: 2.8.1 @@ -6501,11 +7972,11 @@ snapshots: '@types/connect@3.4.38': dependencies: - '@types/node': 22.16.5 + '@types/node': 22.18.6 '@types/cors@2.8.17': dependencies: - '@types/node': 22.16.5 + '@types/node': 22.18.6 '@types/debug@4.1.12': dependencies: @@ -6534,7 +8005,12 @@ snapshots: '@types/fs-extra@11.0.4': dependencies: '@types/jsonfile': 6.1.4 - '@types/node': 22.16.5 + '@types/node': 22.18.6 + + '@types/glob@7.2.0': + dependencies: + '@types/minimatch': 6.0.0 + '@types/node': 22.18.6 '@types/hast@3.0.4': dependencies: @@ -6565,7 +8041,7 @@ snapshots: '@types/jsdom@21.1.7': dependencies: - '@types/node': 22.16.5 + '@types/node': 22.18.6 '@types/tough-cookie': 4.0.5 parse5: 7.3.0 @@ -6573,7 +8049,7 @@ snapshots: '@types/jsonfile@6.1.4': dependencies: - '@types/node': 22.16.5 + '@types/node': 22.18.6 '@types/mdast@4.0.4': dependencies: @@ -6581,6 +8057,12 @@ snapshots: '@types/mdx@2.0.13': {} + '@types/minimatch@6.0.0': + dependencies: + minimatch: 10.0.3 + + '@types/mocha@10.0.10': {} + '@types/ms@2.1.0': {} '@types/node@12.20.55': {} @@ -6589,13 +8071,19 @@ snapshots: dependencies: undici-types: 6.21.0 - '@types/node@22.16.5': + '@types/node@22.13.8': + dependencies: + undici-types: 6.20.0 + + '@types/node@22.18.6': dependencies: undici-types: 6.21.0 + '@types/normalize-package-data@2.4.4': {} + '@types/pixelmatch@5.2.6': dependencies: - '@types/node': 22.16.5 + '@types/node': 22.18.6 '@types/react-dom@19.1.9(@types/react@19.1.13)': dependencies: @@ -6605,6 +8093,8 @@ snapshots: dependencies: csstype: 3.1.3 + '@types/sarif@2.1.7': {} + '@types/sinonjs__fake-timers@8.1.5': {} '@types/source-map-support@0.5.10': @@ -6623,14 +8113,28 @@ snapshots: '@types/unist@3.0.3': {} + '@types/vscode@1.103.0': {} + '@types/whatwg-mimetype@3.0.2': {} + '@types/ws@8.18.1': + dependencies: + '@types/node': 22.18.6 + '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.33': dependencies: '@types/yargs-parser': 21.0.3 + '@typespec/ts-http-runtime@0.3.0': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@ungap/structured-clone@1.3.0': {} '@unhead/react@2.0.14(react@19.1.1)': @@ -6653,7 +8157,7 @@ snapshots: '@vitest/snapshot@3.2.4': dependencies: '@vitest/pretty-format': 3.2.4 - magic-string: 0.30.19 + magic-string: 0.30.17 pathe: 2.0.3 '@vitest/spy@3.2.4': @@ -6666,6 +8170,103 @@ snapshots: loupe: 3.1.4 tinyrainbow: 2.0.0 + '@vscode/test-cli@0.0.11': + dependencies: + '@types/mocha': 10.0.10 + c8: 9.1.0 + chokidar: 3.6.0 + enhanced-resolve: 5.18.3 + glob: 10.4.5 + minimatch: 9.0.5 + mocha: 11.7.2 + supports-color: 9.4.0 + yargs: 17.7.2 + + '@vscode/test-electron@2.5.2': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + jszip: 3.10.1 + ora: 8.2.0 + semver: 7.7.2 + transitivePeerDependencies: + - supports-color + + '@vscode/vsce-sign-alpine-arm64@2.0.5': + optional: true + + '@vscode/vsce-sign-alpine-x64@2.0.5': + optional: true + + '@vscode/vsce-sign-darwin-arm64@2.0.5': + optional: true + + '@vscode/vsce-sign-darwin-x64@2.0.5': + optional: true + + '@vscode/vsce-sign-linux-arm64@2.0.5': + optional: true + + '@vscode/vsce-sign-linux-arm@2.0.5': + optional: true + + '@vscode/vsce-sign-linux-x64@2.0.5': + optional: true + + '@vscode/vsce-sign-win32-arm64@2.0.5': + optional: true + + '@vscode/vsce-sign-win32-x64@2.0.5': + optional: true + + '@vscode/vsce-sign@2.0.6': + optionalDependencies: + '@vscode/vsce-sign-alpine-arm64': 2.0.5 + '@vscode/vsce-sign-alpine-x64': 2.0.5 + '@vscode/vsce-sign-darwin-arm64': 2.0.5 + '@vscode/vsce-sign-darwin-x64': 2.0.5 + '@vscode/vsce-sign-linux-arm': 2.0.5 + '@vscode/vsce-sign-linux-arm64': 2.0.5 + '@vscode/vsce-sign-linux-x64': 2.0.5 + '@vscode/vsce-sign-win32-arm64': 2.0.5 + '@vscode/vsce-sign-win32-x64': 2.0.5 + + '@vscode/vsce@3.6.0': + dependencies: + '@azure/identity': 4.12.0 + '@secretlint/node': 10.2.2 + '@secretlint/secretlint-formatter-sarif': 10.2.2 + '@secretlint/secretlint-rule-no-dotenv': 10.2.2 + '@secretlint/secretlint-rule-preset-recommend': 10.2.2 + '@vscode/vsce-sign': 2.0.6 + azure-devops-node-api: 12.5.0 + chalk: 4.1.2 + cheerio: 1.1.2 + cockatiel: 3.2.1 + commander: 12.1.0 + form-data: 4.0.4 + glob: 11.0.3 + hosted-git-info: 4.1.0 + jsonc-parser: 3.2.0 + leven: 3.1.0 + markdown-it: 14.1.0 + mime: 1.6.0 + minimatch: 3.1.2 + parse-semver: 1.1.1 + read: 1.0.7 + secretlint: 10.2.2 + semver: 7.7.2 + tmp: 0.2.3 + typed-rest-client: 1.8.11 + url-join: 4.0.1 + xml2js: 0.5.0 + yauzl: 2.10.0 + yazl: 2.5.1 + optionalDependencies: + keytar: 7.9.0 + transitivePeerDependencies: + - supports-color + '@vue/babel-helper-vue-transform-on@1.5.0': {} '@vue/babel-plugin-jsx@1.5.0(@babel/core@7.28.3)': @@ -6678,7 +8279,7 @@ snapshots: '@babel/types': 7.28.2 '@vue/babel-helper-vue-transform-on': 1.5.0 '@vue/babel-plugin-resolve-type': 1.5.0(@babel/core@7.28.3) - '@vue/shared': 3.5.21 + '@vue/shared': 3.5.20 optionalDependencies: '@babel/core': 7.28.3 transitivePeerDependencies: @@ -6691,10 +8292,18 @@ snapshots: '@babel/helper-module-imports': 7.27.1 '@babel/helper-plugin-utils': 7.27.1 '@babel/parser': 7.28.3 - '@vue/compiler-sfc': 3.5.21 + '@vue/compiler-sfc': 3.5.20 transitivePeerDependencies: - supports-color + '@vue/compiler-core@3.5.20': + dependencies: + '@babel/parser': 7.28.3 + '@vue/shared': 3.5.20 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + '@vue/compiler-core@3.5.21': dependencies: '@babel/parser': 7.28.3 @@ -6703,11 +8312,28 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.2.1 + '@vue/compiler-dom@3.5.20': + dependencies: + '@vue/compiler-core': 3.5.20 + '@vue/shared': 3.5.20 + '@vue/compiler-dom@3.5.21': dependencies: '@vue/compiler-core': 3.5.21 '@vue/shared': 3.5.21 + '@vue/compiler-sfc@3.5.20': + dependencies: + '@babel/parser': 7.28.3 + '@vue/compiler-core': 3.5.20 + '@vue/compiler-dom': 3.5.20 + '@vue/compiler-ssr': 3.5.20 + '@vue/shared': 3.5.20 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.6 + source-map-js: 1.2.1 + '@vue/compiler-sfc@3.5.21': dependencies: '@babel/parser': 7.28.3 @@ -6720,6 +8346,11 @@ snapshots: postcss: 8.5.6 source-map-js: 1.2.1 + '@vue/compiler-ssr@3.5.20': + dependencies: + '@vue/compiler-dom': 3.5.20 + '@vue/shared': 3.5.20 + '@vue/compiler-ssr@3.5.21': dependencies: '@vue/compiler-dom': 3.5.21 @@ -6747,6 +8378,8 @@ snapshots: '@vue/shared': 3.5.21 vue: 3.5.21(typescript@5.9.2) + '@vue/shared@3.5.20': {} + '@vue/shared@3.5.21': {} '@vue/test-utils@2.4.6(@vue/compiler-dom@3.5.21)(@vue/server-renderer@3.5.21(vue@3.5.21(typescript@5.9.2)))(vue@3.5.21(typescript@5.9.2))': @@ -6932,6 +8565,10 @@ snapshots: ansi-colors@4.1.3: {} + ansi-escapes@7.1.0: + dependencies: + environment: 1.1.0 + ansi-regex@5.0.1: {} ansi-regex@6.1.0: {} @@ -6971,12 +8608,17 @@ snapshots: axios@1.12.2: dependencies: - follow-redirects: 1.15.11 + follow-redirects: 1.15.9 form-data: 4.0.4 proxy-from-env: 1.1.0 transitivePeerDependencies: - debug + azure-devops-node-api@12.5.0: + dependencies: + tunnel: 0.0.6 + typed-rest-client: 1.8.11 + babel-plugin-vue-jsx-hmr@1.0.0: dependencies: '@babel/core': 7.28.3 @@ -7000,6 +8642,10 @@ snapshots: binary-extensions@2.3.0: {} + binaryextensions@6.11.0: + dependencies: + editions: 6.22.0 + birpc@2.5.0: {} bl@4.1.0: @@ -7027,6 +8673,15 @@ snapshots: body-scroll-lock@4.0.0-beta.0: {} + boolbase@1.0.0: {} + + boundary@2.0.0: {} + + brace-expansion@1.1.12: + dependencies: + balanced-match: 1.0.2 + concat-map: 0.0.1 + brace-expansion@2.0.1: dependencies: balanced-match: 1.0.2 @@ -7035,21 +8690,27 @@ snapshots: dependencies: fill-range: 7.1.1 + browser-stdout@1.3.1: {} + browserslist-load-config@1.0.0: {} browserslist-to-es-version@1.0.0: dependencies: - browserslist: 4.25.1 + browserslist: 4.24.5 - browserslist@4.25.1: + browserslist@4.24.5: dependencies: - caniuse-lite: 1.0.30001727 - electron-to-chromium: 1.5.187 + caniuse-lite: 1.0.30001718 + electron-to-chromium: 1.5.150 node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.25.1) + update-browserslist-db: 1.1.3(browserslist@4.24.5) buffer-builder@0.2.0: {} + buffer-crc32@0.2.13: {} + + buffer-equal-constant-time@1.0.1: {} + buffer-from@1.1.2: {} buffer@5.7.1: @@ -7057,8 +8718,26 @@ snapshots: base64-js: 1.5.1 ieee754: 1.2.1 + bundle-name@4.1.0: + dependencies: + run-applescript: 7.1.0 + bytes@3.1.2: {} + c8@9.1.0: + dependencies: + '@bcoe/v8-coverage': 0.2.3 + '@istanbuljs/schema': 0.1.3 + find-up: 5.0.0 + foreground-child: 3.3.1 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-reports: 3.2.0 + test-exclude: 6.0.0 + v8-to-istanbul: 9.3.0 + yargs: 17.7.2 + yargs-parser: 21.1.1 + cac@6.7.14: {} call-bind-apply-helpers@1.0.2: @@ -7071,7 +8750,9 @@ snapshots: call-bind-apply-helpers: 1.0.2 get-intrinsic: 1.3.0 - caniuse-lite@1.0.30001727: {} + camelcase@6.3.0: {} + + caniuse-lite@1.0.30001718: {} ccount@2.0.1: {} @@ -7114,6 +8795,29 @@ snapshots: check-error@2.1.1: {} + cheerio-select@2.1.0: + dependencies: + boolbase: 1.0.0 + css-select: 5.2.2 + css-what: 6.2.2 + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + + cheerio@1.1.2: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.1 + htmlparser2: 10.0.0 + parse5: 7.3.0 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 7.16.0 + whatwg-mimetype: 4.0.0 + chokidar@3.6.0: dependencies: anymatch: 3.1.3 @@ -7130,6 +8834,9 @@ snapshots: dependencies: readdirp: 4.1.2 + chownr@1.1.4: + optional: true + chrome-trace-event@1.0.4: {} ci-info@3.9.0: {} @@ -7140,8 +8847,14 @@ snapshots: dependencies: restore-cursor: 3.1.0 + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + cli-spinners@2.6.1: {} + cli-spinners@2.9.2: {} + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -7150,6 +8863,8 @@ snapshots: clone@1.0.4: {} + cockatiel@3.2.1: {} + collapse-white-space@2.1.0: {} color-convert@2.0.1: @@ -7168,10 +8883,14 @@ snapshots: commander@10.0.1: {} + commander@12.1.0: {} + commander@13.1.0: {} commander@2.20.3: {} + concat-map@0.0.1: {} + config-chain@1.1.13: dependencies: ini: 1.3.8 @@ -7198,6 +8917,8 @@ snapshots: core-js@3.45.1: {} + core-util-is@1.0.3: {} + cors@2.8.5: dependencies: object-assign: 4.1.1 @@ -7216,6 +8937,16 @@ snapshots: cspell-ban-words@0.0.4: {} + css-select@5.2.2: + dependencies: + boolbase: 1.0.0 + css-what: 6.2.2 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.1.1 + + css-what@6.2.2: {} + css.escape@1.5.1: {} cssstyle@4.4.0: @@ -7236,34 +8967,55 @@ snapshots: dependencies: ms: 2.0.0 - debug@4.3.7: + debug@4.3.7(supports-color@8.1.1): dependencies: ms: 2.1.3 + optionalDependencies: + supports-color: 8.1.1 debug@4.4.1: dependencies: ms: 2.1.3 + decamelize@4.0.0: {} + decimal.js@10.5.0: {} decode-named-character-reference@1.1.0: dependencies: character-entities: 2.0.2 + decompress-response@6.0.0: + dependencies: + mimic-response: 3.1.0 + optional: true + deep-eql@4.1.4: dependencies: type-detect: 4.1.0 deep-eql@5.0.2: {} + deep-extend@0.6.0: + optional: true + deepmerge@4.3.1: {} + default-browser-id@5.0.0: {} + + default-browser@5.2.1: + dependencies: + bundle-name: 4.1.0 + default-browser-id: 5.0.0 + defaults@1.0.4: dependencies: clone: 1.0.4 define-lazy-prop@2.0.0: {} + define-lazy-prop@3.0.0: {} + delayed-stream@1.0.0: {} depd@2.0.0: {} @@ -7279,12 +9031,17 @@ snapshots: detect-libc@1.0.3: optional: true + detect-libc@2.0.4: + optional: true + detect-newline@4.0.1: {} devlop@1.1.0: dependencies: dequal: 2.0.3 + diff@7.0.0: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -7325,6 +9082,10 @@ snapshots: eastasianwidth@0.2.0: {} + ecdsa-sig-formatter@1.0.11: + dependencies: + safe-buffer: 5.2.1 + edit-json-file@1.8.1: dependencies: find-value: 1.0.13 @@ -7333,6 +9094,10 @@ snapshots: set-value: 4.1.0 w-json: 1.3.11 + editions@6.22.0: + dependencies: + version-range: 4.15.0 + editorconfig@1.0.4: dependencies: '@one-ini/wasm': 0.1.1 @@ -7342,7 +9107,9 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.187: {} + electron-to-chromium@1.5.150: {} + + emoji-regex@10.5.0: {} emoji-regex@8.0.0: {} @@ -7352,6 +9119,11 @@ snapshots: encodeurl@1.0.2: {} + encoding-sniffer@0.2.1: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -7361,12 +9133,12 @@ snapshots: engine.io@6.6.4: dependencies: '@types/cors': 2.8.17 - '@types/node': 22.16.5 + '@types/node': 22.18.6 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.7.2 cors: 2.8.5 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) engine.io-parser: 5.2.3 ws: 8.17.1 transitivePeerDependencies: @@ -7399,6 +9171,8 @@ snapshots: envinfo@7.14.0: {} + environment@1.1.0: {} + error-stack-parser@2.1.4: dependencies: stackframe: 1.3.4 @@ -7442,6 +9216,8 @@ snapshots: escape-string-regexp@2.0.0: {} + escape-string-regexp@4.0.0: {} + escape-string-regexp@5.0.0: {} eslint-scope@5.1.1: @@ -7496,6 +9272,9 @@ snapshots: events@3.3.0: {} + expand-template@2.0.3: + optional: true + expect@30.0.5: dependencies: '@jest/expect-utils': 30.0.5 @@ -7529,6 +9308,10 @@ snapshots: dependencies: reusify: 1.1.0 + fd-slicer@1.1.0: + dependencies: + pend: 1.2.0 + fdir@6.5.0(picomatch@4.0.3): optionalDependencies: picomatch: 4.0.3 @@ -7560,13 +9343,18 @@ snapshots: locate-path: 5.0.0 path-exists: 4.0.0 + find-up@5.0.0: + dependencies: + locate-path: 6.0.0 + path-exists: 4.0.0 + find-value@1.0.13: {} flat@5.0.2: {} flexsearch@0.7.43: {} - follow-redirects@1.15.11: {} + follow-redirects@1.15.9: {} foreground-child@3.3.1: dependencies: @@ -7614,6 +9402,8 @@ snapshots: jsonfile: 4.0.0 universalify: 0.1.2 + fs.realpath@1.0.0: {} + fsevents@2.3.3: optional: true @@ -7623,6 +9413,8 @@ snapshots: get-caller-file@2.0.5: {} + get-east-asian-width@1.3.1: {} + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 @@ -7638,6 +9430,8 @@ snapshots: get-port@5.1.1: {} + get-port@7.1.0: {} + get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 @@ -7647,6 +9441,9 @@ snapshots: git-hooks-list@4.1.1: {} + github-from-package@0.0.0: + optional: true + github-slugger@2.0.0: {} glob-parent@5.1.2: @@ -7668,6 +9465,24 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@11.0.3: + dependencies: + foreground-child: 3.3.1 + jackspeak: 4.1.1 + minimatch: 10.0.3 + minipass: 7.1.2 + package-json-from-dist: 1.0.1 + path-scurry: 2.0.0 + + glob@7.2.3: + dependencies: + fs.realpath: 1.0.0 + inflight: 1.0.6 + inherits: 2.0.4 + minimatch: 3.1.2 + once: 1.4.0 + path-is-absolute: 1.0.1 + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -7839,10 +9654,20 @@ snapshots: property-information: 7.1.0 space-separated-tokens: 2.0.2 + he@1.2.0: {} + heading-case@1.0.2: {} hookable@5.5.3: {} + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 + + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + html-encoding-sniffer@4.0.0: dependencies: whatwg-encoding: 3.1.1 @@ -7886,14 +9711,14 @@ snapshots: http-proxy-agent@7.0.2: dependencies: agent-base: 7.1.3 - debug: 4.4.1 + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color https-proxy-agent@7.0.6: dependencies: agent-base: 7.1.3 - debug: 4.4.1 + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -7915,12 +9740,21 @@ snapshots: ignore@7.0.3: {} + immediate@3.0.6: {} + immutable@5.1.2: {} import-lazy@4.0.0: {} indent-string@4.0.0: {} + index-to-position@1.1.0: {} + + inflight@1.0.6: + dependencies: + once: 1.4.0 + wrappy: 1.0.2 + inherits@2.0.4: {} ini@1.3.8: {} @@ -7948,6 +9782,8 @@ snapshots: is-docker@2.2.1: {} + is-docker@3.0.0: {} + is-extendable@0.1.1: {} is-extglob@2.1.1: {} @@ -7960,10 +9796,18 @@ snapshots: is-hexadecimal@2.0.1: {} + is-inside-container@1.0.0: + dependencies: + is-docker: 3.0.0 + is-interactive@1.0.0: {} + is-interactive@2.0.0: {} + is-number@7.0.0: {} + is-plain-obj@2.1.0: {} + is-plain-obj@4.1.0: {} is-plain-object@2.0.4: @@ -7980,12 +9824,22 @@ snapshots: is-unicode-supported@0.1.0: {} + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.1.0: {} + is-windows@1.0.2: {} is-wsl@2.2.0: dependencies: is-docker: 2.2.1 + is-wsl@3.1.0: + dependencies: + is-inside-container: 1.0.0 + + isarray@1.0.0: {} + isexe@2.0.0: {} isobject@3.0.1: {} @@ -8003,6 +9857,12 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + istextorbinary@9.5.0: + dependencies: + binaryextensions: 6.11.0 + editions: 6.22.0 + textextensions: 6.11.0 + iterate-object@1.3.5: {} jackspeak@3.4.3: @@ -8011,6 +9871,10 @@ snapshots: optionalDependencies: '@pkgjs/parseargs': 0.11.0 + jackspeak@4.1.1: + dependencies: + '@isaacs/cliui': 8.0.2 + jest-diff@30.0.5: dependencies: '@jest/diff-sequences': 30.0.1 @@ -8057,7 +9921,7 @@ snapshots: jest-mock@30.0.5: dependencies: '@jest/types': 30.0.5 - '@types/node': 22.16.5 + '@types/node': 22.18.6 jest-util: 30.0.5 jest-regex-util@30.0.1: {} @@ -8065,15 +9929,15 @@ snapshots: jest-util@30.0.5: dependencies: '@jest/types': 30.0.5 - '@types/node': 22.16.5 + '@types/node': 22.18.6 chalk: 4.1.2 ci-info: 4.3.0 graceful-fs: 4.2.11 - picomatch: 4.0.3 + picomatch: 4.0.2 jest-worker@27.5.1: dependencies: - '@types/node': 22.16.5 + '@types/node': 22.18.6 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -8122,7 +9986,7 @@ snapshots: whatwg-encoding: 3.1.1 whatwg-mimetype: 4.0.0 whatwg-url: 14.2.0 - ws: 8.18.2 + ws: 8.18.3 xml-name-validator: 5.0.0 transitivePeerDependencies: - bufferutil @@ -8153,20 +10017,67 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 + jsonwebtoken@9.0.2: + dependencies: + jws: 3.2.2 + lodash.includes: 4.3.0 + lodash.isboolean: 3.0.3 + lodash.isinteger: 4.0.4 + lodash.isnumber: 3.0.3 + lodash.isplainobject: 4.0.6 + lodash.isstring: 4.0.1 + lodash.once: 4.1.1 + ms: 2.1.3 + semver: 7.7.2 + + jszip@3.10.1: + dependencies: + lie: 3.3.0 + pako: 1.0.11 + readable-stream: 2.3.8 + setimmediate: 1.0.5 + + jwa@1.4.2: + dependencies: + buffer-equal-constant-time: 1.0.1 + ecdsa-sig-formatter: 1.0.11 + safe-buffer: 5.2.1 + + jws@3.2.2: + dependencies: + jwa: 1.4.2 + safe-buffer: 5.2.1 + + keytar@7.9.0: + dependencies: + node-addon-api: 4.3.0 + prebuild-install: 7.1.3 + optional: true + kind-of@6.0.3: {} leac@0.6.0: {} - license-webpack-plugin@4.0.2(webpack@5.101.2): + leven@3.1.0: {} + + license-webpack-plugin@4.0.2(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))): dependencies: webpack-sources: 3.3.3 optionalDependencies: - webpack: 5.101.2 + webpack: 5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)) + + lie@3.3.0: + dependencies: + immediate: 3.0.6 lines-and-columns@2.0.3: {} lines-and-columns@2.0.4: {} + linkify-it@5.0.0: + dependencies: + uc.micro: 2.1.0 + loader-runner@4.3.0: {} loader-utils@2.0.4: @@ -8179,8 +10090,26 @@ snapshots: dependencies: p-locate: 4.1.0 + locate-path@6.0.0: + dependencies: + p-locate: 5.0.0 + lodash-es@4.17.21: {} + lodash.includes@4.3.0: {} + + lodash.isboolean@3.0.3: {} + + lodash.isinteger@4.0.4: {} + + lodash.isnumber@3.0.3: {} + + lodash.isplainobject@4.0.6: {} + + lodash.isstring@4.0.1: {} + + lodash.once@4.1.1: {} + lodash.startcase@4.4.0: {} lodash.truncate@4.4.2: {} @@ -8194,12 +10123,19 @@ snapshots: chalk: 4.1.2 is-unicode-supported: 0.1.0 + log-symbols@6.0.0: + dependencies: + chalk: 5.4.1 + is-unicode-supported: 1.3.0 + longest-streak@3.1.0: {} loupe@3.1.4: {} lru-cache@10.4.3: {} + lru-cache@11.2.1: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 @@ -8210,6 +10146,10 @@ snapshots: lz-string@1.5.0: {} + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + magic-string@0.30.19: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -8220,6 +10160,15 @@ snapshots: markdown-extensions@2.0.0: {} + markdown-it@14.1.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.0 + mdurl: 2.0.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + markdown-table@3.0.4: {} math-intrinsics@1.1.0: {} @@ -8387,11 +10336,13 @@ snapshots: dependencies: '@types/mdast': 4.0.4 + mdurl@2.0.0: {} + media-typer@0.3.0: {} medium-zoom@1.1.0: {} - memfs@4.42.0: + memfs@4.43.0: dependencies: '@jsonjoy.com/json-pack': 1.11.0(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) @@ -8679,14 +10630,25 @@ snapshots: dependencies: mime-db: 1.52.0 + mime@1.6.0: {} + mimic-fn@2.1.0: {} + mimic-function@5.0.1: {} + + mimic-response@3.1.0: + optional: true + min-indent@1.0.1: {} minimatch@10.0.3: dependencies: '@isaacs/brace-expansion': 5.0.0 + minimatch@3.1.2: + dependencies: + brace-expansion: 1.1.12 + minimatch@9.0.1: dependencies: brace-expansion: 2.0.1 @@ -8703,6 +10665,32 @@ snapshots: minipass@7.1.2: {} + mkdirp-classic@0.5.3: + optional: true + + mocha@11.7.2: + dependencies: + browser-stdout: 1.3.1 + chokidar: 4.0.3 + debug: 4.3.7(supports-color@8.1.1) + diff: 7.0.0 + escape-string-regexp: 4.0.0 + find-up: 5.0.0 + glob: 10.4.5 + he: 1.2.0 + js-yaml: 4.1.0 + log-symbols: 4.1.0 + minimatch: 9.0.5 + ms: 2.1.3 + picocolors: 1.1.1 + serialize-javascript: 6.0.2 + strip-json-comments: 3.1.1 + supports-color: 8.1.1 + workerpool: 9.3.3 + yargs: 17.7.2 + yargs-parser: 21.1.1 + yargs-unparser: 2.0.0 + motion-dom@12.23.6: dependencies: motion-utils: 12.23.6 @@ -8717,16 +10705,29 @@ snapshots: ms@2.1.3: {} + mute-stream@0.0.8: {} + nano-staged@0.8.0: dependencies: picocolors: 1.1.1 nanoid@3.3.11: {} + napi-build-utils@2.0.0: + optional: true + negotiator@0.6.3: {} neo-async@2.6.2: {} + node-abi@3.77.0: + dependencies: + semver: 7.7.2 + optional: true + + node-addon-api@4.3.0: + optional: true + node-addon-api@7.1.1: optional: true @@ -8734,10 +10735,21 @@ snapshots: node-releases@2.0.19: {} + node-sarif-builder@3.2.0: + dependencies: + '@types/sarif': 2.1.7 + fs-extra: 11.3.2 + nopt@7.2.1: dependencies: abbrev: 2.0.0 + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.7.2 + validate-npm-package-license: 3.0.4 + normalize-path@3.0.0: {} npm-run-path@4.0.1: @@ -8746,9 +10758,13 @@ snapshots: nprogress@0.2.0: {} + nth-check@2.1.1: + dependencies: + boolbase: 1.0.0 + nwsapi@2.2.20: {} - nx@21.5.2: + nx@21.5.3(@swc/core@1.13.5(@swc/helpers@0.5.17)): dependencies: '@napi-rs/wasm-runtime': 0.2.4 '@yarnpkg/lockfile': 1.1.0 @@ -8786,16 +10802,17 @@ snapshots: yargs: 17.7.2 yargs-parser: 21.1.1 optionalDependencies: - '@nx/nx-darwin-arm64': 21.5.2 - '@nx/nx-darwin-x64': 21.5.2 - '@nx/nx-freebsd-x64': 21.5.2 - '@nx/nx-linux-arm-gnueabihf': 21.5.2 - '@nx/nx-linux-arm64-gnu': 21.5.2 - '@nx/nx-linux-arm64-musl': 21.5.2 - '@nx/nx-linux-x64-gnu': 21.5.2 - '@nx/nx-linux-x64-musl': 21.5.2 - '@nx/nx-win32-arm64-msvc': 21.5.2 - '@nx/nx-win32-x64-msvc': 21.5.2 + '@nx/nx-darwin-arm64': 21.5.3 + '@nx/nx-darwin-x64': 21.5.3 + '@nx/nx-freebsd-x64': 21.5.3 + '@nx/nx-linux-arm-gnueabihf': 21.5.3 + '@nx/nx-linux-arm64-gnu': 21.5.3 + '@nx/nx-linux-arm64-musl': 21.5.3 + '@nx/nx-linux-x64-gnu': 21.5.3 + '@nx/nx-linux-x64-musl': 21.5.3 + '@nx/nx-win32-arm64-msvc': 21.5.3 + '@nx/nx-win32-x64-msvc': 21.5.3 + '@swc/core': 1.13.5(@swc/helpers@0.5.17) transitivePeerDependencies: - debug @@ -8819,6 +10836,10 @@ snapshots: dependencies: mimic-fn: 2.1.0 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + oniguruma-parser@0.12.1: {} oniguruma-to-es@4.3.3: @@ -8827,6 +10848,13 @@ snapshots: regex: 6.0.1 regex-recursion: 6.0.2 + open@10.2.0: + dependencies: + default-browser: 5.2.1 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -8838,12 +10866,24 @@ snapshots: bl: 4.1.0 chalk: 4.1.2 cli-cursor: 3.1.0 - cli-spinners: 2.6.1 + cli-spinners: 2.9.2 is-interactive: 1.0.0 log-symbols: 4.1.0 strip-ansi: 6.0.1 wcwidth: 1.0.1 + ora@8.2.0: + dependencies: + chalk: 5.4.1 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.1.2 + outdent@0.5.0: {} p-filter@2.1.0: @@ -8854,12 +10894,22 @@ snapshots: dependencies: p-try: 2.2.0 + p-limit@3.1.0: + dependencies: + yocto-queue: 0.1.0 + p-locate@4.1.0: dependencies: p-limit: 2.3.0 + p-locate@5.0.0: + dependencies: + p-limit: 3.1.0 + p-map@2.1.0: {} + p-map@7.0.3: {} + p-try@2.2.0: {} package-json-from-dist@1.0.1: {} @@ -8868,6 +10918,8 @@ snapshots: dependencies: quansync: 0.2.4 + pako@1.0.11: {} + parse-entities@4.0.2: dependencies: '@types/unist': 2.0.11 @@ -8878,6 +10930,25 @@ snapshots: is-decimal: 2.0.1 is-hexadecimal: 2.0.1 + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.27.1 + index-to-position: 1.1.0 + type-fest: 4.41.0 + + parse-semver@1.1.1: + dependencies: + semver: 5.7.2 + + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.3.0 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.3.0 + parse5@7.3.0: dependencies: entities: 6.0.0 @@ -8893,6 +10964,8 @@ snapshots: path-exists@4.0.0: {} + path-is-absolute@1.0.1: {} + path-key@3.1.1: {} path-parse@1.0.7: {} @@ -8902,6 +10975,11 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.2 + path-scurry@2.0.0: + dependencies: + lru-cache: 11.2.1 + minipass: 7.1.2 + path-serializer@0.5.1: {} path-type@4.0.0: {} @@ -8914,10 +10992,14 @@ snapshots: peberminta@0.9.0: {} + pend@1.2.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} + picomatch@4.0.2: {} + picomatch@4.0.3: {} pify@4.0.1: {} @@ -8926,6 +11008,10 @@ snapshots: dependencies: pngjs: 6.0.0 + pluralize@2.0.0: {} + + pluralize@8.0.0: {} + pngjs@3.4.0: {} pngjs@6.0.0: {} @@ -8936,6 +11022,22 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 + prebuild-install@7.1.3: + dependencies: + detect-libc: 2.0.4 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 2.0.0 + node-abi: 3.77.0 + pump: 3.0.3 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.3 + tunnel-agent: 0.6.0 + optional: true + prettier-plugin-packagejson@2.5.19(prettier@3.6.2): dependencies: sort-package-json: 3.4.0 @@ -8959,6 +11061,8 @@ snapshots: ansi-styles: 5.2.0 react-is: 18.3.1 + process-nextick-args@2.0.1: {} + property-information@6.5.0: {} property-information@7.1.0: {} @@ -8967,6 +11071,14 @@ snapshots: proxy-from-env@1.1.0: {} + pump@3.0.3: + dependencies: + end-of-stream: 1.4.4 + once: 1.4.0 + optional: true + + punycode.js@2.3.1: {} + punycode@2.3.1: {} qs@6.13.0: @@ -8992,6 +11104,23 @@ snapshots: iconv-lite: 0.4.24 unpipe: 1.0.0 + rc-config-loader@4.1.3: + dependencies: + debug: 4.4.1 + js-yaml: 4.1.0 + json5: 2.2.3 + require-from-string: 2.0.2 + transitivePeerDependencies: + - supports-color + + rc@1.2.8: + dependencies: + deep-extend: 0.6.0 + ini: 1.3.8 + minimist: 1.2.8 + strip-json-comments: 2.0.1 + optional: true + react-dom@19.1.1(react@19.1.1): dependencies: react: 19.1.1 @@ -9019,6 +11148,14 @@ snapshots: react@19.1.1: {} + read-pkg@9.0.1: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.3.0 + type-fest: 4.35.0 + unicorn-magic: 0.1.0 + read-yaml-file@1.1.0: dependencies: graceful-fs: 4.2.11 @@ -9026,6 +11163,20 @@ snapshots: pify: 4.0.1 strip-bom: 3.0.0 + read@1.0.7: + dependencies: + mute-stream: 0.0.8 + + readable-stream@2.3.8: + dependencies: + core-util-is: 1.0.3 + inherits: 2.0.4 + isarray: 1.0.0 + process-nextick-args: 2.0.1 + safe-buffer: 5.1.2 + string_decoder: 1.1.1 + util-deprecate: 1.0.2 + readable-stream@3.6.2: dependencies: inherits: 2.0.4 @@ -9172,34 +11323,53 @@ snapshots: onetime: 5.1.2 signal-exit: 3.0.7 + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + reusify@1.1.0: {} rrweb-cssom@0.8.0: {} - rsbuild-plugin-dts@0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.16.5))(@rsbuild/core@1.5.7)(typescript@5.9.2): + rsbuild-plugin-dts@0.12.2(@microsoft/api-extractor@7.52.13(@types/node@22.13.8))(@rsbuild/core@1.5.0-beta.4)(typescript@5.9.2): + dependencies: + '@ast-grep/napi': 0.37.0 + '@rsbuild/core': 1.5.0-beta.4 + magic-string: 0.30.17 + picocolors: 1.1.1 + tinyglobby: 0.2.15 + tsconfig-paths: 4.2.0 + optionalDependencies: + '@microsoft/api-extractor': 7.52.13(@types/node@22.13.8) + typescript: 5.9.2 + + rsbuild-plugin-dts@0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.18.6))(@rsbuild/core@1.5.10)(typescript@5.9.2): dependencies: '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 1.5.7 + '@rsbuild/core': 1.5.10 optionalDependencies: - '@microsoft/api-extractor': 7.52.13(@types/node@22.16.5) + '@microsoft/api-extractor': 7.52.13(@types/node@22.18.6) typescript: 5.9.2 - rsbuild-plugin-google-analytics@1.0.4(@rsbuild/core@1.5.7): + rsbuild-plugin-google-analytics@1.0.4(@rsbuild/core@1.5.10): optionalDependencies: - '@rsbuild/core': 1.5.7 + '@rsbuild/core': 1.5.10 - rsbuild-plugin-open-graph@1.1.0(@rsbuild/core@1.5.7): + rsbuild-plugin-open-graph@1.1.0(@rsbuild/core@1.5.10): optionalDependencies: - '@rsbuild/core': 1.5.7 + '@rsbuild/core': 1.5.10 rslog@1.2.11: {} - rspress-plugin-font-open-sans@1.0.3(@rspress/core@2.0.0-beta.32(@types/react@19.1.13)): + rspress-plugin-font-open-sans@1.0.3(@rspress/core@2.0.0-beta.33(@types/react@19.1.13)): dependencies: - '@rspress/core': 2.0.0-beta.32(@types/react@19.1.13) + '@rspress/core': 2.0.0-beta.33(@types/react@19.1.13) rspress-plugin-sitemap@1.2.1: {} + run-applescript@7.1.0: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -9208,6 +11378,8 @@ snapshots: dependencies: tslib: 2.8.1 + safe-buffer@5.1.2: {} + safe-buffer@5.2.1: {} safer-buffer@2.1.2: {} @@ -9309,6 +11481,8 @@ snapshots: '@parcel/watcher': 2.5.1 optional: true + sax@1.4.1: {} + saxes@6.0.0: dependencies: xmlchars: 2.2.0 @@ -9322,6 +11496,18 @@ snapshots: ajv-formats: 2.1.1 ajv-keywords: 5.1.0(ajv@8.17.1) + secretlint@10.2.2: + dependencies: + '@secretlint/config-creator': 10.2.2 + '@secretlint/formatter': 10.2.2 + '@secretlint/node': 10.2.2 + '@secretlint/profiler': 10.2.2 + debug: 4.4.1 + globby: 14.1.0 + read-pkg: 9.0.1 + transitivePeerDependencies: + - supports-color + section-matter@1.0.0: dependencies: extend-shallow: 2.0.1 @@ -9331,6 +11517,8 @@ snapshots: dependencies: parseley: 0.12.1 + semver@5.7.2: {} + semver@6.3.1: {} semver@7.5.4: @@ -9348,6 +11536,8 @@ snapshots: is-plain-object: 2.0.4 is-primitive: 3.0.1 + setimmediate@1.0.5: {} + setprototypeof@1.2.0: {} shebang-command@2.0.0: @@ -9399,6 +11589,16 @@ snapshots: signal-exit@4.1.0: {} + simple-concat@1.0.1: + optional: true + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + optional: true + simple-git-hooks@2.13.1: {} sirv@2.0.4: @@ -9419,7 +11619,7 @@ snapshots: socket.io-adapter@2.5.5: dependencies: - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) ws: 8.17.1 transitivePeerDependencies: - bufferutil @@ -9429,7 +11629,7 @@ snapshots: socket.io-parser@4.2.4: dependencies: '@socket.io/component-emitter': 3.1.2 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) transitivePeerDependencies: - supports-color @@ -9438,7 +11638,7 @@ snapshots: accepts: 1.3.8 base64id: 2.0.0 cors: 2.8.5 - debug: 4.3.7 + debug: 4.3.7(supports-color@8.1.1) engine.io: 6.6.4 socket.io-adapter: 2.5.5 socket.io-parser: 4.2.4 @@ -9477,6 +11677,20 @@ snapshots: cross-spawn: 7.0.6 signal-exit: 4.1.0 + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.22 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.22 + + spdx-license-ids@3.0.22: {} + sprintf-js@1.0.3: {} ssim.js@3.5.0: {} @@ -9497,6 +11711,8 @@ snapshots: std-env@3.9.0: {} + stdin-discarder@0.2.2: {} + string-argv@0.3.2: {} string-width@4.2.3: @@ -9511,6 +11727,16 @@ snapshots: emoji-regex: 9.2.2 strip-ansi: 7.1.2 + string-width@7.2.0: + dependencies: + emoji-regex: 10.5.0 + get-east-asian-width: 1.3.1 + strip-ansi: 7.1.2 + + string_decoder@1.1.1: + dependencies: + safe-buffer: 5.1.2 + string_decoder@1.3.0: dependencies: safe-buffer: 5.2.1 @@ -9536,8 +11762,15 @@ snapshots: dependencies: min-indent: 1.0.1 + strip-json-comments@2.0.1: + optional: true + strip-json-comments@3.1.1: {} + structured-source@4.0.0: + dependencies: + boundary: 2.0.0 + style-to-js@1.1.16: dependencies: style-to-object: 1.0.8 @@ -9554,6 +11787,13 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-color@9.4.0: {} + + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + supports-preserve-symlinks-flag@1.0.0: {} swc-plugin-coverage-instrument@0.0.31: {} @@ -9580,6 +11820,14 @@ snapshots: tapable@2.2.2: {} + tar-fs@2.1.3: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.3 + tar-stream: 2.2.0 + optional: true + tar-stream@2.2.0: dependencies: bl: 4.1.0 @@ -9590,14 +11838,21 @@ snapshots: term-size@2.2.1: {} - terser-webpack-plugin@5.3.14(webpack@5.101.2): + terminal-link@4.0.0: + dependencies: + ansi-escapes: 7.1.0 + supports-hyperlinks: 3.2.0 + + terser-webpack-plugin@5.3.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 schema-utils: 4.3.2 serialize-javascript: 6.0.2 terser: 5.43.1 - webpack: 5.101.2 + webpack: 5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)) + optionalDependencies: + '@swc/core': 1.13.5(@swc/helpers@0.5.17) terser@5.43.1: dependencies: @@ -9606,6 +11861,18 @@ snapshots: commander: 2.20.3 source-map-support: 0.5.21 + test-exclude@6.0.0: + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + + text-table@0.2.0: {} + + textextensions@6.11.0: + dependencies: + editions: 6.22.0 + thingies@2.5.0(tslib@2.8.1): dependencies: tslib: 2.8.1 @@ -9667,6 +11934,13 @@ snapshots: tslib@2.8.1: {} + tunnel-agent@0.6.0: + dependencies: + safe-buffer: 5.2.1 + optional: true + + tunnel@0.0.6: {} + type-detect@4.0.8: {} type-detect@4.1.0: {} @@ -9675,21 +11949,39 @@ snapshots: type-fest@4.35.0: {} + type-fest@4.41.0: {} + type-is@1.6.18: dependencies: media-typer: 0.3.0 mime-types: 2.1.35 + typed-rest-client@1.8.11: + dependencies: + qs: 6.13.0 + tunnel: 0.0.6 + underscore: 1.13.7 + typescript@5.8.2: {} typescript@5.9.2: {} + uc.micro@2.1.0: {} + + underscore@1.13.7: {} + + undici-types@6.20.0: {} + undici-types@6.21.0: {} + undici@7.16.0: {} + unhead@2.0.14: dependencies: hookable: 5.5.3 + unicorn-magic@0.1.0: {} + unicorn-magic@0.3.0: {} unified@11.0.5: @@ -9741,9 +12033,9 @@ snapshots: upath@2.0.1: {} - update-browserslist-db@1.1.3(browserslist@4.25.1): + update-browserslist-db@1.1.3(browserslist@4.24.5): dependencies: - browserslist: 4.25.1 + browserslist: 4.24.5 escalade: 3.2.0 picocolors: 1.1.1 @@ -9751,14 +12043,31 @@ snapshots: dependencies: punycode: 2.3.1 + url-join@4.0.1: {} + util-deprecate@1.0.2: {} utils-merge@1.0.1: {} + uuid@8.3.2: {} + + v8-to-istanbul@9.3.0: + dependencies: + '@jridgewell/trace-mapping': 0.3.31 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + varint@6.0.0: {} vary@1.1.2: {} + version-range@4.15.0: {} + vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 @@ -9776,12 +12085,12 @@ snapshots: vue-component-type-helpers@2.2.12: {} - vue-loader@17.4.2(vue@3.5.21(typescript@5.9.2))(webpack@5.101.2): + vue-loader@17.4.2(vue@3.5.21(typescript@5.9.2))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))): dependencies: chalk: 4.1.2 hash-sum: 2.0.0 watchpack: 2.4.4 - webpack: 5.101.2 + webpack: 5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)) optionalDependencies: vue: 3.5.21(typescript@5.9.2) @@ -9818,7 +12127,7 @@ snapshots: webpack-sources@3.3.3: {} - webpack@5.101.2: + webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -9828,7 +12137,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.25.1 + browserslist: 4.24.5 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -9842,7 +12151,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 4.3.2 tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(webpack@5.101.2) + terser-webpack-plugin: 5.3.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: @@ -9867,6 +12176,8 @@ snapshots: dependencies: isexe: 2.0.0 + workerpool@9.3.3: {} + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -9883,10 +12194,21 @@ snapshots: ws@8.17.1: {} - ws@8.18.2: {} + ws@8.18.3: {} + + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.0 xml-name-validator@5.0.0: {} + xml2js@0.5.0: + dependencies: + sax: 1.4.1 + xmlbuilder: 11.0.1 + + xmlbuilder@11.0.1: {} + xmlchars@2.2.0: {} y18n@5.0.8: {} @@ -9899,6 +12221,13 @@ snapshots: yargs-parser@21.1.1: {} + yargs-unparser@2.0.0: + dependencies: + camelcase: 6.3.0 + decamelize: 4.0.0 + flat: 5.0.2 + is-plain-obj: 2.1.0 + yargs@17.7.2: dependencies: cliui: 8.0.1 @@ -9909,4 +12238,15 @@ snapshots: y18n: 5.0.8 yargs-parser: 21.1.1 + yauzl@2.10.0: + dependencies: + buffer-crc32: 0.2.13 + fd-slicer: 1.1.0 + + yazl@2.5.1: + dependencies: + buffer-crc32: 0.2.13 + + yocto-queue@0.1.0: {} + zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 149f4334..8c513433 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -7,4 +7,4 @@ packages: strictPeerDependencies: false autoInstallPeers: false -hoistPattern: [] +hoistPattern: ['@secretlint/*'] diff --git a/scripts/dictionary.txt b/scripts/dictionary.txt index d271ecf2..668a8089 100644 --- a/scripts/dictionary.txt +++ b/scripts/dictionary.txt @@ -102,6 +102,7 @@ prefresh preprocessors publint pxtorem +quasis quxx rebranded rolldown