├── demo
├── target
│ ├── sampleFile.json
│ └── sampleDir
│ │ └── myFile.txt
├── demoTs.ts
└── demoJs.js
├── .gitignore
├── docs
├── demo-rename.gif
├── demo-inlining.gif
├── demo-extraction.gif
├── demo-goToDefinition.gif
└── demo-path-autocompletion.gif
├── .prettierrc.json
├── vscode-extension
├── docs
│ └── logo.drawio.png
├── tsconfig.json
├── rollup.config.mjs
├── LICENSE
├── src
│ ├── createTsLspCustomServiceClient.ts
│ └── index.ts
├── package.json
└── README.md
├── .vscode
├── settings.json
└── launch.json
├── vitest.config.js
├── package.json
├── SUPPORT.md
├── language-service-plugin
├── rollup.config.mjs
├── tsconfig.json
├── package.json
├── src
│ ├── index.ts
│ ├── rpc
│ │ ├── service.ts
│ │ └── registerCustomService.ts
│ ├── api.ts
│ ├── impl
│ │ ├── ParsedPath.ts
│ │ ├── ParsedJsString.ts
│ │ ├── createServiceImpl.ts
│ │ └── AstMatchers.ts
│ └── utils
│ │ ├── offsetRange.ts
│ │ └── edit.ts
└── test
│ ├── utils.ts
│ └── tests.test.ts
├── CODE_OF_CONDUCT.md
├── .github
└── workflows
│ └── build.yml
├── .azure-pipelines
└── publish-extension.yml
├── LICENSE
├── SECURITY.md
├── README.md
└── yarn.lock
/demo/target/sampleFile.json:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/demo/target/sampleDir/myFile.txt:
--------------------------------------------------------------------------------
1 | loreum ipsum est dolor sit amet
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | out
2 | node_modules
3 | .vscode-test/
4 | *.vsix
5 | dist
6 |
--------------------------------------------------------------------------------
/docs/demo-rename.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/vscode-ts-file-path-support/HEAD/docs/demo-rename.gif
--------------------------------------------------------------------------------
/docs/demo-inlining.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/vscode-ts-file-path-support/HEAD/docs/demo-inlining.gif
--------------------------------------------------------------------------------
/docs/demo-extraction.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/vscode-ts-file-path-support/HEAD/docs/demo-extraction.gif
--------------------------------------------------------------------------------
/docs/demo-goToDefinition.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/vscode-ts-file-path-support/HEAD/docs/demo-goToDefinition.gif
--------------------------------------------------------------------------------
/.prettierrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "trailingComma": "es5",
3 | "tabWidth": 4,
4 | "printWidth": 120,
5 | "semi": true,
6 | "useTabs": true
7 | }
8 |
--------------------------------------------------------------------------------
/docs/demo-path-autocompletion.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/vscode-ts-file-path-support/HEAD/docs/demo-path-autocompletion.gif
--------------------------------------------------------------------------------
/vscode-extension/docs/logo.drawio.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/microsoft/vscode-ts-file-path-support/HEAD/vscode-extension/docs/logo.drawio.png
--------------------------------------------------------------------------------
/.vscode/settings.json:
--------------------------------------------------------------------------------
1 | {
2 | "editor.formatOnSave": true,
3 | "git.branchProtection": ["main"],
4 | "git.branchProtectionPrompt": "alwaysCommitToNewBranch"
5 | }
6 |
--------------------------------------------------------------------------------
/vitest.config.js:
--------------------------------------------------------------------------------
1 | ///
2 | import { defineConfig } from "vite";
3 |
4 | export default defineConfig({
5 | test: {
6 | //exclude: [],
7 | },
8 | });
9 |
--------------------------------------------------------------------------------
/demo/demoTs.ts:
--------------------------------------------------------------------------------
1 | import { join } from "path";
2 | type RelativeFilePath = string & { baseDir?: T };
3 |
4 | function myPathFn(path: RelativeFilePath<'$dir/target'>): string {
5 | return join(__dirname, 'target', path);
6 | }
7 |
8 | myPathFn("sampleDir/foobar123.txt");
9 |
--------------------------------------------------------------------------------
/vscode-extension/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "ESNext",
4 | "moduleResolution": "Bundler",
5 | "target": "es6",
6 | "outDir": "dist",
7 | "lib": ["es6"],
8 | "sourceMap": true,
9 | "rootDir": "src",
10 | "strict": true
11 | },
12 | "include": ["./src/**/*", "test/**/*"]
13 | }
14 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "private": true,
3 | "workspaces": [
4 | "language-service-plugin",
5 | "ts-api-extras",
6 | "vscode-extension"
7 | ],
8 | "devDependencies": {
9 | "vitest": "^1.6.0"
10 | },
11 | "scripts": {
12 | "build": "yarn workspace @vscode/ts-plugin-file-path-support build && yarn workspace ts-file-path-support build",
13 | "test": "yarn workspace @vscode/ts-plugin-file-path-support test"
14 | }
15 | }
--------------------------------------------------------------------------------
/SUPPORT.md:
--------------------------------------------------------------------------------
1 | # Support
2 |
3 | ## How to file issues and get help
4 |
5 | This project uses GitHub Issues to track bugs and feature requests. Please search the existing
6 | issues before filing new issues to avoid duplicates. For new issues, file your bug or
7 | feature request as a new Issue.
8 |
9 | ## Microsoft Support Policy
10 |
11 | Support for this **PROJECT or PRODUCT** is limited to the resources listed above.
12 |
--------------------------------------------------------------------------------
/language-service-plugin/rollup.config.mjs:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "rollup";
2 | import typescript from "@rollup/plugin-typescript";
3 | import del from "rollup-plugin-delete";
4 |
5 | export default defineConfig({
6 | input: "src/index.ts",
7 | output: {
8 | format: "commonjs",
9 | name: "index",
10 | file: "dist/index.js",
11 | sourcemap: true,
12 | },
13 | plugins: [typescript(), del({ targets: "dist/**/*" })],
14 | });
15 |
--------------------------------------------------------------------------------
/language-service-plugin/tsconfig.json:
--------------------------------------------------------------------------------
1 | {
2 | "compilerOptions": {
3 | "module": "ESNext",
4 | "moduleResolution": "Bundler",
5 | "target": "es6",
6 | "outDir": "dist",
7 | "lib": ["es6"],
8 | "sourceMap": true,
9 | "rootDir": "./src",
10 | "strict": true,
11 | "declaration": true,
12 | "declarationMap": true,
13 | "experimentalDecorators": true,
14 | "skipLibCheck": true
15 | },
16 | "include": ["./src/**/*"]
17 | }
18 |
--------------------------------------------------------------------------------
/.vscode/launch.json:
--------------------------------------------------------------------------------
1 | {
2 | "version": "0.2.0",
3 | "configurations": [
4 | {
5 | "name": "Run Extension",
6 | "type": "extensionHost",
7 | "request": "launch",
8 | "runtimeExecutable": "${execPath}",
9 | "args": [
10 | "--extensionDevelopmentPath=${workspaceFolder}/vscode-extension",
11 | "${workspaceFolder}/demo",
12 | "--profile Empty"
13 | ],
14 | "outFiles": ["${workspaceFolder}/vscode-extension/dist/**/*.js"]
15 | }
16 | ]
17 | }
18 |
--------------------------------------------------------------------------------
/CODE_OF_CONDUCT.md:
--------------------------------------------------------------------------------
1 | # Microsoft Open Source Code of Conduct
2 |
3 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
4 |
5 | Resources:
6 |
7 | - [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/)
8 | - [Microsoft Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/)
9 | - Contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with questions or concerns
10 |
--------------------------------------------------------------------------------
/demo/demoJs.js:
--------------------------------------------------------------------------------
1 | /**
2 | * @typedef {string & { foo?: TBaseDir }} RelativeFilePath
3 | * @template TBaseDir
4 | */
5 |
6 | /**
7 | * @param {RelativeFilePath<'$dir/target'>} path
8 | */
9 | function myFilePathFn(path) { }
10 |
11 | export const data1 = {
12 | filePath: myFilePathFn("sampleDir/myFile.txt"),
13 | };
14 |
15 | export const data2 = {
16 | fileName: "sampleDir/test2.txt",
17 | fileContents: "some sample\ntext here",
18 | };
19 |
20 | const data3 = {
21 | fileName: "foo.txt",
22 | fileContents: ["line1\\n", "line2\\n", "line3"],
23 | };
--------------------------------------------------------------------------------
/language-service-plugin/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "@vscode/ts-plugin-file-path-support",
3 | "private": true,
4 | "version": "0.0.1",
5 | "main": "dist/index.js",
6 | "types": "dist/index.d.ts",
7 | "license": "MIT",
8 | "scripts": {
9 | "dev": "rollup -c rollup.config.mjs --watch",
10 | "build": "rollup -c rollup.config.mjs",
11 | "test": "vitest run"
12 | },
13 | "dependencies": {},
14 | "devDependencies": {
15 | "typescript": "^5.5.2",
16 | "vitest": "^1.6.0",
17 | "@types/node": "^20.14.9",
18 | "rollup": "4.22.4",
19 | "@rollup/plugin-typescript": "11.1.6",
20 | "rollup-plugin-delete": "2.0.0"
21 | }
22 | }
--------------------------------------------------------------------------------
/language-service-plugin/src/index.ts:
--------------------------------------------------------------------------------
1 | import type * as ts from "typescript/lib/tsserverlibrary";
2 | import { registerCustomService } from "./rpc/registerCustomService";
3 | import { createServiceImpl } from "./impl/createServiceImpl";
4 | import { RelativeFilePathServiceId } from "./api";
5 |
6 | export default function init(modules: { typescript: typeof ts }) {
7 | return {
8 | create(info: ts.server.PluginCreateInfo): ts.LanguageService {
9 | const id: RelativeFilePathServiceId = "tsRelativeFilePath";
10 | registerCustomService(id, info, createServiceImpl(modules.typescript, info.languageService));
11 | return info.languageService;
12 | },
13 | };
14 | };
15 |
--------------------------------------------------------------------------------
/language-service-plugin/src/rpc/service.ts:
--------------------------------------------------------------------------------
1 | export type ServiceDescription = Record;
2 |
3 | export type CreateServicesDescription = T;
4 |
5 | export type ServiceToSyncObj =
6 | { [K in keyof T]: { (args: T[K]['request'] & TContext): T[K]['response'] } };
7 |
8 | export type ServiceToAsyncObj =
9 | { [K in keyof T]: { (args: T[K]['request'] & TContext): Promise } };
10 |
11 | export interface IRequestMessage {
12 | method: string;
13 | args: {};
14 | }
15 |
16 | export interface IResponseMessage {
17 | result: any;
18 | error: any;
19 | }
20 |
--------------------------------------------------------------------------------
/vscode-extension/rollup.config.mjs:
--------------------------------------------------------------------------------
1 | import { defineConfig } from "rollup";
2 | import typescript from "@rollup/plugin-typescript";
3 | import copy from "rollup-plugin-copy";
4 | import del from "rollup-plugin-delete";
5 |
6 | export default defineConfig({
7 | input: "src/index.ts",
8 | output: {
9 | format: "commonjs",
10 | name: "index",
11 | file: "dist/index.js",
12 | sourcemap: true,
13 | },
14 | plugins: [
15 | typescript(),
16 | copy({
17 | targets: [
18 | {
19 | src: ["../language-service-plugin/dist/**/*.js", "../language-service-plugin/package.json"],
20 | dest: "./node_modules/@vscode/ts-plugin-file-path-support",
21 | },
22 | ],
23 | }),
24 | del({ targets: "dist/**/*" }),
25 | del({ targets: "node_modules/ts-plugin-file-path-support/**/*" }),
26 | ],
27 | });
28 |
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: Build Extension
2 | on:
3 | push:
4 | branches:
5 | - main
6 |
7 | jobs:
8 | build:
9 | runs-on: ubuntu-latest
10 | steps:
11 | - name: Checkout
12 | uses: actions/checkout@v4
13 |
14 | - uses: actions/setup-node@v4
15 | with:
16 | node-version: 20
17 |
18 | - name: yarn install
19 | run: yarn install --frozen-lockfile
20 |
21 | - name: Build
22 | run: yarn run build
23 |
24 | - name: Test
25 | run: yarn run test
26 |
27 | - name: Upload artifacts
28 | uses: actions/upload-artifact@v4
29 | with:
30 | name: artifacts
31 | path: |
32 | vscode-extension/extension.vsix
33 |
--------------------------------------------------------------------------------
/.azure-pipelines/publish-extension.yml:
--------------------------------------------------------------------------------
1 | trigger:
2 | branches:
3 | include:
4 | - main
5 | pr: none
6 |
7 | resources:
8 | repositories:
9 | - repository: templates
10 | type: github
11 | name: microsoft/vscode-engineering
12 | ref: main
13 | endpoint: Monaco
14 |
15 | parameters:
16 | - name: publishExtension
17 | displayName: 🚀 Publish Extension
18 | type: boolean
19 | default: false
20 |
21 | extends:
22 | template: azure-pipelines/extension/stable.yml@templates
23 | parameters:
24 | publishExtension: ${{ parameters.publishExtension }}
25 | workingDirectory: $(Build.SourcesDirectory)/vscode-extension
26 | vscePackageArgs: --yarn
27 |
28 | buildSteps:
29 | - script: yarn install --frozen-lockfile
30 | displayName: Install dependencies
31 |
32 | - script: yarn run build
33 | displayName: Build
34 |
35 | - script: yarn run test
36 | displayName: Test
37 |
38 | tsa:
39 | config:
40 | areaPath: 'Visual Studio Code Miscellaneous Extensions'
41 | serviceTreeID: 'c8cb03c6-176e-40dd-90a5-518de08666dc'
42 | enabled: true
43 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) Microsoft Corporation.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE
22 |
--------------------------------------------------------------------------------
/vscode-extension/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) Microsoft Corporation.
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE
22 |
--------------------------------------------------------------------------------
/vscode-extension/src/createTsLspCustomServiceClient.ts:
--------------------------------------------------------------------------------
1 | import { Uri, Position, commands } from "vscode";
2 | import type { ServiceDescription, ServiceToAsyncObj, IRequestMessage } from "@vscode/ts-plugin-file-path-support/src/rpc/service";
3 |
4 | export function createTsLspCustomServiceClient(id: string): ServiceToAsyncObj {
5 | const tsCommandId = '_handleRpc' + id;
6 |
7 | return new Proxy({}, {
8 | get: (target, prop, receiver) => {
9 | return async (args: { uri: Uri; position: Position; }) => {
10 | const request: IRequestMessage & { file: any; position: { line: number, char: number }; } = {
11 | method: prop.toString(),
12 | args: args,
13 | file: args.uri,
14 | position: { line: args.position.line, char: args.position.character },
15 | };
16 | const result: { body: { result: unknown } } = await commands.executeCommand(
17 | 'typescript.tsserverRequest',
18 | tsCommandId,
19 | request
20 | );
21 | return result.body.result;
22 | };
23 | }
24 | }) as any;
25 | }
26 |
--------------------------------------------------------------------------------
/language-service-plugin/src/api.ts:
--------------------------------------------------------------------------------
1 | import { CreateServicesDescription } from "./rpc/service";
2 |
3 | export type RelativeFilePathServiceId = "tsRelativeFilePath";
4 |
5 | export type RelativeFilePathService = CreateServicesDescription<{
6 | findRelativeFileNodeAt: {
7 | request: {
8 | // uses position and filename
9 | };
10 | response: {
11 | stringValueRange: [start: number, endEx: number];
12 | cursorSegmentRange: [start: number, endEx: number];
13 | relativePath: string;
14 | baseDir: string;
15 | relativePathBeforeCursor: string;
16 | } | undefined;
17 | };
18 |
19 | findFilePathObjAt: {
20 | request: {
21 | // uses position and filename
22 | };
23 | response: {
24 | isMultiLine: boolean;
25 | replaceRange: [start: number, endEx: number];
26 | baseDir: string;
27 | relativePath: string;
28 | } | undefined;
29 | }
30 |
31 | findFileNameFileContentObjAt: {
32 | request: {
33 | // uses position and filename
34 | };
35 | response: {
36 | isMultiLine: boolean;
37 | replaceRange: [start: number, endEx: number];
38 | fileContents: string;
39 | fileName: string;
40 |
41 | relativeFilePathFnName: string;
42 | relativeFilePathBaseDir: string;
43 | } | undefined;
44 | }
45 | }>;
46 |
--------------------------------------------------------------------------------
/language-service-plugin/src/rpc/registerCustomService.ts:
--------------------------------------------------------------------------------
1 | import type * as ts from "typescript/lib/tsserverlibrary";
2 | import { IRequestMessage, IResponseMessage, ServiceDescription, ServiceToSyncObj } from "./service";
3 |
4 | export function createCustomService(
5 | customService: ServiceToSyncObj): ServiceToSyncObj {
6 | return customService;
7 | }
8 |
9 | export function registerCustomService(
10 | id: string,
11 | info: ts.server.PluginCreateInfo,
12 | customService: ServiceToSyncObj
13 | ): void {
14 | const tsCommandId = '_handleRpc' + id;
15 | info.session?.addProtocolHandler(tsCommandId, (request) => {
16 | const msg = request.arguments as IRequestMessage & { file: string; position: { line: number, char: number } };
17 |
18 | if (!customService[msg.method]) {
19 | throw new Error(`Method ${msg.method} not found in custom service`);
20 | }
21 |
22 | const pos = msg.position;
23 | const src = info.languageService.getProgram()?.getSourceFile(msg.file);
24 | const p = src?.getPositionOfLineAndCharacter(pos.line, pos.char);
25 | if (p === undefined) {
26 | throw new Error(`Position ${pos.line}:${pos.char} not found in file ${msg.file}`);
27 | }
28 |
29 | const result = customService[msg.method]({ ...msg.args, fileName: msg.file, position: p });
30 | const response: IResponseMessage = {
31 | result: result,
32 | error: undefined
33 | };
34 | return {
35 | response: response
36 | };
37 | });
38 | }
39 |
--------------------------------------------------------------------------------
/language-service-plugin/src/impl/ParsedPath.ts:
--------------------------------------------------------------------------------
1 | import { OffsetRange } from "../utils/offsetRange";
2 |
3 | type ParsedPathSegment = { type: "literal" | "pathSeparator"; value: string; range: OffsetRange; };
4 |
5 | export class ParsedPath {
6 | public static parse(value: string): ParsedPath {
7 | if (value.length === 0) {
8 | return new ParsedPath([{ type: "literal", value: "", range: new OffsetRange(0, 0) }]);
9 | }
10 | const segments: ParsedPathSegment[] = [];
11 | function pushLatestLiteralValue() {
12 | if (segments.length > 0 && segments[segments.length - 1].type === "pathSeparator") {
13 | segments.push({ type: "literal", value: "", range: OffsetRange.emptyAt(segments[segments.length - 1].range.endExclusive) });
14 | }
15 | }
16 | let i = 0;
17 | while (i < value.length) {
18 | if (value[i] === "/" || value[i] === "\\") {
19 | pushLatestLiteralValue();
20 | segments.push({ type: "pathSeparator", value: value[i], range: new OffsetRange(i, i + 1) });
21 | i++;
22 | } else {
23 | let len = 1;
24 | while (value[i + len] && value[i + len] !== "/" && value[i + len] !== "\\") {
25 | len++;
26 | }
27 | segments.push({ type: "literal", value: value.slice(i, i + len), range: new OffsetRange(i, i + len) });
28 | i += len;
29 | }
30 | }
31 | pushLatestLiteralValue();
32 | return new ParsedPath(segments);
33 | }
34 |
35 | constructor(public readonly segments: readonly ParsedPathSegment[]) { }
36 |
37 | public getLiteralSegmentTouchingPos(pos: number): ParsedPathSegment | undefined {
38 | return this.segments.find(s => s.type === "literal" && (s.range.deltaEnd(1).contains(pos)));
39 | }
40 |
41 | public getSubPath(idxEndEx: number): string {
42 | return this.segments.slice(0, idxEndEx).map(s => s.value).join("");
43 | }
44 |
45 | public get text(): string {
46 | return this.segments.map(s => s.value).join("");
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/vscode-extension/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "ts-file-path-support",
3 | "private": true,
4 | "displayName": "TS/JS Relative File Path Support",
5 | "description": "Provides support for relative file paths in TypeScript and JavaScript. This includes auto-complete, go to definition, rename and inlining/extraction.",
6 | "version": "1.0.0",
7 | "icon": "docs/logo.drawio.png",
8 | "keywords": [
9 | "typescript",
10 | "javascript",
11 | "relative",
12 | "file",
13 | "path"
14 | ],
15 | "license": "MIT",
16 | "engines": {
17 | "vscode": "^1.90.0"
18 | },
19 | "files": [
20 | "dist/**/*",
21 | "package.json",
22 | "node_modules/@vscode/ts-plugin-file-path-support/**/*",
23 | "docs/logo.drawio.png",
24 | "LICENSE"
25 | ],
26 | "publisher": "ms-vscode",
27 | "readme": "./README.md",
28 | "repository": {
29 | "url": "https://github.com/microsoft/vscode-ts-file-path-support.git"
30 | },
31 | "categories": [
32 | "Programming Languages"
33 | ],
34 | "activationEvents": [
35 | "onLanguage:typescript",
36 | "onLanguage:typescriptreact",
37 | "onLanguage:javascript",
38 | "onLanguage:javascriptreact"
39 | ],
40 | "main": "dist/index",
41 | "contributes": {
42 | "typescriptServerPlugins": [
43 | {
44 | "name": "@vscode/ts-plugin-file-path-support",
45 | "enableForWorkspaceTypeScriptVersions": true
46 | }
47 | ]
48 | },
49 | "scripts": {
50 | "build": "yarn build-src && yarn build-package",
51 | "build-src": "rollup -c rollup.config.mjs",
52 | "build-package": "vsce package --out extension.vsix",
53 | "dev": "rollup -c rollup.config.mjs --watch"
54 | },
55 | "dependencies": {
56 | "@vscode/ts-plugin-file-path-support": "*"
57 | },
58 | "devDependencies": {
59 | "@rollup/plugin-typescript": "11.1.6",
60 | "@types/node": "^20.14.9",
61 | "@types/vscode": "^1.90.0",
62 | "@vscode/vsce": "^3.2.2",
63 | "rollup": "4.22.4",
64 | "rollup-plugin-copy": "3.5.0",
65 | "rollup-plugin-delete": "2.0.0",
66 | "typescript": "^5.5.2"
67 | },
68 | "vsce": {
69 | "baseImagesUrl": "https://github.com/microsoft/vscode-ts-file-path-support/raw/main/vscode-extension",
70 | "baseContentUrl": "https://github.com/microsoft/vscode-ts-file-path-support/raw/main/vscode-extension",
71 | "yarn": true
72 | }
73 | }
--------------------------------------------------------------------------------
/SECURITY.md:
--------------------------------------------------------------------------------
1 |
2 |
3 | ## Security
4 |
5 | Microsoft takes the security of our software products and services seriously, which includes all source code repositories managed through our GitHub organizations, which include [Microsoft](https://github.com/Microsoft), [Azure](https://github.com/Azure), [DotNet](https://github.com/dotnet), [AspNet](https://github.com/aspnet) and [Xamarin](https://github.com/xamarin).
6 |
7 | If you believe you have found a security vulnerability in any Microsoft-owned repository that meets [Microsoft's definition of a security vulnerability](https://aka.ms/security.md/definition), please report it to us as described below.
8 |
9 | ## Reporting Security Issues
10 |
11 | **Please do not report security vulnerabilities through public GitHub issues.**
12 |
13 | Instead, please report them to the Microsoft Security Response Center (MSRC) at [https://msrc.microsoft.com/create-report](https://aka.ms/security.md/msrc/create-report).
14 |
15 | If you prefer to submit without logging in, send email to [secure@microsoft.com](mailto:secure@microsoft.com). If possible, encrypt your message with our PGP key; please download it from the [Microsoft Security Response Center PGP Key page](https://aka.ms/security.md/msrc/pgp).
16 |
17 | You should receive a response within 24 hours. If for some reason you do not, please follow up via email to ensure we received your original message. Additional information can be found at [microsoft.com/msrc](https://www.microsoft.com/msrc).
18 |
19 | Please include the requested information listed below (as much as you can provide) to help us better understand the nature and scope of the possible issue:
20 |
21 | * Type of issue (e.g. buffer overflow, SQL injection, cross-site scripting, etc.)
22 | * Full paths of source file(s) related to the manifestation of the issue
23 | * The location of the affected source code (tag/branch/commit or direct URL)
24 | * Any special configuration required to reproduce the issue
25 | * Step-by-step instructions to reproduce the issue
26 | * Proof-of-concept or exploit code (if possible)
27 | * Impact of the issue, including how an attacker might exploit the issue
28 |
29 | This information will help us triage your report more quickly.
30 |
31 | If you are reporting for a bug bounty, more complete reports can contribute to a higher bounty award. Please visit our [Microsoft Bug Bounty Program](https://aka.ms/security.md/msrc/bounty) page for more details about our active programs.
32 |
33 | ## Preferred Languages
34 |
35 | We prefer all communications to be in English.
36 |
37 | ## Policy
38 |
39 | Microsoft follows the principle of [Coordinated Vulnerability Disclosure](https://aka.ms/security.md/cvd).
40 |
41 |
42 |
--------------------------------------------------------------------------------
/language-service-plugin/test/utils.ts:
--------------------------------------------------------------------------------
1 | import * as ts from "typescript";
2 |
3 | export function withLanguageService(
4 | content: string | Record,
5 | testFn: (tsApi: typeof ts, languageService: ts.LanguageService, sf: ts.SourceFile, markers: number[]) => void,
6 | ): void {
7 | if (typeof content === "string") {
8 | content = { "root/main.ts": content };
9 | }
10 |
11 | const files = new Map(
12 | Object.entries(content).map(([key, value]) => [key, stripMarkers(value).stripped])
13 | );
14 | const serviceHost = new VirtualLanguageServiceHost(files, {});
15 | const baseService = ts.createLanguageService(
16 | serviceHost,
17 | ts.createDocumentRegistry()
18 | );
19 |
20 | testFn(ts, baseService, baseService.getProgram()!.getSourceFile(Object.keys(content)[0])!, stripMarkers(Object.values(content)[0]).markers);
21 | }
22 |
23 | export class VirtualLanguageServiceHost implements ts.LanguageServiceHost {
24 | constructor(
25 | private readonly files: Map,
26 | private readonly compilationSettings: ts.CompilerOptions
27 | ) { }
28 |
29 | public getScriptFileNames(): string[] {
30 | return [...this.files.keys()];
31 | }
32 |
33 | public getScriptVersion(fileName: string): string {
34 | return "1.0"; // our files don't change
35 | }
36 |
37 | public getScriptSnapshot(fileName: string): ts.IScriptSnapshot | undefined {
38 | const content = this.files.get(fileName);
39 | if (!content) {
40 | return undefined;
41 | }
42 | return {
43 | dispose() { },
44 | getChangeRange: () => undefined,
45 | getLength: () => content.length,
46 | getText: (start, end) => content.substr(start, end - start),
47 | };
48 | }
49 |
50 | public getCompilationSettings(): ts.CompilerOptions {
51 | return this.compilationSettings;
52 | }
53 |
54 | public getCurrentDirectory(): string {
55 | return "/";
56 | }
57 |
58 | public getDefaultLibFileName(options: ts.CompilerOptions): string {
59 | return ts.getDefaultLibFileName(options);
60 | }
61 |
62 | public readFile(path: string, encoding?: string): string | undefined {
63 | return this.files.get(path);
64 | }
65 |
66 | public fileExists(path: string): boolean {
67 | return this.files.has(path);
68 | }
69 | }
70 |
71 | function stripMarkers(src: string): { stripped: string; markers: number[] } {
72 | let stripped = "";
73 | const markers = new Array();
74 | let i = 0;
75 | let first = true;
76 | for (const part of src.split("|")) {
77 | if (first) {
78 | first = false;
79 | } else {
80 | markers.push(i);
81 | }
82 | stripped += part;
83 | i += part.length;
84 | }
85 | return {
86 | stripped,
87 | markers,
88 | };
89 | }
90 |
--------------------------------------------------------------------------------
/language-service-plugin/src/impl/ParsedJsString.ts:
--------------------------------------------------------------------------------
1 | import { OffsetRange } from "../utils/offsetRange";
2 |
3 | type ParsedStringPart = { type: "escapeSequence" | "literalValue" | "meta"; range: OffsetRange; value: string; };
4 |
5 | export class ParsedJsString {
6 | public static parse(source: string): ParsedJsString {
7 | const result: ParsedStringPart[] = [];
8 | let i = 0;
9 | while (i < source.length) {
10 | const c = source[i];
11 | if (c === "\\") {
12 | const next = source[i + 1];
13 | if (next === "n") {
14 | result.push({ type: "escapeSequence", range: new OffsetRange(i, i + 2), value: "\n" });
15 | } else if (next === "r") {
16 | result.push({ type: "escapeSequence", range: new OffsetRange(i, i + 2), value: "\r" });
17 | } else if (next === "t") {
18 | result.push({ type: "escapeSequence", range: new OffsetRange(i, i + 2), value: "\t" });
19 | } else {
20 | result.push({ type: "escapeSequence", range: new OffsetRange(i, i + 2), value: next });
21 | }
22 | i += 2;
23 | } else if (c === "\'" || c === "\"") {
24 | result.push({ type: "meta", range: new OffsetRange(i, i + 1), value: '' });
25 | i += 1;
26 | } else {
27 | let len = 1;
28 | while (source[i + len] && source[i + len] !== "\\" && source[i + len] !== "\"" && source[i + len] !== "'") {
29 | len++;
30 | }
31 | result.push({ type: "literalValue", range: new OffsetRange(i, i + len), value: source.slice(i, i + len) });
32 | i += len;
33 | }
34 | }
35 | return new ParsedJsString(result, source);
36 | }
37 |
38 | constructor(
39 | public readonly parts: readonly ParsedStringPart[],
40 | public readonly source: string
41 | ) { }
42 |
43 | get value() {
44 | return this.parts.map(p => p.value).join("");
45 | }
46 |
47 | posInSourceToValue(pos: number): number {
48 | let valueLengthBefore = 0;
49 | for (const p of this.parts) {
50 | if (p.range.contains(pos)) {
51 | return valueLengthBefore + pos - p.range.start;
52 | }
53 | valueLengthBefore += p.value.length;
54 | }
55 | return this.value.length;
56 | }
57 |
58 | posInValueToSource(pos: number): number {
59 | let valueLengthBefore = 0;
60 | for (const p of this.parts) {
61 | if (valueLengthBefore + p.value.length >= pos) {
62 | if (p.type === "escapeSequence" || p.type === "meta") {
63 | return p.range.endExclusive;
64 | }
65 | return p.range.start + pos - valueLengthBefore;
66 | }
67 | valueLengthBefore += p.value.length;
68 | }
69 |
70 | return this.source.length;
71 | }
72 |
73 | getRangeWithoutQuotes(): OffsetRange {
74 | const firstMeta = this.parts.find(p => p.type === "meta");
75 | const lastMeta = this.parts.slice().reverse().find(p => p.type === "meta");
76 | if (!firstMeta || !lastMeta) {
77 | return new OffsetRange(0, this.source.length);
78 | }
79 | if (firstMeta === lastMeta) {
80 | return new OffsetRange(firstMeta.range.endExclusive, firstMeta.range.endExclusive);
81 | }
82 | return new OffsetRange(firstMeta.range.endExclusive, lastMeta.range.start);
83 | }
84 | }
85 |
--------------------------------------------------------------------------------
/language-service-plugin/src/impl/createServiceImpl.ts:
--------------------------------------------------------------------------------
1 | import type * as ts from "typescript";
2 | import { createCustomService } from "../rpc/registerCustomService";
3 | import { RelativeFilePathService } from "../api";
4 | import { AstMatchers } from "./AstMatchers";
5 |
6 | export function createServiceImpl(typescript: typeof ts, languageService: ts.LanguageService) {
7 | return createCustomService({
8 | findRelativeFileNodeAt({ fileName, position }) {
9 | const program = languageService.getProgram();
10 | if (!program) { return undefined; }
11 | const utils = new AstMatchers(typescript);
12 | const nodeAtCursor = utils.findNodeAt(program, fileName, position);
13 | if (!nodeAtCursor) { return undefined; }
14 | const result = utils.findNodeOrAncestor(nodeAtCursor, n => utils.parseFilePathCallExpression(program, n));
15 | if (!result) { return undefined; }
16 |
17 | // Only trigger when cursor is on the string literal
18 | if (result.relativePathNode !== nodeAtCursor) { return undefined; }
19 |
20 | const cursorInfo = result.getCursorInfo(position);
21 | return {
22 | baseDir: result.baseDir,
23 | relativePath: result.relativePath,
24 | relativePathBeforeCursor: cursorInfo.relativePathBeforeCursorSegment,
25 | stringValueRange: [result.relativePathValueRange.start, result.relativePathValueRange.endExclusive],
26 | cursorSegmentRange: [cursorInfo.cursorSegmentRange.start, cursorInfo.cursorSegmentRange.endExclusive],
27 | };
28 | },
29 |
30 | findFileNameFileContentObjAt({ fileName, position }) {
31 | const program = languageService.getProgram();
32 | if (!program) { return undefined; }
33 | const utils = new AstMatchers(typescript);
34 | const nodeAtCursor = utils.findNodeAt(program, fileName, position);
35 | if (!nodeAtCursor) { return undefined; }
36 | const result = utils.findNodeOrAncestor(nodeAtCursor, n => utils.parseFileNameFileContentObj(program, n));
37 | if (!result) { return undefined; }
38 |
39 | const fns = utils.findFilePathFns(program, result.node);
40 | if (fns.length === 0) { return undefined; }
41 |
42 | return {
43 | isMultiLine: true,
44 | fileContents: result.fileContents,
45 | fileName: result.fileName,
46 | relativeFilePathBaseDir: fns[0].resolvedBasePath,
47 | relativeFilePathFnName: fns[0].fnName,
48 | replaceRange: [result.replaceRange.start, result.replaceRange.endExclusive],
49 | };
50 | },
51 |
52 | findFilePathObjAt({ fileName, position }) {
53 | const program = languageService.getProgram();
54 | if (!program) { return undefined; }
55 | const utils = new AstMatchers(typescript);
56 | const nodeAtCursor = utils.findNodeAt(program, fileName, position);
57 | if (!nodeAtCursor) { return undefined; }
58 | const result = utils.findNodeOrAncestor(nodeAtCursor, n => utils.parseFilePathObj(program, n));
59 | if (!result) { return undefined; }
60 |
61 | return {
62 | isMultiLine: true,
63 | baseDir: result.filePathInfo.baseDir,
64 | relativePath: result.filePathInfo.relativePathParsed.value,
65 | replaceRange: [result.replaceRange.start, result.replaceRange.endExclusive],
66 | };
67 | }
68 | });
69 | }
70 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # TypeScript Relative File Path Support
2 |
3 | ## Setup
4 |
5 | * Install this extension
6 |
7 | * For TypeScript:
8 | * Declare a type of name `RelativeFilePath` with one type parameter:
9 | ```ts
10 | type RelativeFilePath = string & { baseDir?: T };
11 | ```
12 | * Declare a function that uses this type (the name of the function is arbitrary):
13 | ```ts
14 | function myFn(path: RelativeFilePath<'$dir/mySubDir'>) {
15 | // The implementation is up to you.
16 | }
17 | ```
18 | * For JavaScript (use JS Docs to specify the types):
19 | ```js
20 | /**
21 | * @typedef {string & { foo?: TBaseDir }} RelativeFilePath
22 | * @template TBaseDir
23 | */
24 |
25 | /**
26 | * @param {RelativeFilePath<'$dir/mySubDir'>} path
27 | */
28 | function myFn(path) { ... }
29 | ```
30 |
31 |
32 | * Use `$dir` to reference the full directory path to the file that defines the function.
33 | * The first overloading of this function must have exactly one parameter which has to be of the mentioned type.
34 | * Now you get editor support for file paths in `myFn` call expressions!
35 | ```ts
36 | // Relative to `mySubDir` in the directory of the source file that defines `myFn`
37 | myFn('myDir/myFile.txt');
38 | ```
39 |
40 |
41 | ## Features
42 |
43 | ### Go-To-Definition
44 |
45 | Opens the referenced file in a new editor.
46 |
47 | 
48 |
49 | ### Path-Completion
50 |
51 | Provides auto-completion for file-paths (relative to the specified base directory).
52 |
53 | 
54 |
55 | ### Renaming
56 |
57 | Renames the referenced file and updates the file path.
58 |
59 | 
60 |
61 |
62 | ### Inlining
63 |
64 | Inlining deletes the referenced file on disk and inlines its content as `fileContents` property.
65 | Only works on objects that have the shape `{ filePath: myPathFn("myRelativePathStr"), ...additionalProperties }`.
66 |
67 | 
68 |
69 | ### Extraction
70 |
71 | Extraction is the opposit of inlining: This action creates a file on disk with the specified content and references this file by a file path function in scope (which means it has to be in the same file or imported).
72 | Only works on objects that have the shape `{ fileName: "myRelativeFileName", fileContents: "myFileContent", ...additionalProperties }`.
73 |
74 | 
75 |
76 | ## Contributing
77 |
78 | This project welcomes contributions and suggestions. Most contributions require you to agree to a
79 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
80 | the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
81 |
82 | When you submit a pull request, a CLA bot will automatically determine whether you need to provide
83 | a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions
84 | provided by the bot. You will only need to do this once across all repos using our CLA.
85 |
86 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
87 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
88 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
89 |
90 | ## Trademarks
91 |
92 | This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft
93 | trademarks or logos is subject to and must follow
94 | [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).
95 | Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.
96 | Any use of third-party trademarks or logos are subject to those third-party's policies.
97 |
--------------------------------------------------------------------------------
/vscode-extension/README.md:
--------------------------------------------------------------------------------
1 | # TypeScript/JavaScript Relative File Path Support
2 |
3 | An extension that provides support for dealing with (relative) file paths in TypeScript/JavaScript.
4 |
5 | ## Setup
6 |
7 | * Install this extension
8 |
9 | * For TypeScript:
10 | * Declare a type of name `RelativeFilePath` with one type parameter:
11 | ```ts
12 | type RelativeFilePath = string & { baseDir?: T };
13 | ```
14 | * Declare a function that uses this type (the name of the function is arbitrary):
15 | ```ts
16 | function myFn(path: RelativeFilePath<'$dir/mySubDir'>) {
17 | // The implementation is up to you.
18 | }
19 | ```
20 | * For JavaScript (use JS Docs to specify the types):
21 | ```js
22 | /**
23 | * @typedef {string & { foo?: TBaseDir }} RelativeFilePath
24 | * @template TBaseDir
25 | */
26 |
27 | /**
28 | * @param {RelativeFilePath<'$dir/mySubDir'>} path
29 | */
30 | function myFn(path) { ... }
31 | ```
32 |
33 |
34 | * Use `$dir` to reference the full directory path to the file that defines the function.
35 | * The first overloading of this function must have exactly one parameter which has to be of the mentioned type.
36 | * Now you get editor support for file paths in `myFn` call expressions!
37 | ```ts
38 | // Relative to `mySubDir` in the directory of the source file that defines `myFn`
39 | myFn('myDir/myFile.txt');
40 | ```
41 |
42 |
43 | ## Features
44 |
45 | ### Go-To-Definition
46 |
47 | Opens the referenced file in a new editor.
48 |
49 | 
50 |
51 | ### Path-Completion
52 |
53 | Provides auto-completion for file-paths (relative to the specified base directory).
54 |
55 | 
56 |
57 | ### Renaming
58 |
59 | Renames the referenced file and updates the file path.
60 |
61 | 
62 |
63 |
64 | ### Inlining
65 |
66 | Inlining deletes the referenced file on disk and inlines its content as `fileContents` property.
67 | Only works on objects that have the shape `{ filePath: myPathFn("myRelativePathStr"), ...additionalProperties }`.
68 |
69 | 
70 |
71 | ### Extraction
72 |
73 | Extraction is the opposit of inlining: This action creates a file on disk with the specified content and references this file by a file path function in scope (which means it has to be in the same file or imported).
74 | Only works on objects that have the shape `{ fileName: "myRelativeFileName", fileContents: "myFileContent", ...additionalProperties }`.
75 |
76 | 
77 |
78 | ## Contributing
79 |
80 | This project welcomes contributions and suggestions. Most contributions require you to agree to a
81 | Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us
82 | the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.
83 |
84 | When you submit a pull request, a CLA bot will automatically determine whether you need to provide
85 | a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions
86 | provided by the bot. You will only need to do this once across all repos using our CLA.
87 |
88 | This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/).
89 | For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or
90 | contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments.
91 |
92 | ## Trademarks
93 |
94 | This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft
95 | trademarks or logos is subject to and must follow
96 | [Microsoft's Trademark & Brand Guidelines](https://www.microsoft.com/en-us/legal/intellectualproperty/trademarks/usage/general).
97 | Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship.
98 | Any use of third-party trademarks or logos are subject to those third-party's policies.
99 |
--------------------------------------------------------------------------------
/vscode-extension/src/index.ts:
--------------------------------------------------------------------------------
1 | import { promises as fs } from "fs";
2 | import { join } from "path";
3 | import type { RelativeFilePathService, RelativeFilePathServiceId } from "@vscode/ts-plugin-file-path-support/src/api";
4 | import { CompletionItem, CompletionItemKind, ExtensionContext, languages, Range, LocationLink, WorkspaceEdit, Uri, CodeAction, CodeActionKind, DocumentSelector } from "vscode";
5 | import { createTsLspCustomServiceClient } from "./createTsLspCustomServiceClient";
6 |
7 | export class Extension {
8 | constructor() {
9 | const id: RelativeFilePathServiceId = "tsRelativeFilePath";
10 | const client = createTsLspCustomServiceClient(id);
11 |
12 | const selector: DocumentSelector = [
13 | { language: "typescript", },
14 | { language: "typescriptreact", },
15 | { language: "javascript", },
16 | { language: "javascriptreact", }
17 | ];
18 |
19 | languages.registerCompletionItemProvider(selector, {
20 | async provideCompletionItems(document, position, token, context) {
21 | const result = await client.findRelativeFileNodeAt({ uri: document.uri, position: position });
22 | if (!result) { return undefined; }
23 |
24 | const curDir = join(result.baseDir, result.relativePathBeforeCursor);
25 |
26 | const filesInDir = await fs.readdir(curDir);
27 | const items = await Promise.all(filesInDir.map(async f => ({
28 | name: f,
29 | isDir: (await fs.lstat(join(curDir, f))).isDirectory(),
30 | })));
31 |
32 | items.unshift({ name: ".", isDir: true });
33 | items.unshift({ name: "..", isDir: true });
34 |
35 | const replaceRange = result.cursorSegmentRange;
36 | const range = new Range(document.positionAt(replaceRange[0]), document.positionAt(replaceRange[1]));
37 |
38 | return items.map(({ name, isDir }) => {
39 | return {
40 | range,
41 | label: name,
42 | kind: isDir ? CompletionItemKind.Folder : CompletionItemKind.File,
43 | insertText: isDir ? name + '/' : name,
44 | command: isDir ? {
45 | command: 'editor.action.triggerSuggest',
46 | title: '',
47 | } : undefined,
48 | };
49 | });
50 | },
51 | }, '/', '.');
52 |
53 | languages.registerDefinitionProvider(selector, {
54 | async provideDefinition(document, position, token): Promise {
55 | const result = await client.findRelativeFileNodeAt({ uri: document.uri, position: position });
56 | if (!result) { return undefined; }
57 | const range = new Range(document.positionAt(result.stringValueRange[0]), document.positionAt(result.stringValueRange[1]));
58 | return [{
59 | targetUri: Uri.file(join(result.baseDir, result.relativePath)),
60 | targetRange: new Range(0, 0, 0, 0),
61 | originSelectionRange: range,
62 | }];
63 | },
64 | });
65 |
66 | languages.registerRenameProvider(selector, {
67 | async prepareRename(document, position, token) {
68 | const result = await client.findRelativeFileNodeAt({ uri: document.uri, position: position });
69 | if (!result) { return undefined; }
70 | const range = new Range(document.positionAt(result.stringValueRange[0]), document.positionAt(result.stringValueRange[1]));
71 | return {
72 | range,
73 | placeholder: result.relativePath,
74 | }
75 | },
76 | async provideRenameEdits(document, position, newName, token): Promise {
77 | const result = await client.findRelativeFileNodeAt({ uri: document.uri, position: position });
78 | if (!result) { return undefined; }
79 |
80 | const edit = new WorkspaceEdit();
81 | const oldPath = join(result.baseDir, result.relativePath);
82 | const newPath = join(result.baseDir, newName);
83 | edit.renameFile(Uri.file(oldPath), Uri.file(newPath), { overwrite: false, ignoreIfExists: false });
84 | edit.replace(document.uri, new Range(document.positionAt(result.stringValueRange[0]), document.positionAt(result.stringValueRange[1])), newName);
85 | return edit;
86 | },
87 | });
88 |
89 | languages.registerCodeActionsProvider(selector, {
90 | async provideCodeActions(document, range, context, token) {
91 | if (context.only && (!context.only.value.startsWith('refactor.extract') || !context.only.value.includes('refactor.inline'))) {
92 | return;
93 | }
94 |
95 | const result: CodeAction[] = [];
96 |
97 | const filePathObjInfo = await client.findFilePathObjAt({ uri: document.uri, position: range.start });
98 | if (filePathObjInfo) {
99 | const fullPath = join(filePathObjInfo.baseDir, filePathObjInfo.relativePath);
100 | const fileContents = await fs.readFile(fullPath, { encoding: 'utf8' });
101 | const range = new Range(document.positionAt(filePathObjInfo.replaceRange[0]), document.positionAt(filePathObjInfo.replaceRange[1]));
102 | const line = document.lineAt(range.start.line);
103 | const indentation = line.text.substring(0, line.firstNonWhitespaceCharacterIndex);
104 | const newText = `fileName: ${JSON.stringify(filePathObjInfo.relativePath)},\n${indentation}fileContents: ${JSON.stringify(fileContents)}`;
105 |
106 | const editInlineAndDelete = new WorkspaceEdit();
107 | editInlineAndDelete.replace(document.uri, range, newText);
108 | editInlineAndDelete.deleteFile(Uri.file(fullPath));
109 | result.push({
110 | title: "Inline And Delete File",
111 | isPreferred: true,
112 | kind: CodeActionKind.RefactorInline,
113 | edit: editInlineAndDelete,
114 | });
115 |
116 | const editInline = new WorkspaceEdit();
117 | editInline.replace(document.uri, range, newText);
118 | editInline.deleteFile(Uri.file(fullPath));
119 | result.push({
120 | title: "Inline File",
121 | kind: CodeActionKind.RefactorInline,
122 | edit: editInline,
123 | });
124 | }
125 |
126 | const fileNameFileContentObjInfo = await client.findFileNameFileContentObjAt({ uri: document.uri, position: range.start });
127 | if (fileNameFileContentObjInfo) {
128 | const range = new Range(document.positionAt(fileNameFileContentObjInfo.replaceRange[0]), document.positionAt(fileNameFileContentObjInfo.replaceRange[1]));
129 | const newText = `filePath: ${fileNameFileContentObjInfo.relativeFilePathFnName}(${JSON.stringify(fileNameFileContentObjInfo.fileName)})`;
130 |
131 | const editExtract = new WorkspaceEdit();
132 | editExtract.replace(document.uri, range, newText);
133 | const newUri = Uri.file(join(fileNameFileContentObjInfo.relativeFilePathBaseDir, fileNameFileContentObjInfo.fileName));
134 | editExtract.createFile(newUri, { ignoreIfExists: false, overwrite: false });
135 | editExtract.replace(newUri, new Range(0, 0, 0, 0), fileNameFileContentObjInfo.fileContents);
136 | result.push({
137 | title: "Extract File",
138 | kind: CodeActionKind.RefactorExtract,
139 | edit: editExtract,
140 | });
141 | }
142 |
143 | return result;
144 | },
145 | });
146 |
147 | // TODO diagnostics provider
148 | }
149 |
150 | dispose(): void {
151 | }
152 | }
153 |
154 | export function activate(context: ExtensionContext) {
155 | context.subscriptions.push(new Extension());
156 | }
157 |
158 | export function deactivate() { }
159 |
--------------------------------------------------------------------------------
/language-service-plugin/src/utils/offsetRange.ts:
--------------------------------------------------------------------------------
1 | /*---------------------------------------------------------------------------------------------
2 | * Copyright (c) Microsoft Corporation. All rights reserved.
3 | * Licensed under the MIT License. See License.txt in the project root for license information.
4 | *--------------------------------------------------------------------------------------------*/
5 |
6 | export interface IOffsetRange {
7 | readonly start: number;
8 | readonly endExclusive: number;
9 | }
10 |
11 | /**
12 | * A range of offsets (0-based).
13 | */
14 | export class OffsetRange implements IOffsetRange {
15 | public static emptyAt(offset: number): OffsetRange {
16 | return new OffsetRange(offset, offset);
17 | }
18 |
19 | public static addRange(range: OffsetRange, sortedRanges: OffsetRange[]): void {
20 | let i = 0;
21 | while (i < sortedRanges.length && sortedRanges[i].endExclusive < range.start) {
22 | i++;
23 | }
24 | let j = i;
25 | while (j < sortedRanges.length && sortedRanges[j].start <= range.endExclusive) {
26 | j++;
27 | }
28 | if (i === j) {
29 | sortedRanges.splice(i, 0, range);
30 | } else {
31 | const start = Math.min(range.start, sortedRanges[i].start);
32 | const end = Math.max(range.endExclusive, sortedRanges[j - 1].endExclusive);
33 | sortedRanges.splice(i, j - i, new OffsetRange(start, end));
34 | }
35 | }
36 |
37 | public static tryCreate(start: number, endExclusive: number): OffsetRange | undefined {
38 | if (start > endExclusive) {
39 | return undefined;
40 | }
41 | return new OffsetRange(start, endExclusive);
42 | }
43 |
44 | public static ofLength(length: number): OffsetRange {
45 | return new OffsetRange(0, length);
46 | }
47 |
48 | public static ofStartAndLength(start: number, length: number): OffsetRange {
49 | return new OffsetRange(start, start + length);
50 | }
51 |
52 | constructor(public readonly start: number, public readonly endExclusive: number) {
53 | if (start > endExclusive) {
54 | throw new Error(`Invalid range: ${this.toString()}`);
55 | }
56 | }
57 |
58 | get isEmpty(): boolean {
59 | return this.start === this.endExclusive;
60 | }
61 |
62 | public delta(offset: number): OffsetRange {
63 | return new OffsetRange(this.start + offset, this.endExclusive + offset);
64 | }
65 |
66 | public deltaStart(offset: number): OffsetRange {
67 | return new OffsetRange(this.start + offset, this.endExclusive);
68 | }
69 |
70 | public deltaEnd(offset: number): OffsetRange {
71 | return new OffsetRange(this.start, this.endExclusive + offset);
72 | }
73 |
74 | public get length(): number {
75 | return this.endExclusive - this.start;
76 | }
77 |
78 | public toString() {
79 | return `[${this.start}, ${this.endExclusive})`;
80 | }
81 |
82 | public equals(other: OffsetRange): boolean {
83 | return this.start === other.start && this.endExclusive === other.endExclusive;
84 | }
85 |
86 | public containsRange(other: OffsetRange): boolean {
87 | return this.start <= other.start && other.endExclusive <= this.endExclusive;
88 | }
89 |
90 | public contains(offset: number): boolean {
91 | return this.start <= offset && offset < this.endExclusive;
92 | }
93 |
94 | /**
95 | * for all numbers n: range1.contains(n) or range2.contains(n) => range1.join(range2).contains(n)
96 | * The joined range is the smallest range that contains both ranges.
97 | */
98 | public join(other: OffsetRange): OffsetRange {
99 | return new OffsetRange(Math.min(this.start, other.start), Math.max(this.endExclusive, other.endExclusive));
100 | }
101 |
102 | /**
103 | * for all numbers n: range1.contains(n) and range2.contains(n) <=> range1.intersect(range2).contains(n)
104 | *
105 | * The resulting range is empty if the ranges do not intersect, but touch.
106 | * If the ranges don't even touch, the result is undefined.
107 | */
108 | public intersect(other: OffsetRange): OffsetRange | undefined {
109 | const start = Math.max(this.start, other.start);
110 | const end = Math.min(this.endExclusive, other.endExclusive);
111 | if (start <= end) {
112 | return new OffsetRange(start, end);
113 | }
114 | return undefined;
115 | }
116 |
117 | public intersects(other: OffsetRange): boolean {
118 | const start = Math.max(this.start, other.start);
119 | const end = Math.min(this.endExclusive, other.endExclusive);
120 | return start < end;
121 | }
122 |
123 | public intersectsOrTouches(other: OffsetRange): boolean {
124 | const start = Math.max(this.start, other.start);
125 | const end = Math.min(this.endExclusive, other.endExclusive);
126 | return start <= end;
127 | }
128 |
129 | public isBefore(other: OffsetRange): boolean {
130 | return this.endExclusive <= other.start;
131 | }
132 |
133 | public isAfter(other: OffsetRange): boolean {
134 | return this.start >= other.endExclusive;
135 | }
136 |
137 | public slice(arr: T[]): T[] {
138 | return arr.slice(this.start, this.endExclusive);
139 | }
140 |
141 | public substring(str: string): string {
142 | return str.substring(this.start, this.endExclusive);
143 | }
144 |
145 | /**
146 | * Returns the given value if it is contained in this instance, otherwise the closest value that is contained.
147 | * The range must not be empty.
148 | */
149 | public clip(value: number): number {
150 | if (this.isEmpty) {
151 | throw new Error(`Invalid clipping range: ${this.toString()}`);
152 | }
153 | return Math.max(this.start, Math.min(this.endExclusive - 1, value));
154 | }
155 |
156 | /**
157 | * Returns `r := value + k * length` such that `r` is contained in this range.
158 | * The range must not be empty.
159 | *
160 | * E.g. `[5, 10).clipCyclic(10) === 5`, `[5, 10).clipCyclic(11) === 6` and `[5, 10).clipCyclic(4) === 9`.
161 | */
162 | public clipCyclic(value: number): number {
163 | if (this.isEmpty) {
164 | throw new Error(`Invalid clipping range: ${this.toString()}`);
165 | }
166 | if (value < this.start) {
167 | return this.endExclusive - ((this.start - value) % this.length);
168 | }
169 | if (value >= this.endExclusive) {
170 | return this.start + ((value - this.start) % this.length);
171 | }
172 | return value;
173 | }
174 |
175 | public map(f: (offset: number) => T): T[] {
176 | const result: T[] = [];
177 | for (let i = this.start; i < this.endExclusive; i++) {
178 | result.push(f(i));
179 | }
180 | return result;
181 | }
182 |
183 | public mapBounds(f: (offset: number) => number): OffsetRange {
184 | return new OffsetRange(f(this.start), f(this.endExclusive));
185 | }
186 |
187 | public forEach(f: (offset: number) => void): void {
188 | for (let i = this.start; i < this.endExclusive; i++) {
189 | f(i);
190 | }
191 | }
192 | }
193 |
194 | export class OffsetRangeSet {
195 | private readonly _sortedRanges: OffsetRange[] = [];
196 |
197 | public addRange(range: OffsetRange): void {
198 | let i = 0;
199 | while (i < this._sortedRanges.length && this._sortedRanges[i].endExclusive < range.start) {
200 | i++;
201 | }
202 | let j = i;
203 | while (j < this._sortedRanges.length && this._sortedRanges[j].start <= range.endExclusive) {
204 | j++;
205 | }
206 | if (i === j) {
207 | this._sortedRanges.splice(i, 0, range);
208 | } else {
209 | const start = Math.min(range.start, this._sortedRanges[i].start);
210 | const end = Math.max(range.endExclusive, this._sortedRanges[j - 1].endExclusive);
211 | this._sortedRanges.splice(i, j - i, new OffsetRange(start, end));
212 | }
213 | }
214 |
215 | public toString(): string {
216 | return this._sortedRanges.map(r => r.toString()).join(', ');
217 | }
218 |
219 | /**
220 | * Returns of there is a value that is contained in this instance and the given range.
221 | */
222 | public intersectsStrict(other: OffsetRange): boolean {
223 | // TODO use binary search
224 | let i = 0;
225 | while (i < this._sortedRanges.length && this._sortedRanges[i].endExclusive <= other.start) {
226 | i++;
227 | }
228 | return i < this._sortedRanges.length && this._sortedRanges[i].start < other.endExclusive;
229 | }
230 |
231 | public intersectWithRange(other: OffsetRange): OffsetRangeSet {
232 | // TODO use binary search + slice
233 | const result = new OffsetRangeSet();
234 | for (const range of this._sortedRanges) {
235 | const intersection = range.intersect(other);
236 | if (intersection) {
237 | result.addRange(intersection);
238 | }
239 | }
240 | return result;
241 | }
242 |
243 | public intersectWithRangeLength(other: OffsetRange): number {
244 | return this.intersectWithRange(other).length;
245 | }
246 |
247 | public get length(): number {
248 | return this._sortedRanges.reduce((prev, cur) => prev + cur.length, 0);
249 | }
250 | }
251 |
--------------------------------------------------------------------------------
/language-service-plugin/src/utils/edit.ts:
--------------------------------------------------------------------------------
1 | /*---------------------------------------------------------------------------------------------
2 | * Copyright (c) Microsoft Corporation. All rights reserved.
3 | * Licensed under the MIT License. See License.txt in the project root for license information.
4 | *--------------------------------------------------------------------------------------------*/
5 |
6 | import type * as vscode from 'vscode';
7 | import { OffsetRange } from './offsetRange';
8 |
9 | export class OffsetEdit {
10 | public static readonly empty = new OffsetEdit([]);
11 |
12 | public static fromJson(data: IOffsetEdit): OffsetEdit {
13 | return new OffsetEdit(data.map(SingleOffsetEdit.fromJson));
14 | }
15 |
16 | public static from(contentChanges: readonly vscode.TextDocumentContentChangeEvent[]) {
17 | const editsArr = contentChanges.map(c => new SingleOffsetEdit(OffsetRange.ofStartAndLength(c.rangeOffset, c.rangeLength), c.text));
18 | editsArr.reverse();
19 | const edits = new OffsetEdit(editsArr);
20 | return edits;
21 | }
22 |
23 | public static single(
24 | range: OffsetRange,
25 | newText: string,
26 | ): OffsetEdit {
27 | return new OffsetEdit([new SingleOffsetEdit(range, newText)]);
28 | }
29 |
30 | constructor(
31 | public readonly edits: readonly SingleOffsetEdit[],
32 | ) {
33 | let lastEndEx = -1;
34 | for (const edit of edits) {
35 | if (!(edit.replaceRange.start >= lastEndEx)) {
36 | throw new Error(`Edits must be disjoint and sorted. Found ${edit} after ${lastEndEx}`);
37 | }
38 | lastEndEx = edit.replaceRange.endExclusive;
39 | }
40 | }
41 |
42 | normalize(): OffsetEdit {
43 | const edits: SingleOffsetEdit[] = [];
44 | let lastEdit: SingleOffsetEdit | undefined;
45 | for (const edit of this.edits) {
46 | if (edit.newText.length === 0 && edit.replaceRange.length === 0) {
47 | continue;
48 | }
49 | if (lastEdit && lastEdit.replaceRange.endExclusive === edit.replaceRange.start) {
50 | lastEdit = new SingleOffsetEdit(
51 | lastEdit.replaceRange.join(edit.replaceRange),
52 | lastEdit.newText + edit.newText,
53 | );
54 | } else {
55 | if (lastEdit) {
56 | edits.push(lastEdit);
57 | }
58 | lastEdit = edit;
59 | }
60 | }
61 | if (lastEdit) {
62 | edits.push(lastEdit);
63 | }
64 | return new OffsetEdit(edits);
65 | }
66 |
67 | toString() {
68 | const edits = this.edits.map(e => e.toString()).join(', ');
69 | return `[${edits}]`;
70 | }
71 |
72 | apply(str: string): string {
73 | const resultText: string[] = [];
74 | let pos = 0;
75 | for (const edit of this.edits) {
76 | resultText.push(str.substring(pos, edit.replaceRange.start));
77 | resultText.push(edit.newText);
78 | pos = edit.replaceRange.endExclusive;
79 | }
80 | resultText.push(str.substring(pos));
81 | return resultText.join('');
82 | }
83 |
84 | compose(other: OffsetEdit): OffsetEdit {
85 | return joinEdits(this, other);
86 | }
87 |
88 | /**
89 | * Creates an edit that reverts this edit.
90 | */
91 | inverse(originalStr: string): OffsetEdit {
92 | const edits: SingleOffsetEdit[] = [];
93 | let offset = 0;
94 | for (const e of this.edits) {
95 | edits.push(new SingleOffsetEdit(
96 | OffsetRange.ofStartAndLength(e.replaceRange.start + offset, e.newText.length),
97 | originalStr.substring(e.replaceRange.start, e.replaceRange.endExclusive),
98 | ));
99 | offset += e.newText.length - e.replaceRange.length;
100 | }
101 | return new OffsetEdit(edits);
102 | }
103 |
104 | getNewTextRanges(): OffsetRange[] {
105 | const ranges: OffsetRange[] = [];
106 | let offset = 0;
107 | for (const e of this.edits) {
108 | ranges.push(OffsetRange.ofStartAndLength(e.replaceRange.start + offset, e.newText.length),);
109 | offset += e.newText.length - e.replaceRange.length;
110 | }
111 | return ranges;
112 | }
113 |
114 | get isEmpty(): boolean {
115 | return this.edits.length === 0;
116 | }
117 |
118 | applyToOffset(originalOffset: number): number {
119 | let accumulatedDelta = 0;
120 | for (const edit of this.edits) {
121 | if (edit.replaceRange.start <= originalOffset) {
122 | if (originalOffset < edit.replaceRange.endExclusive) {
123 | // the offset is in the replaced range
124 | return edit.replaceRange.start + accumulatedDelta;
125 | }
126 | accumulatedDelta += edit.newText.length - edit.replaceRange.length;
127 | } else {
128 | break;
129 | }
130 | }
131 | return originalOffset + accumulatedDelta;
132 | }
133 |
134 | applyToOffsetRange(originalRange: OffsetRange): OffsetRange {
135 | return new OffsetRange(
136 | this.applyToOffset(originalRange.start),
137 | this.applyToOffset(originalRange.endExclusive)
138 | );
139 | }
140 |
141 | applyInverseToOffset(postEditsOffset: number): number {
142 | let accumulatedDelta = 0;
143 | for (const edit of this.edits) {
144 | const editLength = edit.newText.length;
145 | if (edit.replaceRange.start <= postEditsOffset - accumulatedDelta) {
146 | if (postEditsOffset - accumulatedDelta < edit.replaceRange.start + editLength) {
147 | // the offset is in the replaced range
148 | return edit.replaceRange.start;
149 | }
150 | accumulatedDelta += editLength - edit.replaceRange.length;
151 | } else {
152 | break;
153 | }
154 | }
155 | return postEditsOffset - accumulatedDelta;
156 | }
157 | }
158 |
159 | export type IOffsetEdit = ISingleOffsetEdit[];
160 |
161 | export interface ISingleOffsetEdit {
162 | txt: string;
163 | pos: number;
164 | len: number;
165 | }
166 |
167 | export class SingleOffsetEdit {
168 | public static fromJson(data: ISingleOffsetEdit): SingleOffsetEdit {
169 | return new SingleOffsetEdit(
170 | OffsetRange.ofStartAndLength(data.pos, data.len),
171 | data.txt,
172 | );
173 | }
174 |
175 | constructor(
176 | public readonly replaceRange: OffsetRange,
177 | public readonly newText: string,
178 | ) { }
179 |
180 | toString(): string {
181 | return `${this.replaceRange} -> "${this.newText}"`;
182 | }
183 |
184 | get isEmpty() {
185 | return this.newText.length === 0 && this.replaceRange.length === 0;
186 | }
187 | }
188 |
189 | /**
190 | * Invariant:
191 | * ```
192 | * edits2.apply(edits1.apply(str)) = join(edits1, edits2).apply(str)
193 | * ```
194 | */
195 | function joinEdits(edits1: OffsetEdit, edits2: OffsetEdit): OffsetEdit {
196 | edits1 = edits1.normalize();
197 | edits2 = edits2.normalize();
198 |
199 | if (edits1.isEmpty) { return edits2; }
200 | if (edits2.isEmpty) { return edits1; }
201 |
202 | const edit1Queue = [...edits1.edits];
203 | const result: SingleOffsetEdit[] = [];
204 |
205 | let edit1ToEdit2 = 0;
206 |
207 | for (const edit2 of edits2.edits) {
208 | // Copy over edit1 unmodified until it touches edit2.
209 | while (true) {
210 | const edit1 = edit1Queue[0]!;
211 | if (!edit1 || edit1.replaceRange.start + edit1ToEdit2 + edit1.newText.length >= edit2.replaceRange.start) {
212 | break;
213 | }
214 | edit1Queue.shift();
215 |
216 | result.push(edit1);
217 | edit1ToEdit2 += edit1.newText.length - edit1.replaceRange.length;
218 | }
219 |
220 | const firstEdit1ToEdit2 = edit1ToEdit2;
221 | let firstIntersecting: SingleOffsetEdit | undefined; // or touching
222 | let lastIntersecting: SingleOffsetEdit | undefined; // or touching
223 |
224 | while (true) {
225 | const edit1 = edit1Queue[0];
226 | if (!edit1 || edit1.replaceRange.start + edit1ToEdit2 > edit2.replaceRange.endExclusive) {
227 | break;
228 | }
229 | // else we intersect, because the new end of edit1 is after or equal to our start
230 |
231 | if (!firstIntersecting) {
232 | firstIntersecting = edit1;
233 | }
234 | lastIntersecting = edit1;
235 | edit1Queue.shift();
236 |
237 | edit1ToEdit2 += edit1.newText.length - edit1.replaceRange.length;
238 | }
239 |
240 | if (!firstIntersecting) {
241 | result.push(new SingleOffsetEdit(edit2.replaceRange.delta(-edit1ToEdit2), edit2.newText));
242 | } else {
243 | let prefix = '';
244 | const prefixLength = edit2.replaceRange.start - (firstIntersecting.replaceRange.start + firstEdit1ToEdit2);
245 | if (prefixLength > 0) {
246 | prefix = firstIntersecting.newText.slice(0, prefixLength);
247 | }
248 | const suffixLength = (lastIntersecting!.replaceRange.endExclusive + edit1ToEdit2) - edit2.replaceRange.endExclusive;
249 | if (suffixLength > 0) {
250 | const e = new SingleOffsetEdit(OffsetRange.ofStartAndLength(lastIntersecting!.replaceRange.endExclusive, 0), lastIntersecting!.newText.slice(-suffixLength));
251 | edit1Queue.unshift(e);
252 | edit1ToEdit2 -= e.newText.length - e.replaceRange.length;
253 | }
254 | const newText = prefix + edit2.newText;
255 |
256 | const newReplaceRange = new OffsetRange(
257 | Math.min(firstIntersecting.replaceRange.start, edit2.replaceRange.start - firstEdit1ToEdit2),
258 | edit2.replaceRange.endExclusive - edit1ToEdit2
259 | );
260 | result.push(new SingleOffsetEdit(newReplaceRange, newText));
261 | }
262 | }
263 |
264 | while (true) {
265 | const item = edit1Queue.shift();
266 | if (!item) { break; }
267 | result.push(item);
268 | }
269 |
270 | return new OffsetEdit(result).normalize();
271 | }
272 |
--------------------------------------------------------------------------------
/language-service-plugin/src/impl/AstMatchers.ts:
--------------------------------------------------------------------------------
1 | import type * as ts from "typescript";
2 | import { OffsetRange } from "../utils/offsetRange";
3 | import { dirname } from "path";
4 | import { ParsedPath } from "./ParsedPath";
5 | import { ParsedJsString } from "./ParsedJsString";
6 |
7 | export class AstMatchers {
8 | constructor(
9 | private readonly _ts: typeof ts,
10 | ) { }
11 |
12 | public findNodeAt(program: ts.Program, fileName: string, position: number): ts.Node | undefined {
13 | const sf = program.getSourceFile(fileName);
14 | if (!sf) { return undefined; }
15 | return this.findSmallestNodeAt(sf, position);
16 | }
17 |
18 | public findFilePathCallExpression(program: ts.Program, fileName: string, position: number): FilePathCallExpression | undefined {
19 | const nodeAtCursor = this.findNodeAt(program, fileName, position);
20 | if (!nodeAtCursor) { return undefined; }
21 | const data = this.findNodeOrAncestor(nodeAtCursor, n => this.parseFilePathCallExpression(program, n));
22 | return data;
23 | }
24 |
25 | public parseFilePathObj(program: ts.Program, node: ts.Node): { obj: ts.ObjectLiteralExpression, filePathInfo: FilePathCallExpression, replaceRange: OffsetRange } | undefined {
26 | // { filePath: fixturesFilePath('foobar/test2.txt' };
27 |
28 | const match = this.matchesObj(node, {
29 | filePath: (n) => this.parseFilePathCallExpression(program, n),
30 | });
31 | if (!match) { return undefined; }
32 |
33 | return {
34 | obj: match.node,
35 | replaceRange: createOffsetRange(match.result.filePath.property),
36 | filePathInfo: match.result.filePath.result,
37 | };
38 | }
39 |
40 | public parseFileNameFileContentObj(program: ts.Program, node: ts.Node): { node: ts.ObjectLiteralExpression, fileName: string, fileContents: string, replaceRange: OffsetRange } | undefined {
41 | // { fileName: 'foobar/test2.txt', fileContents: 'foobar' };
42 |
43 | const parseStringOrStringArray = (node: ts.Node): string | undefined => {
44 | if (this._ts.isStringLiteral(node)) {
45 | return node.text;
46 | }
47 | if (this._ts.isArrayLiteralExpression(node)) {
48 | const result: string[] = [];
49 | for (const entry of node.elements) {
50 | if (this._ts.isStringLiteral(entry)) {
51 | result.push(entry.text);
52 | } else {
53 | return undefined;
54 | }
55 | }
56 | return result.join('');
57 | }
58 | return undefined;
59 | }
60 |
61 |
62 | const match = this.matchesObj(node, {
63 | fileName: (n) => this._ts.isStringLiteral(n) ? n : undefined,
64 | fileContents: parseStringOrStringArray
65 | });
66 |
67 | if (!match) { return undefined; }
68 |
69 | return {
70 | node: match.node,
71 | fileName: match.result.fileName.result.text,
72 | fileContents: match.result.fileContents.result,
73 | replaceRange: createOffsetRange(match.result.fileName.property).join(createOffsetRange(match.result.fileContents.property)),
74 | };
75 | }
76 |
77 | private matchesObj (unknown | undefined)>>(node: ts.Node, parsers: TParsers): {
78 | node: ts.ObjectLiteralExpression, result: { [K in keyof TParsers]:
79 | { property: ts.PropertyAssignment, identifier: ts.Identifier, result: ReturnType extends infer R ? R extends undefined ? never : R : never } }
80 | } | undefined {
81 | if (!this._ts.isObjectLiteralExpression(node)) { return undefined; }
82 |
83 | const result: any = {};
84 | for (const [key, parser] of Object.entries(parsers)) {
85 | const prop = node.properties.find(p => this._ts.isPropertyAssignment(p) && this._ts.isIdentifier(p.name) && p.name.text === key);
86 | if (!prop) { return undefined; }
87 | const prop2 = prop as ts.PropertyAssignment;
88 | const value = parser(prop2.initializer);
89 | if (value === undefined) { return undefined; }
90 | result[key] = { identifier: prop2.name, result: value, property: prop2 };
91 | }
92 | return {
93 | node,
94 | result,
95 | };
96 | }
97 |
98 | public parseFilePathCallExpression(program: ts.Program, node: ts.Node): FilePathCallExpression | undefined {
99 | if (!this._ts.isCallExpression(node)) { return undefined; }
100 | if (!this._ts.isIdentifier(node.expression)) { return undefined; }
101 | if (node.arguments.length !== 1) { return undefined; }
102 | if (!this._ts.isStringLiteral(node.arguments[0])) { return undefined; }
103 |
104 | const identifierText = node.expression.text;
105 | const result = this.parseFilePathFn(program, identifierText, () => {
106 | const checker = program.getTypeChecker();
107 | const fnType = checker.getTypeAtLocation(node.expression);
108 | return fnType;
109 | });
110 |
111 | if (!result) { return undefined; }
112 | return new FilePathCallExpression(node, node.arguments[0] as ts.StringLiteral, result.basePath, result.declaringSourceFile);
113 | }
114 |
115 | public parseFilePathFn(program: ts.Program, fnName: string, getType: () => ts.Type): { fnName: string, basePath: string, declaringSourceFile: ts.SourceFile } | undefined {
116 | const fnType = getType();
117 | const checker = program.getTypeChecker();
118 |
119 | const callSignatures = fnType.getCallSignatures();
120 | if (callSignatures.length === 0) { return undefined; }
121 | const parameters = callSignatures[0].parameters;
122 | if (parameters.length !== 1) { return undefined; }
123 |
124 | const pathSymbol = parameters[0];
125 | const pathType = checker.getTypeOfSymbol(pathSymbol);
126 | if (pathType.aliasSymbol?.name !== 'RelativeFilePath') { return undefined; }
127 | const baseDirType = pathType.aliasTypeArguments?.[0];
128 | if (!baseDirType) { return undefined; }
129 | const baseDir = (baseDirType as any).value as string;
130 |
131 | const fnDeclaration = fnType.symbol.declarations?.[0];
132 | if (!fnDeclaration) { return undefined; }
133 |
134 | const declaringSourceFile = fnDeclaration.getSourceFile();
135 | return {
136 | fnName,
137 | basePath: baseDir,
138 | declaringSourceFile,
139 | };
140 | }
141 |
142 | public findFilePathFns(program: ts.Program, node: ts.Node): { fnName: string, resolvedBasePath: string }[] {
143 | const checker = program.getTypeChecker();
144 | const symbols = checker.getSymbolsInScope(node, this._ts.SymbolFlags.Function | this._ts.SymbolFlags.Alias);
145 |
146 | const filteredSymbols = symbols
147 | .map(s => this.parseFilePathFn(program, s.name, () => checker.getTypeOfSymbol(s)))
148 | .filter(i => !!i);
149 |
150 | return filteredSymbols.map(s => ({
151 | fnName: s.fnName,
152 | resolvedBasePath: s.basePath.replace('$dir', dirname(s.declaringSourceFile.fileName)),
153 | }));
154 | }
155 |
156 | public findNodeOrAncestor(node: ts.Node, predicate: (node: ts.Node) => T | undefined): T | undefined {
157 | while (node) {
158 | const result = predicate(node);
159 | if (result) { return result; }
160 | node = node.parent;
161 | }
162 | return undefined;
163 | }
164 |
165 | public findSmallestNodeAt(
166 | node: ts.Node,
167 | position: number
168 | ): ts.Node | undefined {
169 | if (!(node.getStart() <= position && position <= node.getEnd())) {
170 | return undefined;
171 | }
172 | let result: ts.Node = node;
173 | node.forEachChild(
174 | node => {
175 | const c = this.findSmallestNodeAt(node, position);
176 | if (c) {
177 | result = c;
178 | }
179 | },
180 | arr => {
181 | for (const item of arr) {
182 | const c = this.findSmallestNodeAt(item, position);
183 | if (c) {
184 | result = c;
185 | }
186 | }
187 | }
188 | );
189 |
190 | return result;
191 | }
192 | }
193 |
194 |
195 | export class FilePathCallExpression {
196 | public readonly baseDir = this.baseDirUnresolved.replace('$dir', dirname(this.basePathSourceFileNode.fileName));
197 |
198 | public readonly relativePathParsed = ParsedJsString.parse(this.relativePathNode.getSourceFile().text.substring(this.relativePathNode.getStart(), this.relativePathNode.getEnd()));
199 | public readonly relativePathSegments = ParsedPath.parse(this.relativePathParsed.value);
200 |
201 | public readonly relativePath = this.relativePathSegments.text;
202 |
203 | public readonly relativePathValueRange =
204 | OffsetRange.ofLength(this.relativePathParsed.value.length)
205 | .mapBounds(o => this.relativePathParsed.posInValueToSource(o))
206 | .delta(this.relativePathNode.getStart());
207 |
208 | constructor(
209 | public readonly callExpressionNode: ts.CallExpression,
210 | public readonly relativePathNode: ts.StringLiteral,
211 | public readonly baseDirUnresolved: string,
212 | public readonly basePathSourceFileNode: ts.SourceFile,
213 | ) { }
214 |
215 | getCursorInfo(position: number) {
216 | const curPathSegment = this.relativePathSegments.getLiteralSegmentTouchingPos(this.relativePathParsed.posInSourceToValue(position - this.relativePathNode.getStart()))!;
217 | const curPathSegmentIdx = this.relativePathSegments.segments.indexOf(curPathSegment);
218 | const relativePathBeforeCursorSegment = this.relativePathSegments.getSubPath(curPathSegmentIdx);
219 |
220 | return {
221 | cursorSegmentRange: new OffsetRange(
222 | this.relativePathParsed.posInValueToSource(curPathSegment.range.start),
223 | this.relativePathParsed.posInValueToSource(curPathSegment.range.endExclusive)
224 | ).delta(this.relativePathNode.getStart()),
225 | relativePathBeforeCursorSegment,
226 | };
227 | }
228 | }
229 |
230 | function createOffsetRange(node: ts.Node): OffsetRange {
231 | return new OffsetRange(node.getStart(), node.getEnd());
232 | }
233 |
--------------------------------------------------------------------------------
/language-service-plugin/test/tests.test.ts:
--------------------------------------------------------------------------------
1 | import { describe, expect, test } from 'vitest';
2 | import { withLanguageService } from "./utils";
3 | import { ParsedJsString } from "../src/impl/ParsedJsString";
4 | import { ParsedPath } from "../src/impl/ParsedPath";
5 | import { OffsetEdit, SingleOffsetEdit } from "../src/utils/edit";
6 | import { OffsetRange } from "../src/utils/offsetRange";
7 | import { createServiceImpl } from "../src/impl/createServiceImpl";
8 |
9 | describe("Service", () => {
10 | test('Basic', () => withLanguageService(
11 | `
12 | type RelativeFilePath = string & { baseDir?: TBaseDir };
13 | function fixturesFilePath(path: RelativeFilePath<'$dir/target'>) { }
14 |
15 | const data1 = {
16 | fileP|ath: fixturesFilePath('foo.txt'),
17 | };
18 |
19 | const data2 = {
20 | fileName: "foo.txt",
21 | fileC|ontents: "bar",
22 | };
23 |
24 | const data3 = {
25 | fileName: "foo.txt",
26 | fileC|ontents: [ "line1\\n", "line2\\n", "line3" ],
27 | };
28 | `,
29 | (ts, languageService, sf, m) => {
30 | const impl = createServiceImpl(ts, languageService);
31 | expect(impl.findFilePathObjAt({ fileName: sf.fileName, position: m[0] })).toMatchInlineSnapshot(`
32 | {
33 | "baseDir": "root/target",
34 | "isMultiLine": true,
35 | "relativePath": "foo.txt",
36 | "replaceRange": [
37 | 182,
38 | 219,
39 | ],
40 | }
41 | `);
42 | expect(impl.findFileNameFileContentObjAt({ fileName: sf.fileName, position: m[1] })).toMatchInlineSnapshot(`
43 | {
44 | "fileContents": "bar",
45 | "fileName": "foo.txt",
46 | "isMultiLine": true,
47 | "relativeFilePathBaseDir": "root/target",
48 | "relativeFilePathFnName": "fixturesFilePath",
49 | "replaceRange": [
50 | 251,
51 | 295,
52 | ],
53 | }
54 | `);
55 | expect(impl.findFileNameFileContentObjAt({ fileName: sf.fileName, position: m[2] })).toMatchInlineSnapshot(`
56 | {
57 | "fileContents": "line1
58 | line2
59 | line3",
60 | "fileName": "foo.txt",
61 | "isMultiLine": true,
62 | "relativeFilePathBaseDir": "root/target",
63 | "relativeFilePathFnName": "fixturesFilePath",
64 | "replaceRange": [
65 | 327,
66 | 399,
67 | ],
68 | }
69 | `);
70 | }
71 | ));
72 |
73 | test('Invalid Type Name', () => withLanguageService(
74 | `
75 | type RelativeFilePathX = string & { baseDir?: TBaseDir };
76 | function fixturesFilePath(path: RelativeFilePathX<'$dir/target'>) { }
77 |
78 | const data1 = {
79 | filePath: fixturesFilePath('f|oo.txt'),
80 | };
81 | `,
82 | (ts, languageService, sf, m) => {
83 | const impl = createServiceImpl(ts, languageService);
84 | expect(impl.findFilePathObjAt({ fileName: sf.fileName, position: m[0] })).toMatchInlineSnapshot(`
85 | undefined
86 | `);
87 | expect(impl.findFileNameFileContentObjAt({ fileName: sf.fileName, position: m[1] })).toMatchInlineSnapshot(`undefined`);
88 | }
89 | ));
90 |
91 | test('Supports Overloading', () => withLanguageService(
92 | `
93 | type RelativeFilePath = string & { baseDir?: T };
94 |
95 | function resolveFilePath(path: RelativeFilePath<'$dir/target'>);
96 | function resolveFilePath(path: {}, foo: string);
97 | function resolveFilePath(...args: any[]) { }
98 |
99 | export const data1 = {
100 | filePath: resolveFilePath("samp|leDir/test1.txt")
101 | };
102 | `,
103 | (ts, languageService, sf, m) => {
104 | const impl = createServiceImpl(ts, languageService);
105 | expect(impl.findFilePathObjAt({ fileName: sf.fileName, position: m[0] })).toMatchInlineSnapshot(`
106 | {
107 | "baseDir": "root/target",
108 | "isMultiLine": true,
109 | "relativePath": "sampleDir/test1.txt",
110 | "replaceRange": [
111 | 272,
112 | 320,
113 | ],
114 | }
115 | `);
116 | }
117 | ));
118 |
119 | test('Supports Other Names', () => withLanguageService(
120 | `
121 | type RelativeFilePath = string & { baseDir?: T };
122 |
123 | function fromFixture(path: RelativeFilePath<'$dir/target'>);
124 | function fromFixture(path: {}, foo: string);
125 | function fromFixture(...args: any[]) { }
126 |
127 | export const data1 = {
128 | filePath: fromFixture("samp|leDir/test1.txt")
129 | };
130 | `,
131 | (ts, languageService, sf, m) => {
132 | const impl = createServiceImpl(ts, languageService);
133 | expect(impl.findFilePathObjAt({ fileName: sf.fileName, position: m[0] })).toMatchInlineSnapshot(`
134 | {
135 | "baseDir": "root/target",
136 | "isMultiLine": true,
137 | "relativePath": "sampleDir/test1.txt",
138 | "replaceRange": [
139 | 260,
140 | 304,
141 | ],
142 | }
143 | `);
144 | }
145 | ));
146 |
147 | test('Multi File 1', () => withLanguageService(
148 | {
149 | "/root/main.ts": `
150 | import { fromFixture } from "./lib";
151 |
152 | export const data1 = {
153 | filePath: fromFixture("samp|leDir/test1.txt")
154 | };
155 | `,
156 | "/root/lib.ts": `
157 | type RelativeFilePath = string & { baseDir?: T };
158 | export function fromFixture(path: RelativeFilePath<'$dir/target'>) { return path; }
159 | `
160 | },
161 |
162 | (ts, languageService, sf, m) => {
163 | const impl = createServiceImpl(ts, languageService);
164 | expect(languageService.getProgram()!.getSemanticDiagnostics()).toMatchInlineSnapshot(`[]`);
165 |
166 | expect(impl.findFilePathObjAt({ fileName: sf.fileName, position: m[0] })).toMatchInlineSnapshot(`
167 | {
168 | "baseDir": "/root/target",
169 | "isMultiLine": true,
170 | "relativePath": "sampleDir/test1.txt",
171 | "replaceRange": [
172 | 75,
173 | 119,
174 | ],
175 | }
176 | `);
177 | }
178 | ));
179 |
180 | test('Multi File 2', () => withLanguageService(
181 | {
182 | "/main.ts": `
183 | import { fromFixture } from "./lib";
184 |
185 | export const data1 = {
186 | fileN|ame: 'hello world',
187 | fileContents: 'foo bar',
188 | };
189 | `,
190 | "/lib.ts": `
191 | type RelativeFilePath = string & { baseDir?: T };
192 | export function fromFixture(path: RelativeFilePath<'$dir/target'>) { return path; }
193 | `
194 | },
195 |
196 | (ts, languageService, sf, m) => {
197 | const impl = createServiceImpl(ts, languageService);
198 | expect(languageService.getProgram()!.getSemanticDiagnostics()).toMatchInlineSnapshot(`[]`);
199 |
200 | expect(impl.findFileNameFileContentObjAt({ fileName: sf.fileName, position: m[0] })).toMatchInlineSnapshot(`
201 | {
202 | "fileContents": "foo bar",
203 | "fileName": "hello world",
204 | "isMultiLine": true,
205 | "relativeFilePathBaseDir": "//target",
206 | "relativeFilePathFnName": "fromFixture",
207 | "replaceRange": [
208 | 75,
209 | 128,
210 | ],
211 | }
212 | `);
213 | }
214 | ));
215 | });
216 |
217 | describe("ParsedJsString", () => {
218 | test("value", () => {
219 | const str = ParsedJsString.parse(`"te\tst"`);
220 | expect(str.value).toBe("te\tst");
221 | });
222 |
223 | describe("srcToVal", () => {
224 | test("1", () => {
225 | const str = ParsedJsString.parse(`"te\\\\st"`);
226 | const segments = [] as string[];
227 | for (let srcIdx = 0; srcIdx <= str.source.length; srcIdx++) {
228 | const valueIdx = str.posInSourceToValue(srcIdx);
229 | const editSrc = OffsetEdit.single(OffsetRange.emptyAt(srcIdx), "|");
230 | const editVal = OffsetEdit.single(OffsetRange.emptyAt(valueIdx), "|");
231 | const val = `${editSrc.apply(str.source)} -> ${editVal.apply(str.value)}`
232 | .replace(/"/g, "'")
233 | .replace(/\\/g, "/");
234 |
235 | segments.push(val);
236 | }
237 |
238 | expect(segments).toMatchInlineSnapshot(`
239 | [
240 | "|'te//st' -> |te/st",
241 | "'|te//st' -> |te/st",
242 | "'t|e//st' -> t|e/st",
243 | "'te|//st' -> te|/st",
244 | "'te/|/st' -> te/|st",
245 | "'te//|st' -> te/|st",
246 | "'te//s|t' -> te/s|t",
247 | "'te//st|' -> te/st|",
248 | "'te//st'| -> te/st|",
249 | ]
250 | `);
251 | });
252 | });
253 |
254 | describe("valToSrc", () => {
255 | test("1", () => {
256 | const str = ParsedJsString.parse(`"te\\\\st"`);
257 | const segments = [] as string[];
258 | for (let valueIdx = 0; valueIdx <= str.value.length; valueIdx++) {
259 | const srcIdx = str.posInValueToSource(valueIdx);
260 | const editSrc = OffsetEdit.single(OffsetRange.emptyAt(srcIdx), "|");
261 | const editVal = OffsetEdit.single(OffsetRange.emptyAt(valueIdx), "|");
262 | const val = `${editVal.apply(str.value)} -> ${editSrc.apply(str.source)}`
263 | .replace(/"/g, "'")
264 | .replace(/\\/g, "/");
265 |
266 | segments.push(val);
267 | }
268 |
269 | expect(segments).toMatchInlineSnapshot(`
270 | [
271 | "|te/st -> '|te//st'",
272 | "t|e/st -> 't|e//st'",
273 | "te|/st -> 'te|//st'",
274 | "te/|st -> 'te//|st'",
275 | "te/s|t -> 'te//s|t'",
276 | "te/st| -> 'te//st|'",
277 | ]
278 | `);
279 | });
280 | });
281 | });
282 |
283 | describe("ParsedPath", () => {
284 | describe("getLiteralSegmentTouchingPos", () => {
285 | function getSegments(p: ParsedPath) {
286 | const segments = [] as string[];
287 | for (let i = 0; i <= p.text.length; i++) {
288 | const r = p.getLiteralSegmentTouchingPos(i)!;
289 |
290 | const edits = new OffsetEdit([
291 | new SingleOffsetEdit(OffsetRange.emptyAt(r.range.start), "["),
292 | new SingleOffsetEdit(OffsetRange.emptyAt(i), "|"),
293 | new SingleOffsetEdit(OffsetRange.emptyAt(r.range.endExclusive), "]"),
294 | ]);
295 |
296 | const part = edits.apply(p.text);
297 | segments.push(`${part}`);
298 | }
299 | return segments;
300 | }
301 |
302 | test("1", () => {
303 | const segments = getSegments(ParsedPath.parse("foo/a/baz.txt"));
304 | expect(segments).toMatchInlineSnapshot(`
305 | [
306 | "[|foo]/a/baz.txt",
307 | "[f|oo]/a/baz.txt",
308 | "[fo|o]/a/baz.txt",
309 | "[foo|]/a/baz.txt",
310 | "foo/[|a]/baz.txt",
311 | "foo/[a|]/baz.txt",
312 | "foo/a/[|baz.txt]",
313 | "foo/a/[b|az.txt]",
314 | "foo/a/[ba|z.txt]",
315 | "foo/a/[baz|.txt]",
316 | "foo/a/[baz.|txt]",
317 | "foo/a/[baz.t|xt]",
318 | "foo/a/[baz.tx|t]",
319 | "foo/a/[baz.txt|]",
320 | ]
321 | `);
322 | });
323 |
324 | test("2", () => {
325 | const segments = getSegments(ParsedPath.parse(""));
326 | expect(segments).toMatchInlineSnapshot(`
327 | [
328 | "[|]",
329 | ]
330 | `);
331 | });
332 |
333 | });
334 |
335 | test("subPath", () => {
336 | const p = ParsedPath.parse("foo/a/baz.txt");
337 |
338 | const subPaths = [] as string[];
339 | for (let i = 0; i <= p.segments.length; i++) {
340 | const subPath = p.getSubPath(i);
341 | subPaths.push(subPath);
342 | }
343 |
344 | expect(subPaths).toMatchInlineSnapshot(`
345 | [
346 | "",
347 | "foo",
348 | "foo/",
349 | "foo/a",
350 | "foo/a/",
351 | "foo/a/baz.txt",
352 | ]
353 | `);
354 | });
355 | });
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@azure/abort-controller@^2.0.0":
6 | version "2.1.2"
7 | resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-2.1.2.tgz#42fe0ccab23841d9905812c58f1082d27784566d"
8 | integrity sha512-nBrLsEWm4J2u5LpAPjxADTlq3trDgVZZXHNKabeXZtpq3d3AbN/KGO82R87rdDz5/lYB024rtEf10/q0urNgsA==
9 | dependencies:
10 | tslib "^2.6.2"
11 |
12 | "@azure/core-auth@^1.4.0", "@azure/core-auth@^1.8.0", "@azure/core-auth@^1.9.0":
13 | version "1.9.0"
14 | resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.9.0.tgz#ac725b03fabe3c892371065ee9e2041bee0fd1ac"
15 | integrity sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw==
16 | dependencies:
17 | "@azure/abort-controller" "^2.0.0"
18 | "@azure/core-util" "^1.11.0"
19 | tslib "^2.6.2"
20 |
21 | "@azure/core-client@^1.9.2":
22 | version "1.9.2"
23 | resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.9.2.tgz#6fc69cee2816883ab6c5cdd653ee4f2ff9774f74"
24 | integrity sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w==
25 | dependencies:
26 | "@azure/abort-controller" "^2.0.0"
27 | "@azure/core-auth" "^1.4.0"
28 | "@azure/core-rest-pipeline" "^1.9.1"
29 | "@azure/core-tracing" "^1.0.0"
30 | "@azure/core-util" "^1.6.1"
31 | "@azure/logger" "^1.0.0"
32 | tslib "^2.6.2"
33 |
34 | "@azure/core-rest-pipeline@^1.17.0", "@azure/core-rest-pipeline@^1.9.1":
35 | version "1.19.0"
36 | resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.19.0.tgz#4cc60d3f2ee68cf0ef379851b4ed175f7932c8c5"
37 | integrity sha512-bM3308LRyg5g7r3Twprtqww0R/r7+GyVxj4BafcmVPo4WQoGt5JXuaqxHEFjw2o3rvFZcUPiqJMg6WuvEEeVUA==
38 | dependencies:
39 | "@azure/abort-controller" "^2.0.0"
40 | "@azure/core-auth" "^1.8.0"
41 | "@azure/core-tracing" "^1.0.1"
42 | "@azure/core-util" "^1.11.0"
43 | "@azure/logger" "^1.0.0"
44 | http-proxy-agent "^7.0.0"
45 | https-proxy-agent "^7.0.0"
46 | tslib "^2.6.2"
47 |
48 | "@azure/core-tracing@^1.0.0", "@azure/core-tracing@^1.0.1":
49 | version "1.2.0"
50 | resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.2.0.tgz#7be5d53c3522d639cf19042cbcdb19f71bc35ab2"
51 | integrity sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg==
52 | dependencies:
53 | tslib "^2.6.2"
54 |
55 | "@azure/core-util@^1.11.0", "@azure/core-util@^1.6.1":
56 | version "1.11.0"
57 | resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.11.0.tgz#f530fc67e738aea872fbdd1cc8416e70219fada7"
58 | integrity sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g==
59 | dependencies:
60 | "@azure/abort-controller" "^2.0.0"
61 | tslib "^2.6.2"
62 |
63 | "@azure/identity@^4.1.0":
64 | version "4.7.0"
65 | resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-4.7.0.tgz#b3bc57aec40432899108fd41177e8168e7bb6223"
66 | integrity sha512-6z/S2KorkbKaZ0DgZFVRdu7RCuATmMSTjKpuhj7YpjxkJ0vnJ7kTM3cpNgzFgk9OPYfZ31wrBEtC/iwAS4jQDA==
67 | dependencies:
68 | "@azure/abort-controller" "^2.0.0"
69 | "@azure/core-auth" "^1.9.0"
70 | "@azure/core-client" "^1.9.2"
71 | "@azure/core-rest-pipeline" "^1.17.0"
72 | "@azure/core-tracing" "^1.0.0"
73 | "@azure/core-util" "^1.11.0"
74 | "@azure/logger" "^1.0.0"
75 | "@azure/msal-browser" "^4.2.0"
76 | "@azure/msal-node" "^3.2.1"
77 | events "^3.0.0"
78 | jws "^4.0.0"
79 | open "^10.1.0"
80 | stoppable "^1.1.0"
81 | tslib "^2.2.0"
82 |
83 | "@azure/logger@^1.0.0":
84 | version "1.1.4"
85 | resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.1.4.tgz#223cbf2b424dfa66478ce9a4f575f59c6f379768"
86 | integrity sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ==
87 | dependencies:
88 | tslib "^2.6.2"
89 |
90 | "@azure/msal-browser@^4.2.0":
91 | version "4.3.0"
92 | resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-4.3.0.tgz#982156c9e923d82b1eab508edbd8e146f2602c9f"
93 | integrity sha512-A8NjaeaS1cmhzhXQs4Y2jtHYnq9IeC3i7iKaRQgfgWAvFhl1UAf9NqcDrsqNcafVpcwLWnObrtOs7mIyRjhj2A==
94 | dependencies:
95 | "@azure/msal-common" "15.2.0"
96 |
97 | "@azure/msal-common@15.2.0":
98 | version "15.2.0"
99 | resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-15.2.0.tgz#f4e38ba85c0a32208b7046e011c21ff627b6755c"
100 | integrity sha512-HiYfGAKthisUYqHG1nImCf/uzcyS31wng3o+CycWLIM9chnYJ9Lk6jZ30Y6YiYYpTQ9+z/FGUpiKKekd3Arc0A==
101 |
102 | "@azure/msal-node@^3.2.1":
103 | version "3.2.3"
104 | resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-3.2.3.tgz#c742d66d3a9183c1dfa4160632d8891c69af7bcc"
105 | integrity sha512-0eaPqBIWEAizeYiXdeHb09Iq0tvHJ17ztvNEaLdr/KcJJhJxbpkkEQf09DB+vKlFE0tzYi7j4rYLTXtES/InEQ==
106 | dependencies:
107 | "@azure/msal-common" "15.2.0"
108 | jsonwebtoken "^9.0.0"
109 | uuid "^8.3.0"
110 |
111 | "@esbuild/aix-ppc64@0.21.5":
112 | version "0.21.5"
113 | resolved "https://registry.yarnpkg.com/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz#c7184a326533fcdf1b8ee0733e21c713b975575f"
114 | integrity sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==
115 |
116 | "@esbuild/android-arm64@0.21.5":
117 | version "0.21.5"
118 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz#09d9b4357780da9ea3a7dfb833a1f1ff439b4052"
119 | integrity sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==
120 |
121 | "@esbuild/android-arm@0.21.5":
122 | version "0.21.5"
123 | resolved "https://registry.yarnpkg.com/@esbuild/android-arm/-/android-arm-0.21.5.tgz#9b04384fb771926dfa6d7ad04324ecb2ab9b2e28"
124 | integrity sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==
125 |
126 | "@esbuild/android-x64@0.21.5":
127 | version "0.21.5"
128 | resolved "https://registry.yarnpkg.com/@esbuild/android-x64/-/android-x64-0.21.5.tgz#29918ec2db754cedcb6c1b04de8cd6547af6461e"
129 | integrity sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==
130 |
131 | "@esbuild/darwin-arm64@0.21.5":
132 | version "0.21.5"
133 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz#e495b539660e51690f3928af50a76fb0a6ccff2a"
134 | integrity sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==
135 |
136 | "@esbuild/darwin-x64@0.21.5":
137 | version "0.21.5"
138 | resolved "https://registry.yarnpkg.com/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz#c13838fa57372839abdddc91d71542ceea2e1e22"
139 | integrity sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==
140 |
141 | "@esbuild/freebsd-arm64@0.21.5":
142 | version "0.21.5"
143 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz#646b989aa20bf89fd071dd5dbfad69a3542e550e"
144 | integrity sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==
145 |
146 | "@esbuild/freebsd-x64@0.21.5":
147 | version "0.21.5"
148 | resolved "https://registry.yarnpkg.com/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz#aa615cfc80af954d3458906e38ca22c18cf5c261"
149 | integrity sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==
150 |
151 | "@esbuild/linux-arm64@0.21.5":
152 | version "0.21.5"
153 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz#70ac6fa14f5cb7e1f7f887bcffb680ad09922b5b"
154 | integrity sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==
155 |
156 | "@esbuild/linux-arm@0.21.5":
157 | version "0.21.5"
158 | resolved "https://registry.yarnpkg.com/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz#fc6fd11a8aca56c1f6f3894f2bea0479f8f626b9"
159 | integrity sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==
160 |
161 | "@esbuild/linux-ia32@0.21.5":
162 | version "0.21.5"
163 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz#3271f53b3f93e3d093d518d1649d6d68d346ede2"
164 | integrity sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==
165 |
166 | "@esbuild/linux-loong64@0.21.5":
167 | version "0.21.5"
168 | resolved "https://registry.yarnpkg.com/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz#ed62e04238c57026aea831c5a130b73c0f9f26df"
169 | integrity sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==
170 |
171 | "@esbuild/linux-mips64el@0.21.5":
172 | version "0.21.5"
173 | resolved "https://registry.yarnpkg.com/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz#e79b8eb48bf3b106fadec1ac8240fb97b4e64cbe"
174 | integrity sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==
175 |
176 | "@esbuild/linux-ppc64@0.21.5":
177 | version "0.21.5"
178 | resolved "https://registry.yarnpkg.com/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz#5f2203860a143b9919d383ef7573521fb154c3e4"
179 | integrity sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==
180 |
181 | "@esbuild/linux-riscv64@0.21.5":
182 | version "0.21.5"
183 | resolved "https://registry.yarnpkg.com/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz#07bcafd99322d5af62f618cb9e6a9b7f4bb825dc"
184 | integrity sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==
185 |
186 | "@esbuild/linux-s390x@0.21.5":
187 | version "0.21.5"
188 | resolved "https://registry.yarnpkg.com/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz#b7ccf686751d6a3e44b8627ababc8be3ef62d8de"
189 | integrity sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==
190 |
191 | "@esbuild/linux-x64@0.21.5":
192 | version "0.21.5"
193 | resolved "https://registry.yarnpkg.com/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz#6d8f0c768e070e64309af8004bb94e68ab2bb3b0"
194 | integrity sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==
195 |
196 | "@esbuild/netbsd-x64@0.21.5":
197 | version "0.21.5"
198 | resolved "https://registry.yarnpkg.com/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz#bbe430f60d378ecb88decb219c602667387a6047"
199 | integrity sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==
200 |
201 | "@esbuild/openbsd-x64@0.21.5":
202 | version "0.21.5"
203 | resolved "https://registry.yarnpkg.com/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz#99d1cf2937279560d2104821f5ccce220cb2af70"
204 | integrity sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==
205 |
206 | "@esbuild/sunos-x64@0.21.5":
207 | version "0.21.5"
208 | resolved "https://registry.yarnpkg.com/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz#08741512c10d529566baba837b4fe052c8f3487b"
209 | integrity sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==
210 |
211 | "@esbuild/win32-arm64@0.21.5":
212 | version "0.21.5"
213 | resolved "https://registry.yarnpkg.com/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz#675b7385398411240735016144ab2e99a60fc75d"
214 | integrity sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==
215 |
216 | "@esbuild/win32-ia32@0.21.5":
217 | version "0.21.5"
218 | resolved "https://registry.yarnpkg.com/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz#1bfc3ce98aa6ca9a0969e4d2af72144c59c1193b"
219 | integrity sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==
220 |
221 | "@esbuild/win32-x64@0.21.5":
222 | version "0.21.5"
223 | resolved "https://registry.yarnpkg.com/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz#acad351d582d157bb145535db2a6ff53dd514b5c"
224 | integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==
225 |
226 | "@isaacs/cliui@^8.0.2":
227 | version "8.0.2"
228 | resolved "https://registry.yarnpkg.com/@isaacs/cliui/-/cliui-8.0.2.tgz#b37667b7bc181c168782259bab42474fbf52b550"
229 | integrity sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==
230 | dependencies:
231 | string-width "^5.1.2"
232 | string-width-cjs "npm:string-width@^4.2.0"
233 | strip-ansi "^7.0.1"
234 | strip-ansi-cjs "npm:strip-ansi@^6.0.1"
235 | wrap-ansi "^8.1.0"
236 | wrap-ansi-cjs "npm:wrap-ansi@^7.0.0"
237 |
238 | "@jest/schemas@^29.6.3":
239 | version "29.6.3"
240 | resolved "https://registry.yarnpkg.com/@jest/schemas/-/schemas-29.6.3.tgz#430b5ce8a4e0044a7e3819663305a7b3091c8e03"
241 | integrity sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==
242 | dependencies:
243 | "@sinclair/typebox" "^0.27.8"
244 |
245 | "@jridgewell/sourcemap-codec@^1.5.0":
246 | version "1.5.0"
247 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a"
248 | integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==
249 |
250 | "@nodelib/fs.scandir@2.1.5":
251 | version "2.1.5"
252 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
253 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
254 | dependencies:
255 | "@nodelib/fs.stat" "2.0.5"
256 | run-parallel "^1.1.9"
257 |
258 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
259 | version "2.0.5"
260 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
261 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
262 |
263 | "@nodelib/fs.walk@^1.2.3":
264 | version "1.2.8"
265 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
266 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
267 | dependencies:
268 | "@nodelib/fs.scandir" "2.1.5"
269 | fastq "^1.6.0"
270 |
271 | "@rollup/plugin-typescript@11.1.6":
272 | version "11.1.6"
273 | resolved "https://registry.yarnpkg.com/@rollup/plugin-typescript/-/plugin-typescript-11.1.6.tgz#724237d5ec12609ec01429f619d2a3e7d4d1b22b"
274 | integrity sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==
275 | dependencies:
276 | "@rollup/pluginutils" "^5.1.0"
277 | resolve "^1.22.1"
278 |
279 | "@rollup/pluginutils@^5.1.0":
280 | version "5.1.4"
281 | resolved "https://registry.yarnpkg.com/@rollup/pluginutils/-/pluginutils-5.1.4.tgz#bb94f1f9eaaac944da237767cdfee6c5b2262d4a"
282 | integrity sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==
283 | dependencies:
284 | "@types/estree" "^1.0.0"
285 | estree-walker "^2.0.2"
286 | picomatch "^4.0.2"
287 |
288 | "@rollup/rollup-android-arm-eabi@4.22.4":
289 | version "4.22.4"
290 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz#8b613b9725e8f9479d142970b106b6ae878610d5"
291 | integrity sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==
292 |
293 | "@rollup/rollup-android-arm-eabi@4.34.8":
294 | version "4.34.8"
295 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.34.8.tgz#731df27dfdb77189547bcef96ada7bf166bbb2fb"
296 | integrity sha512-q217OSE8DTp8AFHuNHXo0Y86e1wtlfVrXiAlwkIvGRQv9zbc6mE3sjIVfwI8sYUyNxwOg0j/Vm1RKM04JcWLJw==
297 |
298 | "@rollup/rollup-android-arm64@4.22.4":
299 | version "4.22.4"
300 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz#654ca1049189132ff602bfcf8df14c18da1f15fb"
301 | integrity sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==
302 |
303 | "@rollup/rollup-android-arm64@4.34.8":
304 | version "4.34.8"
305 | resolved "https://registry.yarnpkg.com/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.34.8.tgz#4bea6db78e1f6927405df7fe0faf2f5095e01343"
306 | integrity sha512-Gigjz7mNWaOL9wCggvoK3jEIUUbGul656opstjaUSGC3eT0BM7PofdAJaBfPFWWkXNVAXbaQtC99OCg4sJv70Q==
307 |
308 | "@rollup/rollup-darwin-arm64@4.22.4":
309 | version "4.22.4"
310 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz#6d241d099d1518ef0c2205d96b3fa52e0fe1954b"
311 | integrity sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==
312 |
313 | "@rollup/rollup-darwin-arm64@4.34.8":
314 | version "4.34.8"
315 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.34.8.tgz#a7aab77d44be3c44a20f946e10160f84e5450e7f"
316 | integrity sha512-02rVdZ5tgdUNRxIUrFdcMBZQoaPMrxtwSb+/hOfBdqkatYHR3lZ2A2EGyHq2sGOd0Owk80oV3snlDASC24He3Q==
317 |
318 | "@rollup/rollup-darwin-x64@4.22.4":
319 | version "4.22.4"
320 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz#42bd19d292a57ee11734c980c4650de26b457791"
321 | integrity sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==
322 |
323 | "@rollup/rollup-darwin-x64@4.34.8":
324 | version "4.34.8"
325 | resolved "https://registry.yarnpkg.com/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.34.8.tgz#c572c024b57ee8ddd1b0851703ace9eb6cc0dd82"
326 | integrity sha512-qIP/elwR/tq/dYRx3lgwK31jkZvMiD6qUtOycLhTzCvrjbZ3LjQnEM9rNhSGpbLXVJYQ3rq39A6Re0h9tU2ynw==
327 |
328 | "@rollup/rollup-freebsd-arm64@4.34.8":
329 | version "4.34.8"
330 | resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.34.8.tgz#cf74f8113b5a83098a5c026c165742277cbfb88b"
331 | integrity sha512-IQNVXL9iY6NniYbTaOKdrlVP3XIqazBgJOVkddzJlqnCpRi/yAeSOa8PLcECFSQochzqApIOE1GHNu3pCz+BDA==
332 |
333 | "@rollup/rollup-freebsd-x64@4.34.8":
334 | version "4.34.8"
335 | resolved "https://registry.yarnpkg.com/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.34.8.tgz#39561f3a2f201a4ad6a01425b1ff5928154ecd7c"
336 | integrity sha512-TYXcHghgnCqYFiE3FT5QwXtOZqDj5GmaFNTNt3jNC+vh22dc/ukG2cG+pi75QO4kACohZzidsq7yKTKwq/Jq7Q==
337 |
338 | "@rollup/rollup-linux-arm-gnueabihf@4.22.4":
339 | version "4.22.4"
340 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz#f23555ee3d8fe941c5c5fd458cd22b65eb1c2232"
341 | integrity sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==
342 |
343 | "@rollup/rollup-linux-arm-gnueabihf@4.34.8":
344 | version "4.34.8"
345 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.34.8.tgz#980d6061e373bfdaeb67925c46d2f8f9b3de537f"
346 | integrity sha512-A4iphFGNkWRd+5m3VIGuqHnG3MVnqKe7Al57u9mwgbyZ2/xF9Jio72MaY7xxh+Y87VAHmGQr73qoKL9HPbXj1g==
347 |
348 | "@rollup/rollup-linux-arm-musleabihf@4.22.4":
349 | version "4.22.4"
350 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz#f3bbd1ae2420f5539d40ac1fde2b38da67779baa"
351 | integrity sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==
352 |
353 | "@rollup/rollup-linux-arm-musleabihf@4.34.8":
354 | version "4.34.8"
355 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.34.8.tgz#f91a90f30dc00d5a64ac2d9bbedc829cd3cfaa78"
356 | integrity sha512-S0lqKLfTm5u+QTxlFiAnb2J/2dgQqRy/XvziPtDd1rKZFXHTyYLoVL58M/XFwDI01AQCDIevGLbQrMAtdyanpA==
357 |
358 | "@rollup/rollup-linux-arm64-gnu@4.22.4":
359 | version "4.22.4"
360 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz#7abe900120113e08a1f90afb84c7c28774054d15"
361 | integrity sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==
362 |
363 | "@rollup/rollup-linux-arm64-gnu@4.34.8":
364 | version "4.34.8"
365 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.34.8.tgz#fac700fa5c38bc13a0d5d34463133093da4c92a0"
366 | integrity sha512-jpz9YOuPiSkL4G4pqKrus0pn9aYwpImGkosRKwNi+sJSkz+WU3anZe6hi73StLOQdfXYXC7hUfsQlTnjMd3s1A==
367 |
368 | "@rollup/rollup-linux-arm64-musl@4.22.4":
369 | version "4.22.4"
370 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz#9e655285c8175cd44f57d6a1e8e5dedfbba1d820"
371 | integrity sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==
372 |
373 | "@rollup/rollup-linux-arm64-musl@4.34.8":
374 | version "4.34.8"
375 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.34.8.tgz#f50ecccf8c78841ff6df1706bc4782d7f62bf9c3"
376 | integrity sha512-KdSfaROOUJXgTVxJNAZ3KwkRc5nggDk+06P6lgi1HLv1hskgvxHUKZ4xtwHkVYJ1Rep4GNo+uEfycCRRxht7+Q==
377 |
378 | "@rollup/rollup-linux-loongarch64-gnu@4.34.8":
379 | version "4.34.8"
380 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.34.8.tgz#5869dc0b28242da6553e2b52af41374f4038cd6e"
381 | integrity sha512-NyF4gcxwkMFRjgXBM6g2lkT58OWztZvw5KkV2K0qqSnUEqCVcqdh2jN4gQrTn/YUpAcNKyFHfoOZEer9nwo6uQ==
382 |
383 | "@rollup/rollup-linux-powerpc64le-gnu@4.22.4":
384 | version "4.22.4"
385 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz#9a79ae6c9e9d8fe83d49e2712ecf4302db5bef5e"
386 | integrity sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==
387 |
388 | "@rollup/rollup-linux-powerpc64le-gnu@4.34.8":
389 | version "4.34.8"
390 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.34.8.tgz#5cdd9f851ce1bea33d6844a69f9574de335f20b1"
391 | integrity sha512-LMJc999GkhGvktHU85zNTDImZVUCJ1z/MbAJTnviiWmmjyckP5aQsHtcujMjpNdMZPT2rQEDBlJfubhs3jsMfw==
392 |
393 | "@rollup/rollup-linux-riscv64-gnu@4.22.4":
394 | version "4.22.4"
395 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz#67ac70eca4ace8e2942fabca95164e8874ab8128"
396 | integrity sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==
397 |
398 | "@rollup/rollup-linux-riscv64-gnu@4.34.8":
399 | version "4.34.8"
400 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.34.8.tgz#ef5dc37f4388f5253f0def43e1440ec012af204d"
401 | integrity sha512-xAQCAHPj8nJq1PI3z8CIZzXuXCstquz7cIOL73HHdXiRcKk8Ywwqtx2wrIy23EcTn4aZ2fLJNBB8d0tQENPCmw==
402 |
403 | "@rollup/rollup-linux-s390x-gnu@4.22.4":
404 | version "4.22.4"
405 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz#9f883a7440f51a22ed7f99e1d070bd84ea5005fc"
406 | integrity sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==
407 |
408 | "@rollup/rollup-linux-s390x-gnu@4.34.8":
409 | version "4.34.8"
410 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.34.8.tgz#7dbc3ccbcbcfb3e65be74538dfb6e8dd16178fde"
411 | integrity sha512-DdePVk1NDEuc3fOe3dPPTb+rjMtuFw89gw6gVWxQFAuEqqSdDKnrwzZHrUYdac7A7dXl9Q2Vflxpme15gUWQFA==
412 |
413 | "@rollup/rollup-linux-x64-gnu@4.22.4":
414 | version "4.22.4"
415 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz#70116ae6c577fe367f58559e2cffb5641a1dd9d0"
416 | integrity sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==
417 |
418 | "@rollup/rollup-linux-x64-gnu@4.34.8":
419 | version "4.34.8"
420 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.34.8.tgz#5783fc0adcab7dc069692056e8ca8d83709855ce"
421 | integrity sha512-8y7ED8gjxITUltTUEJLQdgpbPh1sUQ0kMTmufRF/Ns5tI9TNMNlhWtmPKKHCU0SilX+3MJkZ0zERYYGIVBYHIA==
422 |
423 | "@rollup/rollup-linux-x64-musl@4.22.4":
424 | version "4.22.4"
425 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz#f473f88219feb07b0b98b53a7923be716d1d182f"
426 | integrity sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==
427 |
428 | "@rollup/rollup-linux-x64-musl@4.34.8":
429 | version "4.34.8"
430 | resolved "https://registry.yarnpkg.com/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.34.8.tgz#00b6c29b298197a384e3c659910b47943003a678"
431 | integrity sha512-SCXcP0ZpGFIe7Ge+McxY5zKxiEI5ra+GT3QRxL0pMMtxPfpyLAKleZODi1zdRHkz5/BhueUrYtYVgubqe9JBNQ==
432 |
433 | "@rollup/rollup-win32-arm64-msvc@4.22.4":
434 | version "4.22.4"
435 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz#4349482d17f5d1c58604d1c8900540d676f420e0"
436 | integrity sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==
437 |
438 | "@rollup/rollup-win32-arm64-msvc@4.34.8":
439 | version "4.34.8"
440 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.34.8.tgz#cbfee01f1fe73791c35191a05397838520ca3cdd"
441 | integrity sha512-YHYsgzZgFJzTRbth4h7Or0m5O74Yda+hLin0irAIobkLQFRQd1qWmnoVfwmKm9TXIZVAD0nZ+GEb2ICicLyCnQ==
442 |
443 | "@rollup/rollup-win32-ia32-msvc@4.22.4":
444 | version "4.22.4"
445 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz#a6fc39a15db618040ec3c2a24c1e26cb5f4d7422"
446 | integrity sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==
447 |
448 | "@rollup/rollup-win32-ia32-msvc@4.34.8":
449 | version "4.34.8"
450 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.34.8.tgz#95cdbdff48fe6c948abcf6a1d500b2bd5ce33f62"
451 | integrity sha512-r3NRQrXkHr4uWy5TOjTpTYojR9XmF0j/RYgKCef+Ag46FWUTltm5ziticv8LdNsDMehjJ543x/+TJAek/xBA2w==
452 |
453 | "@rollup/rollup-win32-x64-msvc@4.22.4":
454 | version "4.22.4"
455 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz#3dd5d53e900df2a40841882c02e56f866c04d202"
456 | integrity sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==
457 |
458 | "@rollup/rollup-win32-x64-msvc@4.34.8":
459 | version "4.34.8"
460 | resolved "https://registry.yarnpkg.com/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.34.8.tgz#4cdb2cfae69cdb7b1a3cc58778e820408075e928"
461 | integrity sha512-U0FaE5O1BCpZSeE6gBl3c5ObhePQSfk9vDRToMmTkbhCOgW4jqvtS5LGyQ76L1fH8sM0keRp4uDTsbjiUyjk0g==
462 |
463 | "@sinclair/typebox@^0.27.8":
464 | version "0.27.8"
465 | resolved "https://registry.yarnpkg.com/@sinclair/typebox/-/typebox-0.27.8.tgz#6667fac16c436b5434a387a34dedb013198f6e6e"
466 | integrity sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==
467 |
468 | "@types/estree@1.0.5":
469 | version "1.0.5"
470 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.5.tgz#a6ce3e556e00fd9895dd872dd172ad0d4bd687f4"
471 | integrity sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==
472 |
473 | "@types/estree@1.0.6", "@types/estree@^1.0.0":
474 | version "1.0.6"
475 | resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.6.tgz#628effeeae2064a1b4e79f78e81d87b7e5fc7b50"
476 | integrity sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==
477 |
478 | "@types/fs-extra@^8.0.1":
479 | version "8.1.5"
480 | resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-8.1.5.tgz#33aae2962d3b3ec9219b5aca2555ee00274f5927"
481 | integrity sha512-0dzKcwO+S8s2kuF5Z9oUWatQJj5Uq/iqphEtE3GQJVRRYm/tD1LglU2UnXi2A8jLq5umkGouOXOR9y0n613ZwQ==
482 | dependencies:
483 | "@types/node" "*"
484 |
485 | "@types/glob@^7.1.1":
486 | version "7.2.0"
487 | resolved "https://registry.yarnpkg.com/@types/glob/-/glob-7.2.0.tgz#bc1b5bf3aa92f25bd5dd39f35c57361bdce5b2eb"
488 | integrity sha512-ZUxbzKl0IfJILTS6t7ip5fQQM/J3TJYubDm3nMbgubNNYS62eXeUpoLUC8/7fJNiFYHTrGPQn7hspDUzIHX3UA==
489 | dependencies:
490 | "@types/minimatch" "*"
491 | "@types/node" "*"
492 |
493 | "@types/minimatch@*":
494 | version "5.1.2"
495 | resolved "https://registry.yarnpkg.com/@types/minimatch/-/minimatch-5.1.2.tgz#07508b45797cb81ec3f273011b054cd0755eddca"
496 | integrity sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==
497 |
498 | "@types/node@*":
499 | version "22.13.4"
500 | resolved "https://registry.yarnpkg.com/@types/node/-/node-22.13.4.tgz#3fe454d77cd4a2d73c214008b3e331bfaaf5038a"
501 | integrity sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==
502 | dependencies:
503 | undici-types "~6.20.0"
504 |
505 | "@types/node@^20.14.9":
506 | version "20.17.19"
507 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.17.19.tgz#0f2869555719bef266ca6e1827fcdca903c1a697"
508 | integrity sha512-LEwC7o1ifqg/6r2gn9Dns0f1rhK+fPFDoMiceTJ6kWmVk6bgXBI/9IOWfVan4WiAavK9pIVWdX0/e3J+eEUh5A==
509 | dependencies:
510 | undici-types "~6.19.2"
511 |
512 | "@types/vscode@^1.90.0":
513 | version "1.97.0"
514 | resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.97.0.tgz#62ce3a32243019aaa4fc20cee2a3de06bc71af4f"
515 | integrity sha512-ueE73loeOTe7olaVyqP9mrRI54kVPJifUPjblZo9fYcv1CuVLPOEKEkqW0GkqPC454+nCEoigLWnC2Pp7prZ9w==
516 |
517 | "@vitest/expect@1.6.1":
518 | version "1.6.1"
519 | resolved "https://registry.yarnpkg.com/@vitest/expect/-/expect-1.6.1.tgz#b90c213f587514a99ac0bf84f88cff9042b0f14d"
520 | integrity sha512-jXL+9+ZNIJKruofqXuuTClf44eSpcHlgj3CiuNihUF3Ioujtmc0zIa3UJOW5RjDK1YLBJZnWBlPuqhYycLioog==
521 | dependencies:
522 | "@vitest/spy" "1.6.1"
523 | "@vitest/utils" "1.6.1"
524 | chai "^4.3.10"
525 |
526 | "@vitest/runner@1.6.1":
527 | version "1.6.1"
528 | resolved "https://registry.yarnpkg.com/@vitest/runner/-/runner-1.6.1.tgz#10f5857c3e376218d58c2bfacfea1161e27e117f"
529 | integrity sha512-3nSnYXkVkf3mXFfE7vVyPmi3Sazhb/2cfZGGs0JRzFsPFvAMBEcrweV1V1GsrstdXeKCTXlJbvnQwGWgEIHmOA==
530 | dependencies:
531 | "@vitest/utils" "1.6.1"
532 | p-limit "^5.0.0"
533 | pathe "^1.1.1"
534 |
535 | "@vitest/snapshot@1.6.1":
536 | version "1.6.1"
537 | resolved "https://registry.yarnpkg.com/@vitest/snapshot/-/snapshot-1.6.1.tgz#90414451a634bb36cd539ccb29ae0d048a8c0479"
538 | integrity sha512-WvidQuWAzU2p95u8GAKlRMqMyN1yOJkGHnx3M1PL9Raf7AQ1kwLKg04ADlCa3+OXUZE7BceOhVZiuWAbzCKcUQ==
539 | dependencies:
540 | magic-string "^0.30.5"
541 | pathe "^1.1.1"
542 | pretty-format "^29.7.0"
543 |
544 | "@vitest/spy@1.6.1":
545 | version "1.6.1"
546 | resolved "https://registry.yarnpkg.com/@vitest/spy/-/spy-1.6.1.tgz#33376be38a5ed1ecd829eb986edaecc3e798c95d"
547 | integrity sha512-MGcMmpGkZebsMZhbQKkAf9CX5zGvjkBTqf8Zx3ApYWXr3wG+QvEu2eXWfnIIWYSJExIp4V9FCKDEeygzkYrXMw==
548 | dependencies:
549 | tinyspy "^2.2.0"
550 |
551 | "@vitest/utils@1.6.1":
552 | version "1.6.1"
553 | resolved "https://registry.yarnpkg.com/@vitest/utils/-/utils-1.6.1.tgz#6d2f36cb6d866f2bbf59da854a324d6bf8040f17"
554 | integrity sha512-jOrrUvXM4Av9ZWiG1EajNto0u96kWAhJ1LmPmJhXXQx/32MecEKd10pOLYgS2BQx1TgkGhloPU1ArDW2vvaY6g==
555 | dependencies:
556 | diff-sequences "^29.6.3"
557 | estree-walker "^3.0.3"
558 | loupe "^2.3.7"
559 | pretty-format "^29.7.0"
560 |
561 | "@vscode/vsce-sign-alpine-arm64@2.0.2":
562 | version "2.0.2"
563 | resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-alpine-arm64/-/vsce-sign-alpine-arm64-2.0.2.tgz#4accc485e55aa6ff04b195b47f722ead57daa58e"
564 | integrity sha512-E80YvqhtZCLUv3YAf9+tIbbqoinWLCO/B3j03yQPbjT3ZIHCliKZlsy1peNc4XNZ5uIb87Jn0HWx/ZbPXviuAQ==
565 |
566 | "@vscode/vsce-sign-alpine-x64@2.0.2":
567 | version "2.0.2"
568 | resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-alpine-x64/-/vsce-sign-alpine-x64-2.0.2.tgz#4a4b7b505b4cc0f58596394897c49a0bce0e540c"
569 | integrity sha512-n1WC15MSMvTaeJ5KjWCzo0nzjydwxLyoHiMJHu1Ov0VWTZiddasmOQHekA47tFRycnt4FsQrlkSCTdgHppn6bw==
570 |
571 | "@vscode/vsce-sign-darwin-arm64@2.0.2":
572 | version "2.0.2"
573 | resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-darwin-arm64/-/vsce-sign-darwin-arm64-2.0.2.tgz#10aa69feb7f81a3dc68c242038ca03eaff19c12e"
574 | integrity sha512-rz8F4pMcxPj8fjKAJIfkUT8ycG9CjIp888VY/6pq6cuI2qEzQ0+b5p3xb74CJnBbSC0p2eRVoe+WgNCAxCLtzQ==
575 |
576 | "@vscode/vsce-sign-darwin-x64@2.0.2":
577 | version "2.0.2"
578 | resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-darwin-x64/-/vsce-sign-darwin-x64-2.0.2.tgz#3315528f3ea1007a648b3320bff36a33a9e07aa5"
579 | integrity sha512-MCjPrQ5MY/QVoZ6n0D92jcRb7eYvxAujG/AH2yM6lI0BspvJQxp0o9s5oiAM9r32r9tkLpiy5s2icsbwefAQIw==
580 |
581 | "@vscode/vsce-sign-linux-arm64@2.0.2":
582 | version "2.0.2"
583 | resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-linux-arm64/-/vsce-sign-linux-arm64-2.0.2.tgz#ce5c5cfc99e3454b4fb770405812b46bd6dca870"
584 | integrity sha512-Ybeu7cA6+/koxszsORXX0OJk9N0GgfHq70Wqi4vv2iJCZvBrOWwcIrxKjvFtwyDgdeQzgPheH5nhLVl5eQy7WA==
585 |
586 | "@vscode/vsce-sign-linux-arm@2.0.2":
587 | version "2.0.2"
588 | resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-linux-arm/-/vsce-sign-linux-arm-2.0.2.tgz#4142fda83e7130b31aedd8aa81e4daa6334323c2"
589 | integrity sha512-Fkb5jpbfhZKVw3xwR6t7WYfwKZktVGNXdg1m08uEx1anO0oUPUkoQRsNm4QniL3hmfw0ijg00YA6TrxCRkPVOQ==
590 |
591 | "@vscode/vsce-sign-linux-x64@2.0.2":
592 | version "2.0.2"
593 | resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-linux-x64/-/vsce-sign-linux-x64-2.0.2.tgz#59ab93f322efb3cf49166d4e2e812789c3117428"
594 | integrity sha512-NsPPFVtLaTlVJKOiTnO8Cl78LZNWy0Q8iAg+LlBiCDEgC12Gt4WXOSs2pmcIjDYzj2kY4NwdeN1mBTaujYZaPg==
595 |
596 | "@vscode/vsce-sign-win32-arm64@2.0.2":
597 | version "2.0.2"
598 | resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-win32-arm64/-/vsce-sign-win32-arm64-2.0.2.tgz#d095704a14b0404c0b6f696e9889e9a51b31a86c"
599 | integrity sha512-wPs848ymZ3Ny+Y1Qlyi7mcT6VSigG89FWQnp2qRYCyMhdJxOpA4lDwxzlpL8fG6xC8GjQjGDkwbkWUcCobvksQ==
600 |
601 | "@vscode/vsce-sign-win32-x64@2.0.2":
602 | version "2.0.2"
603 | resolved "https://registry.yarnpkg.com/@vscode/vsce-sign-win32-x64/-/vsce-sign-win32-x64-2.0.2.tgz#294ea72b44fedd694d49f5cef4c55bf3876dc257"
604 | integrity sha512-pAiRN6qSAhDM5SVOIxgx+2xnoVUePHbRNC7OD2aOR3WltTKxxF25OfpK8h8UQ7A0BuRkSgREbB59DBlFk4iAeg==
605 |
606 | "@vscode/vsce-sign@^2.0.0":
607 | version "2.0.5"
608 | resolved "https://registry.yarnpkg.com/@vscode/vsce-sign/-/vsce-sign-2.0.5.tgz#8850036476dc0d4e080d9c2d8325e3e97eff5193"
609 | integrity sha512-GfYWrsT/vypTMDMgWDm75iDmAOMe7F71sZECJ+Ws6/xyIfmB3ELVnVN+LwMFAvmXY+e6eWhR2EzNGF/zAhWY3Q==
610 | optionalDependencies:
611 | "@vscode/vsce-sign-alpine-arm64" "2.0.2"
612 | "@vscode/vsce-sign-alpine-x64" "2.0.2"
613 | "@vscode/vsce-sign-darwin-arm64" "2.0.2"
614 | "@vscode/vsce-sign-darwin-x64" "2.0.2"
615 | "@vscode/vsce-sign-linux-arm" "2.0.2"
616 | "@vscode/vsce-sign-linux-arm64" "2.0.2"
617 | "@vscode/vsce-sign-linux-x64" "2.0.2"
618 | "@vscode/vsce-sign-win32-arm64" "2.0.2"
619 | "@vscode/vsce-sign-win32-x64" "2.0.2"
620 |
621 | "@vscode/vsce@^3.2.2":
622 | version "3.2.2"
623 | resolved "https://registry.yarnpkg.com/@vscode/vsce/-/vsce-3.2.2.tgz#cf65068e3dd51b74756670f231aa9ad2bbeef0de"
624 | integrity sha512-4TqdUq/yKlQTHcQMk/DamR632bq/+IJDomSbexOMee/UAYWqYm0XHWA6scGslsCpzY+sCWEhhl0nqdOB0XW1kw==
625 | dependencies:
626 | "@azure/identity" "^4.1.0"
627 | "@vscode/vsce-sign" "^2.0.0"
628 | azure-devops-node-api "^12.5.0"
629 | chalk "^2.4.2"
630 | cheerio "^1.0.0-rc.9"
631 | cockatiel "^3.1.2"
632 | commander "^12.1.0"
633 | form-data "^4.0.0"
634 | glob "^11.0.0"
635 | hosted-git-info "^4.0.2"
636 | jsonc-parser "^3.2.0"
637 | leven "^3.1.0"
638 | markdown-it "^14.1.0"
639 | mime "^1.3.4"
640 | minimatch "^3.0.3"
641 | parse-semver "^1.1.1"
642 | read "^1.0.7"
643 | semver "^7.5.2"
644 | tmp "^0.2.3"
645 | typed-rest-client "^1.8.4"
646 | url-join "^4.0.1"
647 | xml2js "^0.5.0"
648 | yauzl "^2.3.1"
649 | yazl "^2.2.2"
650 | optionalDependencies:
651 | keytar "^7.7.0"
652 |
653 | acorn-walk@^8.3.2:
654 | version "8.3.4"
655 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.4.tgz#794dd169c3977edf4ba4ea47583587c5866236b7"
656 | integrity sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==
657 | dependencies:
658 | acorn "^8.11.0"
659 |
660 | acorn@^8.11.0, acorn@^8.14.0:
661 | version "8.14.0"
662 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.0.tgz#063e2c70cac5fb4f6467f0b11152e04c682795b0"
663 | integrity sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==
664 |
665 | agent-base@^7.1.0, agent-base@^7.1.2:
666 | version "7.1.3"
667 | resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1"
668 | integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==
669 |
670 | aggregate-error@^3.0.0:
671 | version "3.1.0"
672 | resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a"
673 | integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==
674 | dependencies:
675 | clean-stack "^2.0.0"
676 | indent-string "^4.0.0"
677 |
678 | ansi-regex@^5.0.1:
679 | version "5.0.1"
680 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
681 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
682 |
683 | ansi-regex@^6.0.1:
684 | version "6.1.0"
685 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-6.1.0.tgz#95ec409c69619d6cb1b8b34f14b660ef28ebd654"
686 | integrity sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==
687 |
688 | ansi-styles@^3.2.1:
689 | version "3.2.1"
690 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
691 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
692 | dependencies:
693 | color-convert "^1.9.0"
694 |
695 | ansi-styles@^4.0.0:
696 | version "4.3.0"
697 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
698 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
699 | dependencies:
700 | color-convert "^2.0.1"
701 |
702 | ansi-styles@^5.0.0:
703 | version "5.2.0"
704 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-5.2.0.tgz#07449690ad45777d1924ac2abb2fc8895dba836b"
705 | integrity sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==
706 |
707 | ansi-styles@^6.1.0:
708 | version "6.2.1"
709 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-6.2.1.tgz#0e62320cf99c21afff3b3012192546aacbfb05c5"
710 | integrity sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==
711 |
712 | argparse@^2.0.1:
713 | version "2.0.1"
714 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
715 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
716 |
717 | array-union@^2.1.0:
718 | version "2.1.0"
719 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
720 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
721 |
722 | assertion-error@^1.1.0:
723 | version "1.1.0"
724 | resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b"
725 | integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==
726 |
727 | asynckit@^0.4.0:
728 | version "0.4.0"
729 | resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79"
730 | integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==
731 |
732 | azure-devops-node-api@^12.5.0:
733 | version "12.5.0"
734 | resolved "https://registry.yarnpkg.com/azure-devops-node-api/-/azure-devops-node-api-12.5.0.tgz#38b9efd7c5ac74354fe4e8dbe42697db0b8e85a5"
735 | integrity sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==
736 | dependencies:
737 | tunnel "0.0.6"
738 | typed-rest-client "^1.8.4"
739 |
740 | balanced-match@^1.0.0:
741 | version "1.0.2"
742 | resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee"
743 | integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==
744 |
745 | base64-js@^1.3.1:
746 | version "1.5.1"
747 | resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a"
748 | integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==
749 |
750 | bl@^4.0.3:
751 | version "4.1.0"
752 | resolved "https://registry.yarnpkg.com/bl/-/bl-4.1.0.tgz#451535264182bec2fbbc83a62ab98cf11d9f7b3a"
753 | integrity sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==
754 | dependencies:
755 | buffer "^5.5.0"
756 | inherits "^2.0.4"
757 | readable-stream "^3.4.0"
758 |
759 | boolbase@^1.0.0:
760 | version "1.0.0"
761 | resolved "https://registry.yarnpkg.com/boolbase/-/boolbase-1.0.0.tgz#68dff5fbe60c51eb37725ea9e3ed310dcc1e776e"
762 | integrity sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==
763 |
764 | brace-expansion@^1.1.7:
765 | version "1.1.12"
766 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.12.tgz#ab9b454466e5a8cc3a187beaad580412a9c5b843"
767 | integrity sha512-9T9UjW3r0UW5c1Q7GTwllptXwhvYmEzFhzMfZ9H7FQWt+uZePjZPjBP/W1ZEyZ1twGWom5/56TF4lPcqjnDHcg==
768 | dependencies:
769 | balanced-match "^1.0.0"
770 | concat-map "0.0.1"
771 |
772 | brace-expansion@^2.0.1:
773 | version "2.0.2"
774 | resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-2.0.2.tgz#54fc53237a613d854c7bd37463aad17df87214e7"
775 | integrity sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==
776 | dependencies:
777 | balanced-match "^1.0.0"
778 |
779 | braces@^3.0.3:
780 | version "3.0.3"
781 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
782 | integrity sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
783 | dependencies:
784 | fill-range "^7.1.1"
785 |
786 | buffer-crc32@~0.2.3:
787 | version "0.2.13"
788 | resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
789 | integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==
790 |
791 | buffer-equal-constant-time@1.0.1:
792 | version "1.0.1"
793 | resolved "https://registry.yarnpkg.com/buffer-equal-constant-time/-/buffer-equal-constant-time-1.0.1.tgz#f8e71132f7ffe6e01a5c9697a4c6f3e48d5cc819"
794 | integrity sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==
795 |
796 | buffer@^5.5.0:
797 | version "5.7.1"
798 | resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0"
799 | integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==
800 | dependencies:
801 | base64-js "^1.3.1"
802 | ieee754 "^1.1.13"
803 |
804 | bundle-name@^4.1.0:
805 | version "4.1.0"
806 | resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889"
807 | integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q==
808 | dependencies:
809 | run-applescript "^7.0.0"
810 |
811 | cac@^6.7.14:
812 | version "6.7.14"
813 | resolved "https://registry.yarnpkg.com/cac/-/cac-6.7.14.tgz#804e1e6f506ee363cb0e3ccbb09cad5dd9870959"
814 | integrity sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==
815 |
816 | call-bind-apply-helpers@^1.0.1:
817 | version "1.0.2"
818 | resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6"
819 | integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==
820 | dependencies:
821 | es-errors "^1.3.0"
822 | function-bind "^1.1.2"
823 |
824 | call-bound@^1.0.2:
825 | version "1.0.3"
826 | resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.3.tgz#41cfd032b593e39176a71533ab4f384aa04fd681"
827 | integrity sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==
828 | dependencies:
829 | call-bind-apply-helpers "^1.0.1"
830 | get-intrinsic "^1.2.6"
831 |
832 | chai@^4.3.10:
833 | version "4.5.0"
834 | resolved "https://registry.yarnpkg.com/chai/-/chai-4.5.0.tgz#707e49923afdd9b13a8b0b47d33d732d13812fd8"
835 | integrity sha512-RITGBfijLkBddZvnn8jdqoTypxvqbOLYQkGGxXzeFjVHvudaPw0HNFD9x928/eUwYWd2dPCugVqspGALTZZQKw==
836 | dependencies:
837 | assertion-error "^1.1.0"
838 | check-error "^1.0.3"
839 | deep-eql "^4.1.3"
840 | get-func-name "^2.0.2"
841 | loupe "^2.3.6"
842 | pathval "^1.1.1"
843 | type-detect "^4.1.0"
844 |
845 | chalk@^2.4.2:
846 | version "2.4.2"
847 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
848 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
849 | dependencies:
850 | ansi-styles "^3.2.1"
851 | escape-string-regexp "^1.0.5"
852 | supports-color "^5.3.0"
853 |
854 | check-error@^1.0.3:
855 | version "1.0.3"
856 | resolved "https://registry.yarnpkg.com/check-error/-/check-error-1.0.3.tgz#a6502e4312a7ee969f646e83bb3ddd56281bd694"
857 | integrity sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==
858 | dependencies:
859 | get-func-name "^2.0.2"
860 |
861 | cheerio-select@^2.1.0:
862 | version "2.1.0"
863 | resolved "https://registry.yarnpkg.com/cheerio-select/-/cheerio-select-2.1.0.tgz#4d8673286b8126ca2a8e42740d5e3c4884ae21b4"
864 | integrity sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==
865 | dependencies:
866 | boolbase "^1.0.0"
867 | css-select "^5.1.0"
868 | css-what "^6.1.0"
869 | domelementtype "^2.3.0"
870 | domhandler "^5.0.3"
871 | domutils "^3.0.1"
872 |
873 | cheerio@^1.0.0-rc.9:
874 | version "1.0.0"
875 | resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0.tgz#1ede4895a82f26e8af71009f961a9b8cb60d6a81"
876 | integrity sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==
877 | dependencies:
878 | cheerio-select "^2.1.0"
879 | dom-serializer "^2.0.0"
880 | domhandler "^5.0.3"
881 | domutils "^3.1.0"
882 | encoding-sniffer "^0.2.0"
883 | htmlparser2 "^9.1.0"
884 | parse5 "^7.1.2"
885 | parse5-htmlparser2-tree-adapter "^7.0.0"
886 | parse5-parser-stream "^7.1.2"
887 | undici "^6.19.5"
888 | whatwg-mimetype "^4.0.0"
889 |
890 | chownr@^1.1.1:
891 | version "1.1.4"
892 | resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.4.tgz#6fc9d7b42d32a583596337666e7d08084da2cc6b"
893 | integrity sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==
894 |
895 | clean-stack@^2.0.0:
896 | version "2.2.0"
897 | resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b"
898 | integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==
899 |
900 | cockatiel@^3.1.2:
901 | version "3.2.1"
902 | resolved "https://registry.yarnpkg.com/cockatiel/-/cockatiel-3.2.1.tgz#575f937bc4040a20ae27352a6d07c9c5a741981f"
903 | integrity sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==
904 |
905 | color-convert@^1.9.0:
906 | version "1.9.3"
907 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
908 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
909 | dependencies:
910 | color-name "1.1.3"
911 |
912 | color-convert@^2.0.1:
913 | version "2.0.1"
914 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
915 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
916 | dependencies:
917 | color-name "~1.1.4"
918 |
919 | color-name@1.1.3:
920 | version "1.1.3"
921 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
922 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
923 |
924 | color-name@~1.1.4:
925 | version "1.1.4"
926 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
927 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
928 |
929 | colorette@^1.1.0:
930 | version "1.4.0"
931 | resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.4.0.tgz#5190fbb87276259a86ad700bff2c6d6faa3fca40"
932 | integrity sha512-Y2oEozpomLn7Q3HFP7dpww7AtMJplbM9lGZP6RDfHqmbeRjiwRg4n6VM6j4KLmRke85uWEI7JqF17f3pqdRA0g==
933 |
934 | combined-stream@^1.0.8:
935 | version "1.0.8"
936 | resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f"
937 | integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==
938 | dependencies:
939 | delayed-stream "~1.0.0"
940 |
941 | commander@^12.1.0:
942 | version "12.1.0"
943 | resolved "https://registry.yarnpkg.com/commander/-/commander-12.1.0.tgz#01423b36f501259fdaac4d0e4d60c96c991585d3"
944 | integrity sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==
945 |
946 | concat-map@0.0.1:
947 | version "0.0.1"
948 | resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
949 | integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==
950 |
951 | confbox@^0.1.8:
952 | version "0.1.8"
953 | resolved "https://registry.yarnpkg.com/confbox/-/confbox-0.1.8.tgz#820d73d3b3c82d9bd910652c5d4d599ef8ff8b06"
954 | integrity sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==
955 |
956 | cross-spawn@^7.0.0, cross-spawn@^7.0.3:
957 | version "7.0.6"
958 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f"
959 | integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==
960 | dependencies:
961 | path-key "^3.1.0"
962 | shebang-command "^2.0.0"
963 | which "^2.0.1"
964 |
965 | css-select@^5.1.0:
966 | version "5.1.0"
967 | resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6"
968 | integrity sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==
969 | dependencies:
970 | boolbase "^1.0.0"
971 | css-what "^6.1.0"
972 | domhandler "^5.0.2"
973 | domutils "^3.0.1"
974 | nth-check "^2.0.1"
975 |
976 | css-what@^6.1.0:
977 | version "6.1.0"
978 | resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4"
979 | integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==
980 |
981 | debug@4, debug@^4.3.4:
982 | version "4.4.0"
983 | resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a"
984 | integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==
985 | dependencies:
986 | ms "^2.1.3"
987 |
988 | decompress-response@^6.0.0:
989 | version "6.0.0"
990 | resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc"
991 | integrity sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==
992 | dependencies:
993 | mimic-response "^3.1.0"
994 |
995 | deep-eql@^4.1.3:
996 | version "4.1.4"
997 | resolved "https://registry.yarnpkg.com/deep-eql/-/deep-eql-4.1.4.tgz#d0d3912865911bb8fac5afb4e3acfa6a28dc72b7"
998 | integrity sha512-SUwdGfqdKOwxCPeVYjwSyRpJ7Z+fhpwIAtmCUdZIWZ/YP5R9WAsyuSgpLVDi9bjWoN2LXHNss/dk3urXtdQxGg==
999 | dependencies:
1000 | type-detect "^4.0.0"
1001 |
1002 | deep-extend@^0.6.0:
1003 | version "0.6.0"
1004 | resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac"
1005 | integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==
1006 |
1007 | default-browser-id@^5.0.0:
1008 | version "5.0.0"
1009 | resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26"
1010 | integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA==
1011 |
1012 | default-browser@^5.2.1:
1013 | version "5.2.1"
1014 | resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf"
1015 | integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg==
1016 | dependencies:
1017 | bundle-name "^4.1.0"
1018 | default-browser-id "^5.0.0"
1019 |
1020 | define-lazy-prop@^3.0.0:
1021 | version "3.0.0"
1022 | resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f"
1023 | integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg==
1024 |
1025 | del@^5.1.0:
1026 | version "5.1.0"
1027 | resolved "https://registry.yarnpkg.com/del/-/del-5.1.0.tgz#d9487c94e367410e6eff2925ee58c0c84a75b3a7"
1028 | integrity sha512-wH9xOVHnczo9jN2IW68BabcecVPxacIA3g/7z6vhSU/4stOKQzeCRK0yD0A24WiAAUJmmVpWqrERcTxnLo3AnA==
1029 | dependencies:
1030 | globby "^10.0.1"
1031 | graceful-fs "^4.2.2"
1032 | is-glob "^4.0.1"
1033 | is-path-cwd "^2.2.0"
1034 | is-path-inside "^3.0.1"
1035 | p-map "^3.0.0"
1036 | rimraf "^3.0.0"
1037 | slash "^3.0.0"
1038 |
1039 | delayed-stream@~1.0.0:
1040 | version "1.0.0"
1041 | resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619"
1042 | integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==
1043 |
1044 | detect-libc@^2.0.0:
1045 | version "2.0.3"
1046 | resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700"
1047 | integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==
1048 |
1049 | diff-sequences@^29.6.3:
1050 | version "29.6.3"
1051 | resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-29.6.3.tgz#4deaf894d11407c51efc8418012f9e70b84ea921"
1052 | integrity sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==
1053 |
1054 | dir-glob@^3.0.1:
1055 | version "3.0.1"
1056 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
1057 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
1058 | dependencies:
1059 | path-type "^4.0.0"
1060 |
1061 | dom-serializer@^2.0.0:
1062 | version "2.0.0"
1063 | resolved "https://registry.yarnpkg.com/dom-serializer/-/dom-serializer-2.0.0.tgz#e41b802e1eedf9f6cae183ce5e622d789d7d8e53"
1064 | integrity sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==
1065 | dependencies:
1066 | domelementtype "^2.3.0"
1067 | domhandler "^5.0.2"
1068 | entities "^4.2.0"
1069 |
1070 | domelementtype@^2.3.0:
1071 | version "2.3.0"
1072 | resolved "https://registry.yarnpkg.com/domelementtype/-/domelementtype-2.3.0.tgz#5c45e8e869952626331d7aab326d01daf65d589d"
1073 | integrity sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==
1074 |
1075 | domhandler@^5.0.2, domhandler@^5.0.3:
1076 | version "5.0.3"
1077 | resolved "https://registry.yarnpkg.com/domhandler/-/domhandler-5.0.3.tgz#cc385f7f751f1d1fc650c21374804254538c7d31"
1078 | integrity sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==
1079 | dependencies:
1080 | domelementtype "^2.3.0"
1081 |
1082 | domutils@^3.0.1, domutils@^3.1.0:
1083 | version "3.2.2"
1084 | resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78"
1085 | integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==
1086 | dependencies:
1087 | dom-serializer "^2.0.0"
1088 | domelementtype "^2.3.0"
1089 | domhandler "^5.0.3"
1090 |
1091 | dunder-proto@^1.0.1:
1092 | version "1.0.1"
1093 | resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a"
1094 | integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==
1095 | dependencies:
1096 | call-bind-apply-helpers "^1.0.1"
1097 | es-errors "^1.3.0"
1098 | gopd "^1.2.0"
1099 |
1100 | eastasianwidth@^0.2.0:
1101 | version "0.2.0"
1102 | resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb"
1103 | integrity sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==
1104 |
1105 | ecdsa-sig-formatter@1.0.11:
1106 | version "1.0.11"
1107 | resolved "https://registry.yarnpkg.com/ecdsa-sig-formatter/-/ecdsa-sig-formatter-1.0.11.tgz#ae0f0fa2d85045ef14a817daa3ce9acd0489e5bf"
1108 | integrity sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==
1109 | dependencies:
1110 | safe-buffer "^5.0.1"
1111 |
1112 | emoji-regex@^8.0.0:
1113 | version "8.0.0"
1114 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
1115 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
1116 |
1117 | emoji-regex@^9.2.2:
1118 | version "9.2.2"
1119 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-9.2.2.tgz#840c8803b0d8047f4ff0cf963176b32d4ef3ed72"
1120 | integrity sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==
1121 |
1122 | encoding-sniffer@^0.2.0:
1123 | version "0.2.0"
1124 | resolved "https://registry.yarnpkg.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz#799569d66d443babe82af18c9f403498365ef1d5"
1125 | integrity sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==
1126 | dependencies:
1127 | iconv-lite "^0.6.3"
1128 | whatwg-encoding "^3.1.1"
1129 |
1130 | end-of-stream@^1.1.0, end-of-stream@^1.4.1:
1131 | version "1.4.4"
1132 | resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0"
1133 | integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==
1134 | dependencies:
1135 | once "^1.4.0"
1136 |
1137 | entities@^4.2.0, entities@^4.4.0, entities@^4.5.0:
1138 | version "4.5.0"
1139 | resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48"
1140 | integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==
1141 |
1142 | es-define-property@^1.0.1:
1143 | version "1.0.1"
1144 | resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa"
1145 | integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==
1146 |
1147 | es-errors@^1.3.0:
1148 | version "1.3.0"
1149 | resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f"
1150 | integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==
1151 |
1152 | es-object-atoms@^1.0.0:
1153 | version "1.1.1"
1154 | resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1"
1155 | integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==
1156 | dependencies:
1157 | es-errors "^1.3.0"
1158 |
1159 | es-set-tostringtag@^2.1.0:
1160 | version "2.1.0"
1161 | resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d"
1162 | integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==
1163 | dependencies:
1164 | es-errors "^1.3.0"
1165 | get-intrinsic "^1.2.6"
1166 | has-tostringtag "^1.0.2"
1167 | hasown "^2.0.2"
1168 |
1169 | esbuild@^0.21.3:
1170 | version "0.21.5"
1171 | resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.21.5.tgz#9ca301b120922959b766360d8ac830da0d02997d"
1172 | integrity sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==
1173 | optionalDependencies:
1174 | "@esbuild/aix-ppc64" "0.21.5"
1175 | "@esbuild/android-arm" "0.21.5"
1176 | "@esbuild/android-arm64" "0.21.5"
1177 | "@esbuild/android-x64" "0.21.5"
1178 | "@esbuild/darwin-arm64" "0.21.5"
1179 | "@esbuild/darwin-x64" "0.21.5"
1180 | "@esbuild/freebsd-arm64" "0.21.5"
1181 | "@esbuild/freebsd-x64" "0.21.5"
1182 | "@esbuild/linux-arm" "0.21.5"
1183 | "@esbuild/linux-arm64" "0.21.5"
1184 | "@esbuild/linux-ia32" "0.21.5"
1185 | "@esbuild/linux-loong64" "0.21.5"
1186 | "@esbuild/linux-mips64el" "0.21.5"
1187 | "@esbuild/linux-ppc64" "0.21.5"
1188 | "@esbuild/linux-riscv64" "0.21.5"
1189 | "@esbuild/linux-s390x" "0.21.5"
1190 | "@esbuild/linux-x64" "0.21.5"
1191 | "@esbuild/netbsd-x64" "0.21.5"
1192 | "@esbuild/openbsd-x64" "0.21.5"
1193 | "@esbuild/sunos-x64" "0.21.5"
1194 | "@esbuild/win32-arm64" "0.21.5"
1195 | "@esbuild/win32-ia32" "0.21.5"
1196 | "@esbuild/win32-x64" "0.21.5"
1197 |
1198 | escape-string-regexp@^1.0.5:
1199 | version "1.0.5"
1200 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
1201 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
1202 |
1203 | estree-walker@^2.0.2:
1204 | version "2.0.2"
1205 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-2.0.2.tgz#52f010178c2a4c117a7757cfe942adb7d2da4cac"
1206 | integrity sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==
1207 |
1208 | estree-walker@^3.0.3:
1209 | version "3.0.3"
1210 | resolved "https://registry.yarnpkg.com/estree-walker/-/estree-walker-3.0.3.tgz#67c3e549ec402a487b4fc193d1953a524752340d"
1211 | integrity sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==
1212 | dependencies:
1213 | "@types/estree" "^1.0.0"
1214 |
1215 | events@^3.0.0:
1216 | version "3.3.0"
1217 | resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400"
1218 | integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==
1219 |
1220 | execa@^8.0.1:
1221 | version "8.0.1"
1222 | resolved "https://registry.yarnpkg.com/execa/-/execa-8.0.1.tgz#51f6a5943b580f963c3ca9c6321796db8cc39b8c"
1223 | integrity sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==
1224 | dependencies:
1225 | cross-spawn "^7.0.3"
1226 | get-stream "^8.0.1"
1227 | human-signals "^5.0.0"
1228 | is-stream "^3.0.0"
1229 | merge-stream "^2.0.0"
1230 | npm-run-path "^5.1.0"
1231 | onetime "^6.0.0"
1232 | signal-exit "^4.1.0"
1233 | strip-final-newline "^3.0.0"
1234 |
1235 | expand-template@^2.0.3:
1236 | version "2.0.3"
1237 | resolved "https://registry.yarnpkg.com/expand-template/-/expand-template-2.0.3.tgz#6e14b3fcee0f3a6340ecb57d2e8918692052a47c"
1238 | integrity sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==
1239 |
1240 | fast-glob@^3.0.3:
1241 | version "3.3.3"
1242 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818"
1243 | integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==
1244 | dependencies:
1245 | "@nodelib/fs.stat" "^2.0.2"
1246 | "@nodelib/fs.walk" "^1.2.3"
1247 | glob-parent "^5.1.2"
1248 | merge2 "^1.3.0"
1249 | micromatch "^4.0.8"
1250 |
1251 | fastq@^1.6.0:
1252 | version "1.19.0"
1253 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.0.tgz#a82c6b7c2bb4e44766d865f07997785fecfdcb89"
1254 | integrity sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==
1255 | dependencies:
1256 | reusify "^1.0.4"
1257 |
1258 | fd-slicer@~1.1.0:
1259 | version "1.1.0"
1260 | resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
1261 | integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g==
1262 | dependencies:
1263 | pend "~1.2.0"
1264 |
1265 | fill-range@^7.1.1:
1266 | version "7.1.1"
1267 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.1.1.tgz#44265d3cac07e3ea7dc247516380643754a05292"
1268 | integrity sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==
1269 | dependencies:
1270 | to-regex-range "^5.0.1"
1271 |
1272 | foreground-child@^3.1.0:
1273 | version "3.3.0"
1274 | resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77"
1275 | integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==
1276 | dependencies:
1277 | cross-spawn "^7.0.0"
1278 | signal-exit "^4.0.1"
1279 |
1280 | form-data@^4.0.0:
1281 | version "4.0.4"
1282 | resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.4.tgz#784cdcce0669a9d68e94d11ac4eea98088edd2c4"
1283 | integrity sha512-KrGhL9Q4zjj0kiUt5OO4Mr/A/jlI2jDYs5eHBpYHPcBEVSiipAvn2Ko2HnPe20rmcuuvMHNdZFp+4IlGTMF0Ow==
1284 | dependencies:
1285 | asynckit "^0.4.0"
1286 | combined-stream "^1.0.8"
1287 | es-set-tostringtag "^2.1.0"
1288 | hasown "^2.0.2"
1289 | mime-types "^2.1.12"
1290 |
1291 | fs-constants@^1.0.0:
1292 | version "1.0.0"
1293 | resolved "https://registry.yarnpkg.com/fs-constants/-/fs-constants-1.0.0.tgz#6be0de9be998ce16af8afc24497b9ee9b7ccd9ad"
1294 | integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==
1295 |
1296 | fs-extra@^8.1.0:
1297 | version "8.1.0"
1298 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
1299 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
1300 | dependencies:
1301 | graceful-fs "^4.2.0"
1302 | jsonfile "^4.0.0"
1303 | universalify "^0.1.0"
1304 |
1305 | fs.realpath@^1.0.0:
1306 | version "1.0.0"
1307 | resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
1308 | integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==
1309 |
1310 | fsevents@~2.3.2, fsevents@~2.3.3:
1311 | version "2.3.3"
1312 | resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.3.3.tgz#cac6407785d03675a2a5e1a5305c697b347d90d6"
1313 | integrity sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==
1314 |
1315 | function-bind@^1.1.2:
1316 | version "1.1.2"
1317 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c"
1318 | integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==
1319 |
1320 | get-func-name@^2.0.1, get-func-name@^2.0.2:
1321 | version "2.0.2"
1322 | resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41"
1323 | integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==
1324 |
1325 | get-intrinsic@^1.2.5, get-intrinsic@^1.2.6:
1326 | version "1.2.7"
1327 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.7.tgz#dcfcb33d3272e15f445d15124bc0a216189b9044"
1328 | integrity sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==
1329 | dependencies:
1330 | call-bind-apply-helpers "^1.0.1"
1331 | es-define-property "^1.0.1"
1332 | es-errors "^1.3.0"
1333 | es-object-atoms "^1.0.0"
1334 | function-bind "^1.1.2"
1335 | get-proto "^1.0.0"
1336 | gopd "^1.2.0"
1337 | has-symbols "^1.1.0"
1338 | hasown "^2.0.2"
1339 | math-intrinsics "^1.1.0"
1340 |
1341 | get-proto@^1.0.0:
1342 | version "1.0.1"
1343 | resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1"
1344 | integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==
1345 | dependencies:
1346 | dunder-proto "^1.0.1"
1347 | es-object-atoms "^1.0.0"
1348 |
1349 | get-stream@^8.0.1:
1350 | version "8.0.1"
1351 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-8.0.1.tgz#def9dfd71742cd7754a7761ed43749a27d02eca2"
1352 | integrity sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==
1353 |
1354 | github-from-package@0.0.0:
1355 | version "0.0.0"
1356 | resolved "https://registry.yarnpkg.com/github-from-package/-/github-from-package-0.0.0.tgz#97fb5d96bfde8973313f20e8288ef9a167fa64ce"
1357 | integrity sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==
1358 |
1359 | glob-parent@^5.1.2:
1360 | version "5.1.2"
1361 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
1362 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
1363 | dependencies:
1364 | is-glob "^4.0.1"
1365 |
1366 | glob@^11.0.0:
1367 | version "11.0.1"
1368 | resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.1.tgz#1c3aef9a59d680e611b53dcd24bb8639cef064d9"
1369 | integrity sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw==
1370 | dependencies:
1371 | foreground-child "^3.1.0"
1372 | jackspeak "^4.0.1"
1373 | minimatch "^10.0.0"
1374 | minipass "^7.1.2"
1375 | package-json-from-dist "^1.0.0"
1376 | path-scurry "^2.0.0"
1377 |
1378 | glob@^7.1.3:
1379 | version "7.2.3"
1380 | resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b"
1381 | integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==
1382 | dependencies:
1383 | fs.realpath "^1.0.0"
1384 | inflight "^1.0.4"
1385 | inherits "2"
1386 | minimatch "^3.1.1"
1387 | once "^1.3.0"
1388 | path-is-absolute "^1.0.0"
1389 |
1390 | globby@10.0.1:
1391 | version "10.0.1"
1392 | resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.1.tgz#4782c34cb75dd683351335c5829cc3420e606b22"
1393 | integrity sha512-sSs4inE1FB2YQiymcmTv6NWENryABjUNPeWhOvmn4SjtKybglsyPZxFB3U1/+L1bYi0rNZDqCLlHyLYDl1Pq5A==
1394 | dependencies:
1395 | "@types/glob" "^7.1.1"
1396 | array-union "^2.1.0"
1397 | dir-glob "^3.0.1"
1398 | fast-glob "^3.0.3"
1399 | glob "^7.1.3"
1400 | ignore "^5.1.1"
1401 | merge2 "^1.2.3"
1402 | slash "^3.0.0"
1403 |
1404 | globby@^10.0.1:
1405 | version "10.0.2"
1406 | resolved "https://registry.yarnpkg.com/globby/-/globby-10.0.2.tgz#277593e745acaa4646c3ab411289ec47a0392543"
1407 | integrity sha512-7dUi7RvCoT/xast/o/dLN53oqND4yk0nsHkhRgn9w65C4PofCLOoJ39iSOg+qVDdWQPIEj+eszMHQ+aLVwwQSg==
1408 | dependencies:
1409 | "@types/glob" "^7.1.1"
1410 | array-union "^2.1.0"
1411 | dir-glob "^3.0.1"
1412 | fast-glob "^3.0.3"
1413 | glob "^7.1.3"
1414 | ignore "^5.1.1"
1415 | merge2 "^1.2.3"
1416 | slash "^3.0.0"
1417 |
1418 | gopd@^1.2.0:
1419 | version "1.2.0"
1420 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1"
1421 | integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==
1422 |
1423 | graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.2:
1424 | version "4.2.11"
1425 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
1426 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
1427 |
1428 | has-flag@^3.0.0:
1429 | version "3.0.0"
1430 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
1431 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
1432 |
1433 | has-symbols@^1.0.3, has-symbols@^1.1.0:
1434 | version "1.1.0"
1435 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338"
1436 | integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==
1437 |
1438 | has-tostringtag@^1.0.2:
1439 | version "1.0.2"
1440 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc"
1441 | integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==
1442 | dependencies:
1443 | has-symbols "^1.0.3"
1444 |
1445 | hasown@^2.0.2:
1446 | version "2.0.2"
1447 | resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003"
1448 | integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==
1449 | dependencies:
1450 | function-bind "^1.1.2"
1451 |
1452 | hosted-git-info@^4.0.2:
1453 | version "4.1.0"
1454 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
1455 | integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
1456 | dependencies:
1457 | lru-cache "^6.0.0"
1458 |
1459 | htmlparser2@^9.1.0:
1460 | version "9.1.0"
1461 | resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23"
1462 | integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==
1463 | dependencies:
1464 | domelementtype "^2.3.0"
1465 | domhandler "^5.0.3"
1466 | domutils "^3.1.0"
1467 | entities "^4.5.0"
1468 |
1469 | http-proxy-agent@^7.0.0:
1470 | version "7.0.2"
1471 | resolved "https://registry.yarnpkg.com/http-proxy-agent/-/http-proxy-agent-7.0.2.tgz#9a8b1f246866c028509486585f62b8f2c18c270e"
1472 | integrity sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==
1473 | dependencies:
1474 | agent-base "^7.1.0"
1475 | debug "^4.3.4"
1476 |
1477 | https-proxy-agent@^7.0.0:
1478 | version "7.0.6"
1479 | resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9"
1480 | integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==
1481 | dependencies:
1482 | agent-base "^7.1.2"
1483 | debug "4"
1484 |
1485 | human-signals@^5.0.0:
1486 | version "5.0.0"
1487 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-5.0.0.tgz#42665a284f9ae0dade3ba41ebc37eb4b852f3a28"
1488 | integrity sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==
1489 |
1490 | iconv-lite@0.6.3, iconv-lite@^0.6.3:
1491 | version "0.6.3"
1492 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501"
1493 | integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==
1494 | dependencies:
1495 | safer-buffer ">= 2.1.2 < 3.0.0"
1496 |
1497 | ieee754@^1.1.13:
1498 | version "1.2.1"
1499 | resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352"
1500 | integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==
1501 |
1502 | ignore@^5.1.1:
1503 | version "5.3.2"
1504 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5"
1505 | integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==
1506 |
1507 | indent-string@^4.0.0:
1508 | version "4.0.0"
1509 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
1510 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
1511 |
1512 | inflight@^1.0.4:
1513 | version "1.0.6"
1514 | resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
1515 | integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==
1516 | dependencies:
1517 | once "^1.3.0"
1518 | wrappy "1"
1519 |
1520 | inherits@2, inherits@^2.0.3, inherits@^2.0.4:
1521 | version "2.0.4"
1522 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
1523 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
1524 |
1525 | ini@~1.3.0:
1526 | version "1.3.8"
1527 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
1528 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
1529 |
1530 | is-core-module@^2.16.0:
1531 | version "2.16.1"
1532 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4"
1533 | integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w==
1534 | dependencies:
1535 | hasown "^2.0.2"
1536 |
1537 | is-docker@^3.0.0:
1538 | version "3.0.0"
1539 | resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200"
1540 | integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ==
1541 |
1542 | is-extglob@^2.1.1:
1543 | version "2.1.1"
1544 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1545 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
1546 |
1547 | is-fullwidth-code-point@^3.0.0:
1548 | version "3.0.0"
1549 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
1550 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
1551 |
1552 | is-glob@^4.0.1:
1553 | version "4.0.3"
1554 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
1555 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
1556 | dependencies:
1557 | is-extglob "^2.1.1"
1558 |
1559 | is-inside-container@^1.0.0:
1560 | version "1.0.0"
1561 | resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4"
1562 | integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA==
1563 | dependencies:
1564 | is-docker "^3.0.0"
1565 |
1566 | is-number@^7.0.0:
1567 | version "7.0.0"
1568 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1569 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1570 |
1571 | is-path-cwd@^2.2.0:
1572 | version "2.2.0"
1573 | resolved "https://registry.yarnpkg.com/is-path-cwd/-/is-path-cwd-2.2.0.tgz#67d43b82664a7b5191fd9119127eb300048a9fdb"
1574 | integrity sha512-w942bTcih8fdJPJmQHFzkS76NEP8Kzzvmw92cXsazb8intwLqPibPPdXf4ANdKV3rYMuuQYGIWtvz9JilB3NFQ==
1575 |
1576 | is-path-inside@^3.0.1:
1577 | version "3.0.3"
1578 | resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283"
1579 | integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==
1580 |
1581 | is-plain-object@^3.0.0:
1582 | version "3.0.1"
1583 | resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b"
1584 | integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g==
1585 |
1586 | is-stream@^3.0.0:
1587 | version "3.0.0"
1588 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-3.0.0.tgz#e6bfd7aa6bef69f4f472ce9bb681e3e57b4319ac"
1589 | integrity sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==
1590 |
1591 | is-wsl@^3.1.0:
1592 | version "3.1.0"
1593 | resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2"
1594 | integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw==
1595 | dependencies:
1596 | is-inside-container "^1.0.0"
1597 |
1598 | isexe@^2.0.0:
1599 | version "2.0.0"
1600 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1601 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1602 |
1603 | jackspeak@^4.0.1:
1604 | version "4.0.3"
1605 | resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.0.3.tgz#8a21082b8c019e7a0a8187ad8b736609bc85ab18"
1606 | integrity sha512-oSwM7q8PTHQWuZAlp995iPpPJ4Vkl7qT0ZRD+9duL9j2oBy6KcTfyxc8mEuHJYC+z/kbps80aJLkaNzTOrf/kw==
1607 | dependencies:
1608 | "@isaacs/cliui" "^8.0.2"
1609 |
1610 | js-tokens@^9.0.1:
1611 | version "9.0.1"
1612 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-9.0.1.tgz#2ec43964658435296f6761b34e10671c2d9527f4"
1613 | integrity sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==
1614 |
1615 | jsonc-parser@^3.2.0:
1616 | version "3.3.1"
1617 | resolved "https://registry.yarnpkg.com/jsonc-parser/-/jsonc-parser-3.3.1.tgz#f2a524b4f7fd11e3d791e559977ad60b98b798b4"
1618 | integrity sha512-HUgH65KyejrUFPvHFPbqOY0rsFip3Bo5wb4ngvdi1EpCYWUQDC5V+Y7mZws+DLkr4M//zQJoanu1SP+87Dv1oQ==
1619 |
1620 | jsonfile@^4.0.0:
1621 | version "4.0.0"
1622 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
1623 | integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
1624 | optionalDependencies:
1625 | graceful-fs "^4.1.6"
1626 |
1627 | jsonwebtoken@^9.0.0:
1628 | version "9.0.2"
1629 | resolved "https://registry.yarnpkg.com/jsonwebtoken/-/jsonwebtoken-9.0.2.tgz#65ff91f4abef1784697d40952bb1998c504caaf3"
1630 | integrity sha512-PRp66vJ865SSqOlgqS8hujT5U4AOgMfhrwYIuIhfKaoSCZcirrmASQr8CX7cUg+RMih+hgznrjp99o+W4pJLHQ==
1631 | dependencies:
1632 | jws "^3.2.2"
1633 | lodash.includes "^4.3.0"
1634 | lodash.isboolean "^3.0.3"
1635 | lodash.isinteger "^4.0.4"
1636 | lodash.isnumber "^3.0.3"
1637 | lodash.isplainobject "^4.0.6"
1638 | lodash.isstring "^4.0.1"
1639 | lodash.once "^4.0.0"
1640 | ms "^2.1.1"
1641 | semver "^7.5.4"
1642 |
1643 | jwa@^1.4.1:
1644 | version "1.4.1"
1645 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-1.4.1.tgz#743c32985cb9e98655530d53641b66c8645b039a"
1646 | integrity sha512-qiLX/xhEEFKUAJ6FiBMbes3w9ATzyk5W7Hvzpa/SLYdxNtng+gcurvrI7TbACjIXlsJyr05/S1oUhZrc63evQA==
1647 | dependencies:
1648 | buffer-equal-constant-time "1.0.1"
1649 | ecdsa-sig-formatter "1.0.11"
1650 | safe-buffer "^5.0.1"
1651 |
1652 | jwa@^2.0.0:
1653 | version "2.0.0"
1654 | resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc"
1655 | integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA==
1656 | dependencies:
1657 | buffer-equal-constant-time "1.0.1"
1658 | ecdsa-sig-formatter "1.0.11"
1659 | safe-buffer "^5.0.1"
1660 |
1661 | jws@^3.2.2:
1662 | version "3.2.2"
1663 | resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304"
1664 | integrity sha512-YHlZCB6lMTllWDtSPHz/ZXTsi8S00usEV6v1tjq8tOUZzw7DpSDWVXjXDre6ed1w/pd495ODpHZYSdkRTsa0HA==
1665 | dependencies:
1666 | jwa "^1.4.1"
1667 | safe-buffer "^5.0.1"
1668 |
1669 | jws@^4.0.0:
1670 | version "4.0.0"
1671 | resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4"
1672 | integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg==
1673 | dependencies:
1674 | jwa "^2.0.0"
1675 | safe-buffer "^5.0.1"
1676 |
1677 | keytar@^7.7.0:
1678 | version "7.9.0"
1679 | resolved "https://registry.yarnpkg.com/keytar/-/keytar-7.9.0.tgz#4c6225708f51b50cbf77c5aae81721964c2918cb"
1680 | integrity sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==
1681 | dependencies:
1682 | node-addon-api "^4.3.0"
1683 | prebuild-install "^7.0.1"
1684 |
1685 | leven@^3.1.0:
1686 | version "3.1.0"
1687 | resolved "https://registry.yarnpkg.com/leven/-/leven-3.1.0.tgz#77891de834064cccba82ae7842bb6b14a13ed7f2"
1688 | integrity sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==
1689 |
1690 | linkify-it@^5.0.0:
1691 | version "5.0.0"
1692 | resolved "https://registry.yarnpkg.com/linkify-it/-/linkify-it-5.0.0.tgz#9ef238bfa6dc70bd8e7f9572b52d369af569b421"
1693 | integrity sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==
1694 | dependencies:
1695 | uc.micro "^2.0.0"
1696 |
1697 | local-pkg@^0.5.0:
1698 | version "0.5.1"
1699 | resolved "https://registry.yarnpkg.com/local-pkg/-/local-pkg-0.5.1.tgz#69658638d2a95287534d4c2fff757980100dbb6d"
1700 | integrity sha512-9rrA30MRRP3gBD3HTGnC6cDFpaE1kVDWxWgqWJUN0RvDNAo+Nz/9GxB+nHOH0ifbVFy0hSA1V6vFDvnx54lTEQ==
1701 | dependencies:
1702 | mlly "^1.7.3"
1703 | pkg-types "^1.2.1"
1704 |
1705 | lodash.includes@^4.3.0:
1706 | version "4.3.0"
1707 | resolved "https://registry.yarnpkg.com/lodash.includes/-/lodash.includes-4.3.0.tgz#60bb98a87cb923c68ca1e51325483314849f553f"
1708 | integrity sha512-W3Bx6mdkRTGtlJISOvVD/lbqjTlPPUDTMnlXZFnVwi9NKJ6tiAk6LVdlhZMm17VZisqhKcgzpO5Wz91PCt5b0w==
1709 |
1710 | lodash.isboolean@^3.0.3:
1711 | version "3.0.3"
1712 | resolved "https://registry.yarnpkg.com/lodash.isboolean/-/lodash.isboolean-3.0.3.tgz#6c2e171db2a257cd96802fd43b01b20d5f5870f6"
1713 | integrity sha512-Bz5mupy2SVbPHURB98VAcw+aHh4vRV5IPNhILUCsOzRmsTmSQ17jIuqopAentWoehktxGd9e/hbIXq980/1QJg==
1714 |
1715 | lodash.isinteger@^4.0.4:
1716 | version "4.0.4"
1717 | resolved "https://registry.yarnpkg.com/lodash.isinteger/-/lodash.isinteger-4.0.4.tgz#619c0af3d03f8b04c31f5882840b77b11cd68343"
1718 | integrity sha512-DBwtEWN2caHQ9/imiNeEA5ys1JoRtRfY3d7V9wkqtbycnAmTvRRmbHKDV4a0EYc678/dia0jrte4tjYwVBaZUA==
1719 |
1720 | lodash.isnumber@^3.0.3:
1721 | version "3.0.3"
1722 | resolved "https://registry.yarnpkg.com/lodash.isnumber/-/lodash.isnumber-3.0.3.tgz#3ce76810c5928d03352301ac287317f11c0b1ffc"
1723 | integrity sha512-QYqzpfwO3/CWf3XP+Z+tkQsfaLL/EnUlXWVkIk5FUPc4sBdTehEqZONuyRt2P67PXAk+NXmTBcc97zw9t1FQrw==
1724 |
1725 | lodash.isplainobject@^4.0.6:
1726 | version "4.0.6"
1727 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
1728 | integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
1729 |
1730 | lodash.isstring@^4.0.1:
1731 | version "4.0.1"
1732 | resolved "https://registry.yarnpkg.com/lodash.isstring/-/lodash.isstring-4.0.1.tgz#d527dfb5456eca7cc9bb95d5daeaf88ba54a5451"
1733 | integrity sha512-0wJxfxH1wgO3GrbuP+dTTk7op+6L41QCXbGINEmD+ny/G/eCqGzxyCsh7159S+mgDDcoarnBw6PC1PS5+wUGgw==
1734 |
1735 | lodash.once@^4.0.0:
1736 | version "4.1.1"
1737 | resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac"
1738 | integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==
1739 |
1740 | loupe@^2.3.6, loupe@^2.3.7:
1741 | version "2.3.7"
1742 | resolved "https://registry.yarnpkg.com/loupe/-/loupe-2.3.7.tgz#6e69b7d4db7d3ab436328013d37d1c8c3540c697"
1743 | integrity sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==
1744 | dependencies:
1745 | get-func-name "^2.0.1"
1746 |
1747 | lru-cache@^11.0.0:
1748 | version "11.0.2"
1749 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.2.tgz#fbd8e7cf8211f5e7e5d91905c415a3f55755ca39"
1750 | integrity sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA==
1751 |
1752 | lru-cache@^6.0.0:
1753 | version "6.0.0"
1754 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
1755 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
1756 | dependencies:
1757 | yallist "^4.0.0"
1758 |
1759 | magic-string@^0.30.5:
1760 | version "0.30.17"
1761 | resolved "https://registry.yarnpkg.com/magic-string/-/magic-string-0.30.17.tgz#450a449673d2460e5bbcfba9a61916a1714c7453"
1762 | integrity sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==
1763 | dependencies:
1764 | "@jridgewell/sourcemap-codec" "^1.5.0"
1765 |
1766 | markdown-it@^14.1.0:
1767 | version "14.1.0"
1768 | resolved "https://registry.yarnpkg.com/markdown-it/-/markdown-it-14.1.0.tgz#3c3c5992883c633db4714ccb4d7b5935d98b7d45"
1769 | integrity sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==
1770 | dependencies:
1771 | argparse "^2.0.1"
1772 | entities "^4.4.0"
1773 | linkify-it "^5.0.0"
1774 | mdurl "^2.0.0"
1775 | punycode.js "^2.3.1"
1776 | uc.micro "^2.1.0"
1777 |
1778 | math-intrinsics@^1.1.0:
1779 | version "1.1.0"
1780 | resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9"
1781 | integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==
1782 |
1783 | mdurl@^2.0.0:
1784 | version "2.0.0"
1785 | resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-2.0.0.tgz#80676ec0433025dd3e17ee983d0fe8de5a2237e0"
1786 | integrity sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==
1787 |
1788 | merge-stream@^2.0.0:
1789 | version "2.0.0"
1790 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
1791 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
1792 |
1793 | merge2@^1.2.3, merge2@^1.3.0:
1794 | version "1.4.1"
1795 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1796 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1797 |
1798 | micromatch@^4.0.8:
1799 | version "4.0.8"
1800 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
1801 | integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
1802 | dependencies:
1803 | braces "^3.0.3"
1804 | picomatch "^2.3.1"
1805 |
1806 | mime-db@1.52.0:
1807 | version "1.52.0"
1808 | resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
1809 | integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==
1810 |
1811 | mime-types@^2.1.12:
1812 | version "2.1.35"
1813 | resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a"
1814 | integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==
1815 | dependencies:
1816 | mime-db "1.52.0"
1817 |
1818 | mime@^1.3.4:
1819 | version "1.6.0"
1820 | resolved "https://registry.yarnpkg.com/mime/-/mime-1.6.0.tgz#32cd9e5c64553bd58d19a568af452acff04981b1"
1821 | integrity sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==
1822 |
1823 | mimic-fn@^4.0.0:
1824 | version "4.0.0"
1825 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-4.0.0.tgz#60a90550d5cb0b239cca65d893b1a53b29871ecc"
1826 | integrity sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==
1827 |
1828 | mimic-response@^3.1.0:
1829 | version "3.1.0"
1830 | resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9"
1831 | integrity sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==
1832 |
1833 | minimatch@^10.0.0:
1834 | version "10.0.1"
1835 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-10.0.1.tgz#ce0521856b453c86e25f2c4c0d03e6ff7ddc440b"
1836 | integrity sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==
1837 | dependencies:
1838 | brace-expansion "^2.0.1"
1839 |
1840 | minimatch@^3.0.3, minimatch@^3.1.1:
1841 | version "3.1.2"
1842 | resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b"
1843 | integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==
1844 | dependencies:
1845 | brace-expansion "^1.1.7"
1846 |
1847 | minimist@^1.2.0, minimist@^1.2.3:
1848 | version "1.2.8"
1849 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
1850 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
1851 |
1852 | minipass@^7.1.2:
1853 | version "7.1.2"
1854 | resolved "https://registry.yarnpkg.com/minipass/-/minipass-7.1.2.tgz#93a9626ce5e5e66bd4db86849e7515e92340a707"
1855 | integrity sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==
1856 |
1857 | mkdirp-classic@^0.5.2, mkdirp-classic@^0.5.3:
1858 | version "0.5.3"
1859 | resolved "https://registry.yarnpkg.com/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz#fa10c9115cc6d8865be221ba47ee9bed78601113"
1860 | integrity sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==
1861 |
1862 | mlly@^1.7.3, mlly@^1.7.4:
1863 | version "1.7.4"
1864 | resolved "https://registry.yarnpkg.com/mlly/-/mlly-1.7.4.tgz#3d7295ea2358ec7a271eaa5d000a0f84febe100f"
1865 | integrity sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==
1866 | dependencies:
1867 | acorn "^8.14.0"
1868 | pathe "^2.0.1"
1869 | pkg-types "^1.3.0"
1870 | ufo "^1.5.4"
1871 |
1872 | ms@^2.1.1, ms@^2.1.3:
1873 | version "2.1.3"
1874 | resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
1875 | integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
1876 |
1877 | mute-stream@~0.0.4:
1878 | version "0.0.8"
1879 | resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d"
1880 | integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==
1881 |
1882 | nanoid@^3.3.8:
1883 | version "3.3.8"
1884 | resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.8.tgz#b1be3030bee36aaff18bacb375e5cce521684baf"
1885 | integrity sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==
1886 |
1887 | napi-build-utils@^2.0.0:
1888 | version "2.0.0"
1889 | resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e"
1890 | integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==
1891 |
1892 | node-abi@^3.3.0:
1893 | version "3.74.0"
1894 | resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.74.0.tgz#5bfb4424264eaeb91432d2adb9da23c63a301ed0"
1895 | integrity sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w==
1896 | dependencies:
1897 | semver "^7.3.5"
1898 |
1899 | node-addon-api@^4.3.0:
1900 | version "4.3.0"
1901 | resolved "https://registry.yarnpkg.com/node-addon-api/-/node-addon-api-4.3.0.tgz#52a1a0b475193e0928e98e0426a0d1254782b77f"
1902 | integrity sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==
1903 |
1904 | npm-run-path@^5.1.0:
1905 | version "5.3.0"
1906 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-5.3.0.tgz#e23353d0ebb9317f174e93417e4a4d82d0249e9f"
1907 | integrity sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==
1908 | dependencies:
1909 | path-key "^4.0.0"
1910 |
1911 | nth-check@^2.0.1:
1912 | version "2.1.1"
1913 | resolved "https://registry.yarnpkg.com/nth-check/-/nth-check-2.1.1.tgz#c9eab428effce36cd6b92c924bdb000ef1f1ed1d"
1914 | integrity sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==
1915 | dependencies:
1916 | boolbase "^1.0.0"
1917 |
1918 | object-inspect@^1.13.3:
1919 | version "1.13.4"
1920 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213"
1921 | integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==
1922 |
1923 | once@^1.3.0, once@^1.3.1, once@^1.4.0:
1924 | version "1.4.0"
1925 | resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
1926 | integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==
1927 | dependencies:
1928 | wrappy "1"
1929 |
1930 | onetime@^6.0.0:
1931 | version "6.0.0"
1932 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-6.0.0.tgz#7c24c18ed1fd2e9bca4bd26806a33613c77d34b4"
1933 | integrity sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==
1934 | dependencies:
1935 | mimic-fn "^4.0.0"
1936 |
1937 | open@^10.1.0:
1938 | version "10.1.0"
1939 | resolved "https://registry.yarnpkg.com/open/-/open-10.1.0.tgz#a7795e6e5d519abe4286d9937bb24b51122598e1"
1940 | integrity sha512-mnkeQ1qP5Ue2wd+aivTD3NHd/lZ96Lu0jgf0pwktLPtx6cTZiH7tyeGRRHs0zX0rbrahXPnXlUnbeXyaBBuIaw==
1941 | dependencies:
1942 | default-browser "^5.2.1"
1943 | define-lazy-prop "^3.0.0"
1944 | is-inside-container "^1.0.0"
1945 | is-wsl "^3.1.0"
1946 |
1947 | p-limit@^5.0.0:
1948 | version "5.0.0"
1949 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-5.0.0.tgz#6946d5b7140b649b7a33a027d89b4c625b3a5985"
1950 | integrity sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==
1951 | dependencies:
1952 | yocto-queue "^1.0.0"
1953 |
1954 | p-map@^3.0.0:
1955 | version "3.0.0"
1956 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d"
1957 | integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==
1958 | dependencies:
1959 | aggregate-error "^3.0.0"
1960 |
1961 | package-json-from-dist@^1.0.0:
1962 | version "1.0.1"
1963 | resolved "https://registry.yarnpkg.com/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz#4f1471a010827a86f94cfd9b0727e36d267de505"
1964 | integrity sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==
1965 |
1966 | parse-semver@^1.1.1:
1967 | version "1.1.1"
1968 | resolved "https://registry.yarnpkg.com/parse-semver/-/parse-semver-1.1.1.tgz#9a4afd6df063dc4826f93fba4a99cf223f666cb8"
1969 | integrity sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==
1970 | dependencies:
1971 | semver "^5.1.0"
1972 |
1973 | parse5-htmlparser2-tree-adapter@^7.0.0:
1974 | version "7.1.0"
1975 | resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz#b5a806548ed893a43e24ccb42fbb78069311e81b"
1976 | integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==
1977 | dependencies:
1978 | domhandler "^5.0.3"
1979 | parse5 "^7.0.0"
1980 |
1981 | parse5-parser-stream@^7.1.2:
1982 | version "7.1.2"
1983 | resolved "https://registry.yarnpkg.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz#d7c20eadc37968d272e2c02660fff92dd27e60e1"
1984 | integrity sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==
1985 | dependencies:
1986 | parse5 "^7.0.0"
1987 |
1988 | parse5@^7.0.0, parse5@^7.1.2:
1989 | version "7.2.1"
1990 | resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a"
1991 | integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==
1992 | dependencies:
1993 | entities "^4.5.0"
1994 |
1995 | path-is-absolute@^1.0.0:
1996 | version "1.0.1"
1997 | resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
1998 | integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==
1999 |
2000 | path-key@^3.1.0:
2001 | version "3.1.1"
2002 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
2003 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
2004 |
2005 | path-key@^4.0.0:
2006 | version "4.0.0"
2007 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-4.0.0.tgz#295588dc3aee64154f877adb9d780b81c554bf18"
2008 | integrity sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==
2009 |
2010 | path-parse@^1.0.7:
2011 | version "1.0.7"
2012 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
2013 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
2014 |
2015 | path-scurry@^2.0.0:
2016 | version "2.0.0"
2017 | resolved "https://registry.yarnpkg.com/path-scurry/-/path-scurry-2.0.0.tgz#9f052289f23ad8bf9397a2a0425e7b8615c58580"
2018 | integrity sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==
2019 | dependencies:
2020 | lru-cache "^11.0.0"
2021 | minipass "^7.1.2"
2022 |
2023 | path-type@^4.0.0:
2024 | version "4.0.0"
2025 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
2026 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
2027 |
2028 | pathe@^1.1.1:
2029 | version "1.1.2"
2030 | resolved "https://registry.yarnpkg.com/pathe/-/pathe-1.1.2.tgz#6c4cb47a945692e48a1ddd6e4094d170516437ec"
2031 | integrity sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==
2032 |
2033 | pathe@^2.0.1:
2034 | version "2.0.3"
2035 | resolved "https://registry.yarnpkg.com/pathe/-/pathe-2.0.3.tgz#3ecbec55421685b70a9da872b2cff3e1cbed1716"
2036 | integrity sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==
2037 |
2038 | pathval@^1.1.1:
2039 | version "1.1.1"
2040 | resolved "https://registry.yarnpkg.com/pathval/-/pathval-1.1.1.tgz#8534e77a77ce7ac5a2512ea21e0fdb8fcf6c3d8d"
2041 | integrity sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==
2042 |
2043 | pend@~1.2.0:
2044 | version "1.2.0"
2045 | resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50"
2046 | integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==
2047 |
2048 | picocolors@^1.0.0, picocolors@^1.1.1:
2049 | version "1.1.1"
2050 | resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b"
2051 | integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==
2052 |
2053 | picomatch@^2.3.1:
2054 | version "2.3.1"
2055 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
2056 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
2057 |
2058 | picomatch@^4.0.2:
2059 | version "4.0.2"
2060 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab"
2061 | integrity sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
2062 |
2063 | pkg-types@^1.2.1, pkg-types@^1.3.0:
2064 | version "1.3.1"
2065 | resolved "https://registry.yarnpkg.com/pkg-types/-/pkg-types-1.3.1.tgz#bd7cc70881192777eef5326c19deb46e890917df"
2066 | integrity sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==
2067 | dependencies:
2068 | confbox "^0.1.8"
2069 | mlly "^1.7.4"
2070 | pathe "^2.0.1"
2071 |
2072 | postcss@^8.4.43:
2073 | version "8.5.2"
2074 | resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.5.2.tgz#e7b99cb9d2ec3e8dd424002e7c16517cb2b846bd"
2075 | integrity sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==
2076 | dependencies:
2077 | nanoid "^3.3.8"
2078 | picocolors "^1.1.1"
2079 | source-map-js "^1.2.1"
2080 |
2081 | prebuild-install@^7.0.1:
2082 | version "7.1.3"
2083 | resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec"
2084 | integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==
2085 | dependencies:
2086 | detect-libc "^2.0.0"
2087 | expand-template "^2.0.3"
2088 | github-from-package "0.0.0"
2089 | minimist "^1.2.3"
2090 | mkdirp-classic "^0.5.3"
2091 | napi-build-utils "^2.0.0"
2092 | node-abi "^3.3.0"
2093 | pump "^3.0.0"
2094 | rc "^1.2.7"
2095 | simple-get "^4.0.0"
2096 | tar-fs "^2.0.0"
2097 | tunnel-agent "^0.6.0"
2098 |
2099 | pretty-format@^29.7.0:
2100 | version "29.7.0"
2101 | resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.7.0.tgz#ca42c758310f365bfa71a0bda0a807160b776812"
2102 | integrity sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==
2103 | dependencies:
2104 | "@jest/schemas" "^29.6.3"
2105 | ansi-styles "^5.0.0"
2106 | react-is "^18.0.0"
2107 |
2108 | pump@^3.0.0:
2109 | version "3.0.2"
2110 | resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8"
2111 | integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==
2112 | dependencies:
2113 | end-of-stream "^1.1.0"
2114 | once "^1.3.1"
2115 |
2116 | punycode.js@^2.3.1:
2117 | version "2.3.1"
2118 | resolved "https://registry.yarnpkg.com/punycode.js/-/punycode.js-2.3.1.tgz#6b53e56ad75588234e79f4affa90972c7dd8cdb7"
2119 | integrity sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==
2120 |
2121 | qs@^6.9.1:
2122 | version "6.14.0"
2123 | resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930"
2124 | integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w==
2125 | dependencies:
2126 | side-channel "^1.1.0"
2127 |
2128 | queue-microtask@^1.2.2:
2129 | version "1.2.3"
2130 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
2131 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
2132 |
2133 | rc@^1.2.7:
2134 | version "1.2.8"
2135 | resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed"
2136 | integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==
2137 | dependencies:
2138 | deep-extend "^0.6.0"
2139 | ini "~1.3.0"
2140 | minimist "^1.2.0"
2141 | strip-json-comments "~2.0.1"
2142 |
2143 | react-is@^18.0.0:
2144 | version "18.3.1"
2145 | resolved "https://registry.yarnpkg.com/react-is/-/react-is-18.3.1.tgz#e83557dc12eae63a99e003a46388b1dcbb44db7e"
2146 | integrity sha512-/LLMVyas0ljjAtoYiPqYiL8VWXzUUdThrmU5+n20DZv+a+ClRoevUzw5JxU+Ieh5/c87ytoTBV9G1FiKfNJdmg==
2147 |
2148 | read@^1.0.7:
2149 | version "1.0.7"
2150 | resolved "https://registry.yarnpkg.com/read/-/read-1.0.7.tgz#b3da19bd052431a97671d44a42634adf710b40c4"
2151 | integrity sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==
2152 | dependencies:
2153 | mute-stream "~0.0.4"
2154 |
2155 | readable-stream@^3.1.1, readable-stream@^3.4.0:
2156 | version "3.6.2"
2157 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
2158 | integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
2159 | dependencies:
2160 | inherits "^2.0.3"
2161 | string_decoder "^1.1.1"
2162 | util-deprecate "^1.0.1"
2163 |
2164 | resolve@^1.22.1:
2165 | version "1.22.10"
2166 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39"
2167 | integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w==
2168 | dependencies:
2169 | is-core-module "^2.16.0"
2170 | path-parse "^1.0.7"
2171 | supports-preserve-symlinks-flag "^1.0.0"
2172 |
2173 | reusify@^1.0.4:
2174 | version "1.0.4"
2175 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
2176 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
2177 |
2178 | rimraf@^3.0.0:
2179 | version "3.0.2"
2180 | resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a"
2181 | integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==
2182 | dependencies:
2183 | glob "^7.1.3"
2184 |
2185 | rollup-plugin-copy@3.5.0:
2186 | version "3.5.0"
2187 | resolved "https://registry.yarnpkg.com/rollup-plugin-copy/-/rollup-plugin-copy-3.5.0.tgz#7ffa2a7a8303e143876fa64fb5eed9022d304eeb"
2188 | integrity sha512-wI8D5dvYovRMx/YYKtUNt3Yxaw4ORC9xo6Gt9t22kveWz1enG9QrhVlagzwrxSC455xD1dHMKhIJkbsQ7d48BA==
2189 | dependencies:
2190 | "@types/fs-extra" "^8.0.1"
2191 | colorette "^1.1.0"
2192 | fs-extra "^8.1.0"
2193 | globby "10.0.1"
2194 | is-plain-object "^3.0.0"
2195 |
2196 | rollup-plugin-delete@2.0.0:
2197 | version "2.0.0"
2198 | resolved "https://registry.yarnpkg.com/rollup-plugin-delete/-/rollup-plugin-delete-2.0.0.tgz#262acf80660d48c3b167fb0baabd0c3ab985c153"
2199 | integrity sha512-/VpLMtDy+8wwRlDANuYmDa9ss/knGsAgrDhM+tEwB1npHwNu4DYNmDfUL55csse/GHs9Q+SMT/rw9uiaZ3pnzA==
2200 | dependencies:
2201 | del "^5.1.0"
2202 |
2203 | rollup@4.22.4:
2204 | version "4.22.4"
2205 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.22.4.tgz#4135a6446671cd2a2453e1ad42a45d5973ec3a0f"
2206 | integrity sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==
2207 | dependencies:
2208 | "@types/estree" "1.0.5"
2209 | optionalDependencies:
2210 | "@rollup/rollup-android-arm-eabi" "4.22.4"
2211 | "@rollup/rollup-android-arm64" "4.22.4"
2212 | "@rollup/rollup-darwin-arm64" "4.22.4"
2213 | "@rollup/rollup-darwin-x64" "4.22.4"
2214 | "@rollup/rollup-linux-arm-gnueabihf" "4.22.4"
2215 | "@rollup/rollup-linux-arm-musleabihf" "4.22.4"
2216 | "@rollup/rollup-linux-arm64-gnu" "4.22.4"
2217 | "@rollup/rollup-linux-arm64-musl" "4.22.4"
2218 | "@rollup/rollup-linux-powerpc64le-gnu" "4.22.4"
2219 | "@rollup/rollup-linux-riscv64-gnu" "4.22.4"
2220 | "@rollup/rollup-linux-s390x-gnu" "4.22.4"
2221 | "@rollup/rollup-linux-x64-gnu" "4.22.4"
2222 | "@rollup/rollup-linux-x64-musl" "4.22.4"
2223 | "@rollup/rollup-win32-arm64-msvc" "4.22.4"
2224 | "@rollup/rollup-win32-ia32-msvc" "4.22.4"
2225 | "@rollup/rollup-win32-x64-msvc" "4.22.4"
2226 | fsevents "~2.3.2"
2227 |
2228 | rollup@^4.20.0:
2229 | version "4.34.8"
2230 | resolved "https://registry.yarnpkg.com/rollup/-/rollup-4.34.8.tgz#e859c1a51d899aba9bcf451d4eed1d11fb8e2a6e"
2231 | integrity sha512-489gTVMzAYdiZHFVA/ig/iYFllCcWFHMvUHI1rpFmkoUtRlQxqh6/yiNqnYibjMZ2b/+FUQwldG+aLsEt6bglQ==
2232 | dependencies:
2233 | "@types/estree" "1.0.6"
2234 | optionalDependencies:
2235 | "@rollup/rollup-android-arm-eabi" "4.34.8"
2236 | "@rollup/rollup-android-arm64" "4.34.8"
2237 | "@rollup/rollup-darwin-arm64" "4.34.8"
2238 | "@rollup/rollup-darwin-x64" "4.34.8"
2239 | "@rollup/rollup-freebsd-arm64" "4.34.8"
2240 | "@rollup/rollup-freebsd-x64" "4.34.8"
2241 | "@rollup/rollup-linux-arm-gnueabihf" "4.34.8"
2242 | "@rollup/rollup-linux-arm-musleabihf" "4.34.8"
2243 | "@rollup/rollup-linux-arm64-gnu" "4.34.8"
2244 | "@rollup/rollup-linux-arm64-musl" "4.34.8"
2245 | "@rollup/rollup-linux-loongarch64-gnu" "4.34.8"
2246 | "@rollup/rollup-linux-powerpc64le-gnu" "4.34.8"
2247 | "@rollup/rollup-linux-riscv64-gnu" "4.34.8"
2248 | "@rollup/rollup-linux-s390x-gnu" "4.34.8"
2249 | "@rollup/rollup-linux-x64-gnu" "4.34.8"
2250 | "@rollup/rollup-linux-x64-musl" "4.34.8"
2251 | "@rollup/rollup-win32-arm64-msvc" "4.34.8"
2252 | "@rollup/rollup-win32-ia32-msvc" "4.34.8"
2253 | "@rollup/rollup-win32-x64-msvc" "4.34.8"
2254 | fsevents "~2.3.2"
2255 |
2256 | run-applescript@^7.0.0:
2257 | version "7.0.0"
2258 | resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb"
2259 | integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A==
2260 |
2261 | run-parallel@^1.1.9:
2262 | version "1.2.0"
2263 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
2264 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
2265 | dependencies:
2266 | queue-microtask "^1.2.2"
2267 |
2268 | safe-buffer@^5.0.1, safe-buffer@~5.2.0:
2269 | version "5.2.1"
2270 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
2271 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
2272 |
2273 | "safer-buffer@>= 2.1.2 < 3.0.0":
2274 | version "2.1.2"
2275 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
2276 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
2277 |
2278 | sax@>=0.6.0:
2279 | version "1.4.1"
2280 | resolved "https://registry.yarnpkg.com/sax/-/sax-1.4.1.tgz#44cc8988377f126304d3b3fc1010c733b929ef0f"
2281 | integrity sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==
2282 |
2283 | semver@^5.1.0:
2284 | version "5.7.2"
2285 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
2286 | integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
2287 |
2288 | semver@^7.3.5, semver@^7.5.2, semver@^7.5.4:
2289 | version "7.7.1"
2290 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f"
2291 | integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==
2292 |
2293 | shebang-command@^2.0.0:
2294 | version "2.0.0"
2295 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
2296 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
2297 | dependencies:
2298 | shebang-regex "^3.0.0"
2299 |
2300 | shebang-regex@^3.0.0:
2301 | version "3.0.0"
2302 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
2303 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
2304 |
2305 | side-channel-list@^1.0.0:
2306 | version "1.0.0"
2307 | resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad"
2308 | integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==
2309 | dependencies:
2310 | es-errors "^1.3.0"
2311 | object-inspect "^1.13.3"
2312 |
2313 | side-channel-map@^1.0.1:
2314 | version "1.0.1"
2315 | resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42"
2316 | integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==
2317 | dependencies:
2318 | call-bound "^1.0.2"
2319 | es-errors "^1.3.0"
2320 | get-intrinsic "^1.2.5"
2321 | object-inspect "^1.13.3"
2322 |
2323 | side-channel-weakmap@^1.0.2:
2324 | version "1.0.2"
2325 | resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea"
2326 | integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==
2327 | dependencies:
2328 | call-bound "^1.0.2"
2329 | es-errors "^1.3.0"
2330 | get-intrinsic "^1.2.5"
2331 | object-inspect "^1.13.3"
2332 | side-channel-map "^1.0.1"
2333 |
2334 | side-channel@^1.1.0:
2335 | version "1.1.0"
2336 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9"
2337 | integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==
2338 | dependencies:
2339 | es-errors "^1.3.0"
2340 | object-inspect "^1.13.3"
2341 | side-channel-list "^1.0.0"
2342 | side-channel-map "^1.0.1"
2343 | side-channel-weakmap "^1.0.2"
2344 |
2345 | siginfo@^2.0.0:
2346 | version "2.0.0"
2347 | resolved "https://registry.yarnpkg.com/siginfo/-/siginfo-2.0.0.tgz#32e76c70b79724e3bb567cb9d543eb858ccfaf30"
2348 | integrity sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==
2349 |
2350 | signal-exit@^4.0.1, signal-exit@^4.1.0:
2351 | version "4.1.0"
2352 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04"
2353 | integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==
2354 |
2355 | simple-concat@^1.0.0:
2356 | version "1.0.1"
2357 | resolved "https://registry.yarnpkg.com/simple-concat/-/simple-concat-1.0.1.tgz#f46976082ba35c2263f1c8ab5edfe26c41c9552f"
2358 | integrity sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==
2359 |
2360 | simple-get@^4.0.0:
2361 | version "4.0.1"
2362 | resolved "https://registry.yarnpkg.com/simple-get/-/simple-get-4.0.1.tgz#4a39db549287c979d352112fa03fd99fd6bc3543"
2363 | integrity sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==
2364 | dependencies:
2365 | decompress-response "^6.0.0"
2366 | once "^1.3.1"
2367 | simple-concat "^1.0.0"
2368 |
2369 | slash@^3.0.0:
2370 | version "3.0.0"
2371 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
2372 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
2373 |
2374 | source-map-js@^1.2.1:
2375 | version "1.2.1"
2376 | resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.2.1.tgz#1ce5650fddd87abc099eda37dcff024c2667ae46"
2377 | integrity sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==
2378 |
2379 | stackback@0.0.2:
2380 | version "0.0.2"
2381 | resolved "https://registry.yarnpkg.com/stackback/-/stackback-0.0.2.tgz#1ac8a0d9483848d1695e418b6d031a3c3ce68e3b"
2382 | integrity sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==
2383 |
2384 | std-env@^3.5.0:
2385 | version "3.8.0"
2386 | resolved "https://registry.yarnpkg.com/std-env/-/std-env-3.8.0.tgz#b56ffc1baf1a29dcc80a3bdf11d7fca7c315e7d5"
2387 | integrity sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==
2388 |
2389 | stoppable@^1.1.0:
2390 | version "1.1.0"
2391 | resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b"
2392 | integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw==
2393 |
2394 | "string-width-cjs@npm:string-width@^4.2.0":
2395 | version "4.2.3"
2396 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
2397 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
2398 | dependencies:
2399 | emoji-regex "^8.0.0"
2400 | is-fullwidth-code-point "^3.0.0"
2401 | strip-ansi "^6.0.1"
2402 |
2403 | string-width@^4.1.0:
2404 | version "4.2.3"
2405 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
2406 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
2407 | dependencies:
2408 | emoji-regex "^8.0.0"
2409 | is-fullwidth-code-point "^3.0.0"
2410 | strip-ansi "^6.0.1"
2411 |
2412 | string-width@^5.0.1, string-width@^5.1.2:
2413 | version "5.1.2"
2414 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-5.1.2.tgz#14f8daec6d81e7221d2a357e668cab73bdbca794"
2415 | integrity sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==
2416 | dependencies:
2417 | eastasianwidth "^0.2.0"
2418 | emoji-regex "^9.2.2"
2419 | strip-ansi "^7.0.1"
2420 |
2421 | string_decoder@^1.1.1:
2422 | version "1.3.0"
2423 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
2424 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
2425 | dependencies:
2426 | safe-buffer "~5.2.0"
2427 |
2428 | "strip-ansi-cjs@npm:strip-ansi@^6.0.1":
2429 | version "6.0.1"
2430 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
2431 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
2432 | dependencies:
2433 | ansi-regex "^5.0.1"
2434 |
2435 | strip-ansi@^6.0.0, strip-ansi@^6.0.1:
2436 | version "6.0.1"
2437 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
2438 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
2439 | dependencies:
2440 | ansi-regex "^5.0.1"
2441 |
2442 | strip-ansi@^7.0.1:
2443 | version "7.1.0"
2444 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-7.1.0.tgz#d5b6568ca689d8561370b0707685d22434faff45"
2445 | integrity sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==
2446 | dependencies:
2447 | ansi-regex "^6.0.1"
2448 |
2449 | strip-final-newline@^3.0.0:
2450 | version "3.0.0"
2451 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-3.0.0.tgz#52894c313fbff318835280aed60ff71ebf12b8fd"
2452 | integrity sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==
2453 |
2454 | strip-json-comments@~2.0.1:
2455 | version "2.0.1"
2456 | resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a"
2457 | integrity sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==
2458 |
2459 | strip-literal@^2.0.0:
2460 | version "2.1.1"
2461 | resolved "https://registry.yarnpkg.com/strip-literal/-/strip-literal-2.1.1.tgz#26906e65f606d49f748454a08084e94190c2e5ad"
2462 | integrity sha512-631UJ6O00eNGfMiWG78ck80dfBab8X6IVFB51jZK5Icd7XAs60Z5y7QdSd/wGIklnWvRbUNloVzhOKKmutxQ6Q==
2463 | dependencies:
2464 | js-tokens "^9.0.1"
2465 |
2466 | supports-color@^5.3.0:
2467 | version "5.5.0"
2468 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
2469 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
2470 | dependencies:
2471 | has-flag "^3.0.0"
2472 |
2473 | supports-preserve-symlinks-flag@^1.0.0:
2474 | version "1.0.0"
2475 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
2476 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
2477 |
2478 | tar-fs@^2.0.0:
2479 | version "2.1.4"
2480 | resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.4.tgz#800824dbf4ef06ded9afea4acafe71c67c76b930"
2481 | integrity sha512-mDAjwmZdh7LTT6pNleZ05Yt65HC3E+NiQzl672vQG38jIrehtJk/J3mNwIg+vShQPcLF/LV7CMnDW6vjj6sfYQ==
2482 | dependencies:
2483 | chownr "^1.1.1"
2484 | mkdirp-classic "^0.5.2"
2485 | pump "^3.0.0"
2486 | tar-stream "^2.1.4"
2487 |
2488 | tar-stream@^2.1.4:
2489 | version "2.2.0"
2490 | resolved "https://registry.yarnpkg.com/tar-stream/-/tar-stream-2.2.0.tgz#acad84c284136b060dc3faa64474aa9aebd77287"
2491 | integrity sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==
2492 | dependencies:
2493 | bl "^4.0.3"
2494 | end-of-stream "^1.4.1"
2495 | fs-constants "^1.0.0"
2496 | inherits "^2.0.3"
2497 | readable-stream "^3.1.1"
2498 |
2499 | tinybench@^2.5.1:
2500 | version "2.9.0"
2501 | resolved "https://registry.yarnpkg.com/tinybench/-/tinybench-2.9.0.tgz#103c9f8ba6d7237a47ab6dd1dcff77251863426b"
2502 | integrity sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==
2503 |
2504 | tinypool@^0.8.3:
2505 | version "0.8.4"
2506 | resolved "https://registry.yarnpkg.com/tinypool/-/tinypool-0.8.4.tgz#e217fe1270d941b39e98c625dcecebb1408c9aa8"
2507 | integrity sha512-i11VH5gS6IFeLY3gMBQ00/MmLncVP7JLXOw1vlgkytLmJK7QnEr7NXf0LBdxfmNPAeyetukOk0bOYrJrFGjYJQ==
2508 |
2509 | tinyspy@^2.2.0:
2510 | version "2.2.1"
2511 | resolved "https://registry.yarnpkg.com/tinyspy/-/tinyspy-2.2.1.tgz#117b2342f1f38a0dbdcc73a50a454883adf861d1"
2512 | integrity sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==
2513 |
2514 | tmp@^0.2.3:
2515 | version "0.2.5"
2516 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.5.tgz#b06bcd23f0f3c8357b426891726d16015abfd8f8"
2517 | integrity sha512-voyz6MApa1rQGUxT3E+BK7/ROe8itEx7vD8/HEvt4xwXucvQ5G5oeEiHkmHZJuBO21RpOf+YYm9MOivj709jow==
2518 |
2519 | to-regex-range@^5.0.1:
2520 | version "5.0.1"
2521 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
2522 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
2523 | dependencies:
2524 | is-number "^7.0.0"
2525 |
2526 | tslib@^2.2.0, tslib@^2.6.2:
2527 | version "2.8.1"
2528 | resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f"
2529 | integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==
2530 |
2531 | tunnel-agent@^0.6.0:
2532 | version "0.6.0"
2533 | resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd"
2534 | integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==
2535 | dependencies:
2536 | safe-buffer "^5.0.1"
2537 |
2538 | tunnel@0.0.6:
2539 | version "0.0.6"
2540 | resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c"
2541 | integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==
2542 |
2543 | type-detect@^4.0.0, type-detect@^4.1.0:
2544 | version "4.1.0"
2545 | resolved "https://registry.yarnpkg.com/type-detect/-/type-detect-4.1.0.tgz#deb2453e8f08dcae7ae98c626b13dddb0155906c"
2546 | integrity sha512-Acylog8/luQ8L7il+geoSxhEkazvkslg7PSNKOX59mbB9cOveP5aq9h74Y7YU8yDpJwetzQQrfIwtf4Wp4LKcw==
2547 |
2548 | typed-rest-client@^1.8.4:
2549 | version "1.8.11"
2550 | resolved "https://registry.yarnpkg.com/typed-rest-client/-/typed-rest-client-1.8.11.tgz#6906f02e3c91e8d851579f255abf0fd60800a04d"
2551 | integrity sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==
2552 | dependencies:
2553 | qs "^6.9.1"
2554 | tunnel "0.0.6"
2555 | underscore "^1.12.1"
2556 |
2557 | typescript@^5.5.2:
2558 | version "5.7.3"
2559 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.7.3.tgz#919b44a7dbb8583a9b856d162be24a54bf80073e"
2560 | integrity sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==
2561 |
2562 | uc.micro@^2.0.0, uc.micro@^2.1.0:
2563 | version "2.1.0"
2564 | resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-2.1.0.tgz#f8d3f7d0ec4c3dea35a7e3c8efa4cb8b45c9e7ee"
2565 | integrity sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==
2566 |
2567 | ufo@^1.5.4:
2568 | version "1.5.4"
2569 | resolved "https://registry.yarnpkg.com/ufo/-/ufo-1.5.4.tgz#16d6949674ca0c9e0fbbae1fa20a71d7b1ded754"
2570 | integrity sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==
2571 |
2572 | underscore@^1.12.1:
2573 | version "1.13.7"
2574 | resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10"
2575 | integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g==
2576 |
2577 | undici-types@~6.19.2:
2578 | version "6.19.8"
2579 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.19.8.tgz#35111c9d1437ab83a7cdc0abae2f26d88eda0a02"
2580 | integrity sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==
2581 |
2582 | undici-types@~6.20.0:
2583 | version "6.20.0"
2584 | resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.20.0.tgz#8171bf22c1f588d1554d55bf204bc624af388433"
2585 | integrity sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==
2586 |
2587 | undici@^6.19.5:
2588 | version "6.21.1"
2589 | resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.1.tgz#336025a14162e6837e44ad7b819b35b6c6af0e05"
2590 | integrity sha512-q/1rj5D0/zayJB2FraXdaWxbhWiNKDvu8naDT2dl1yTlvJp4BLtOcp2a5BvgGNQpYYJzau7tf1WgKv3b+7mqpQ==
2591 |
2592 | universalify@^0.1.0:
2593 | version "0.1.2"
2594 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
2595 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
2596 |
2597 | url-join@^4.0.1:
2598 | version "4.0.1"
2599 | resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7"
2600 | integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==
2601 |
2602 | util-deprecate@^1.0.1:
2603 | version "1.0.2"
2604 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
2605 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
2606 |
2607 | uuid@^8.3.0:
2608 | version "8.3.2"
2609 | resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2"
2610 | integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==
2611 |
2612 | vite-node@1.6.1:
2613 | version "1.6.1"
2614 | resolved "https://registry.yarnpkg.com/vite-node/-/vite-node-1.6.1.tgz#fff3ef309296ea03ceaa6ca4bb660922f5416c57"
2615 | integrity sha512-YAXkfvGtuTzwWbDSACdJSg4A4DZiAqckWe90Zapc/sEX3XvHcw1NdurM/6od8J207tSDqNbSsgdCacBgvJKFuA==
2616 | dependencies:
2617 | cac "^6.7.14"
2618 | debug "^4.3.4"
2619 | pathe "^1.1.1"
2620 | picocolors "^1.0.0"
2621 | vite "^5.0.0"
2622 |
2623 | vite@^5.0.0:
2624 | version "5.4.21"
2625 | resolved "https://registry.yarnpkg.com/vite/-/vite-5.4.21.tgz#84a4f7c5d860b071676d39ba513c0d598fdc7027"
2626 | integrity sha512-o5a9xKjbtuhY6Bi5S3+HvbRERmouabWbyUcpXXUA1u+GNUKoROi9byOJ8M0nHbHYHkYICiMlqxkg1KkYmm25Sw==
2627 | dependencies:
2628 | esbuild "^0.21.3"
2629 | postcss "^8.4.43"
2630 | rollup "^4.20.0"
2631 | optionalDependencies:
2632 | fsevents "~2.3.3"
2633 |
2634 | vitest@^1.6.0:
2635 | version "1.6.1"
2636 | resolved "https://registry.yarnpkg.com/vitest/-/vitest-1.6.1.tgz#b4a3097adf8f79ac18bc2e2e0024c534a7a78d2f"
2637 | integrity sha512-Ljb1cnSJSivGN0LqXd/zmDbWEM0RNNg2t1QW/XUhYl/qPqyu7CsqeWtqQXHVaJsecLPuDoak2oJcZN2QoRIOag==
2638 | dependencies:
2639 | "@vitest/expect" "1.6.1"
2640 | "@vitest/runner" "1.6.1"
2641 | "@vitest/snapshot" "1.6.1"
2642 | "@vitest/spy" "1.6.1"
2643 | "@vitest/utils" "1.6.1"
2644 | acorn-walk "^8.3.2"
2645 | chai "^4.3.10"
2646 | debug "^4.3.4"
2647 | execa "^8.0.1"
2648 | local-pkg "^0.5.0"
2649 | magic-string "^0.30.5"
2650 | pathe "^1.1.1"
2651 | picocolors "^1.0.0"
2652 | std-env "^3.5.0"
2653 | strip-literal "^2.0.0"
2654 | tinybench "^2.5.1"
2655 | tinypool "^0.8.3"
2656 | vite "^5.0.0"
2657 | vite-node "1.6.1"
2658 | why-is-node-running "^2.2.2"
2659 |
2660 | whatwg-encoding@^3.1.1:
2661 | version "3.1.1"
2662 | resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5"
2663 | integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==
2664 | dependencies:
2665 | iconv-lite "0.6.3"
2666 |
2667 | whatwg-mimetype@^4.0.0:
2668 | version "4.0.0"
2669 | resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a"
2670 | integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==
2671 |
2672 | which@^2.0.1:
2673 | version "2.0.2"
2674 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
2675 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
2676 | dependencies:
2677 | isexe "^2.0.0"
2678 |
2679 | why-is-node-running@^2.2.2:
2680 | version "2.3.0"
2681 | resolved "https://registry.yarnpkg.com/why-is-node-running/-/why-is-node-running-2.3.0.tgz#a3f69a97107f494b3cdc3bdddd883a7d65cebf04"
2682 | integrity sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==
2683 | dependencies:
2684 | siginfo "^2.0.0"
2685 | stackback "0.0.2"
2686 |
2687 | "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0":
2688 | version "7.0.0"
2689 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
2690 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
2691 | dependencies:
2692 | ansi-styles "^4.0.0"
2693 | string-width "^4.1.0"
2694 | strip-ansi "^6.0.0"
2695 |
2696 | wrap-ansi@^8.1.0:
2697 | version "8.1.0"
2698 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-8.1.0.tgz#56dc22368ee570face1b49819975d9b9a5ead214"
2699 | integrity sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==
2700 | dependencies:
2701 | ansi-styles "^6.1.0"
2702 | string-width "^5.0.1"
2703 | strip-ansi "^7.0.1"
2704 |
2705 | wrappy@1:
2706 | version "1.0.2"
2707 | resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
2708 | integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==
2709 |
2710 | xml2js@^0.5.0:
2711 | version "0.5.0"
2712 | resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7"
2713 | integrity sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==
2714 | dependencies:
2715 | sax ">=0.6.0"
2716 | xmlbuilder "~11.0.0"
2717 |
2718 | xmlbuilder@~11.0.0:
2719 | version "11.0.1"
2720 | resolved "https://registry.yarnpkg.com/xmlbuilder/-/xmlbuilder-11.0.1.tgz#be9bae1c8a046e76b31127726347d0ad7002beb3"
2721 | integrity sha512-fDlsI/kFEx7gLvbecc0/ohLG50fugQp8ryHzMTuW9vSa1GJ0XYWKnhsUx7oie3G98+r56aTQIUB4kht42R3JvA==
2722 |
2723 | yallist@^4.0.0:
2724 | version "4.0.0"
2725 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
2726 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
2727 |
2728 | yauzl@^2.3.1:
2729 | version "2.10.0"
2730 | resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
2731 | integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g==
2732 | dependencies:
2733 | buffer-crc32 "~0.2.3"
2734 | fd-slicer "~1.1.0"
2735 |
2736 | yazl@^2.2.2:
2737 | version "2.5.1"
2738 | resolved "https://registry.yarnpkg.com/yazl/-/yazl-2.5.1.tgz#a3d65d3dd659a5b0937850e8609f22fffa2b5c35"
2739 | integrity sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==
2740 | dependencies:
2741 | buffer-crc32 "~0.2.3"
2742 |
2743 | yocto-queue@^1.0.0:
2744 | version "1.1.1"
2745 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-1.1.1.tgz#fef65ce3ac9f8a32ceac5a634f74e17e5b232110"
2746 | integrity sha512-b4JR1PFR10y1mKjhHY9LaGo6tmrgjit7hxVIeAmyMw3jegXR4dhYqLaQF5zMXZxY7tLpMyJeLjr1C4rLmkVe8g==
2747 |
--------------------------------------------------------------------------------