diff --git a/.vscode/tasks.json b/.vscode/tasks.json index 4061542e..6b19c674 100644 --- a/.vscode/tasks.json +++ b/.vscode/tasks.json @@ -7,7 +7,8 @@ "label": "watch", "dependsOn": [ "plugin:watch:esbuild", - "watch:esbuild" + "ext:watch:esbuild", + "rpc:watch:esbuild" ], "presentation": { "reveal": "never" @@ -18,14 +19,32 @@ } }, { - "label": "watch:esbuild", + "label": "ext:watch:esbuild", "type": "shell", "command": "yarn", "args": [ "workspace", "ng-helper", "run", - "watch:esbuild" + "watch:esbuild:ext" + ], + "group": "build", + "problemMatcher": "$esbuild-watch", + "isBackground": true, + "presentation": { + "group": "watch", + "reveal": "never" + } + }, + { + "label": "rpc:watch:esbuild", + "type": "shell", + "command": "yarn", + "args": [ + "workspace", + "ng-helper", + "run", + "watch:esbuild:rpc" ], "group": "build", "problemMatcher": "$esbuild-watch", diff --git a/package.json b/package.json index c8493f65..24c5cadc 100644 --- a/package.json +++ b/package.json @@ -29,7 +29,7 @@ "eslint-plugin-unused-imports": "^3.2.0", "npm-run-all": "^4.1.5", "prettier": "^3.3.2", - "typescript": "~5.4.5" + "typescript": "~5.5.4" }, "engines": { "node": ">=18.*" diff --git a/packages/ng-helper-vscode/package.json b/packages/ng-helper-vscode/package.json index 11b12970..15fd51b6 100644 --- a/packages/ng-helper-vscode/package.json +++ b/packages/ng-helper-vscode/package.json @@ -115,9 +115,12 @@ "plugin:compile": "cd ../typescript-plugin && yarn compile", "plugin:compile:e2e": "cd ../typescript-plugin && yarn compile:e2e", "plugin:clean": "node scripts/resolver.js --clean", - "compile": "yarn tsc && yarn lint && node esbuild.js --production", - "compile:e2e": "yarn plugin:compile:e2e && node esbuild.js", - "watch:esbuild": "yarn plugin:clean && node esbuild.js --watch", + "compile": "yarn compile:ext && yarn compile:rpc", + "compile:ext": "yarn tsc && yarn lint && node scripts/esbuild-ext.js --production", + "compile:rpc": "yarn tsc && yarn lint && node scripts/esbuild-rpc.js --production", + "compile:e2e": "yarn plugin:compile:e2e && node scripts/esbuild-ext.js && node scripts/esbuild-rpc.js", + "watch:esbuild:ext": "yarn plugin:clean && node scripts/esbuild-ext.js --watch", + "watch:esbuild:rpc": "node scripts/esbuild-rpc.js --watch", "tsc": "tsc --noEmit", "lint": "eslint src --ext ts", "test:e2e:u": "cross-env UPDATE_SNAPSHOT=1 yarn test:e2e", @@ -132,7 +135,9 @@ "axios": "^1.7.2", "change-case": "^5.4.4", "fuzzysort": "^3.0.2", - "get-port": "^6.1.2" + "get-port": "^6.1.2", + "ws": "^7.5.10", + "zod": "^3.24.2" }, "devDependencies": { "@types/chai": "^5.0.1", @@ -140,6 +145,7 @@ "@types/mocha": "^10.0.9", "@types/node": "18.x", "@types/vscode": "^1.80.0", + "@types/ws": "^7.4.7", "@typescript-eslint/eslint-plugin": "^7.11.0", "@typescript-eslint/parser": "^7.11.0", "@vscode/test-electron": "^2.4.1", @@ -154,6 +160,6 @@ "mocha": "^10.8.2", "mocha-chai-jest-snapshot": "^1.1.6", "npm-run-all": "^4.1.5", - "typescript": "~5.4.5" + "typescript": "~5.5.4" } } diff --git a/packages/ng-helper-vscode/esbuild.js b/packages/ng-helper-vscode/scripts/esbuild-ext.js similarity index 100% rename from packages/ng-helper-vscode/esbuild.js rename to packages/ng-helper-vscode/scripts/esbuild-ext.js diff --git a/packages/ng-helper-vscode/scripts/esbuild-rpc.js b/packages/ng-helper-vscode/scripts/esbuild-rpc.js new file mode 100644 index 00000000..e0e06717 --- /dev/null +++ b/packages/ng-helper-vscode/scripts/esbuild-rpc.js @@ -0,0 +1,56 @@ +/* eslint-disable no-undef */ +// eslint-disable-next-line @typescript-eslint/no-var-requires +const esbuild = require('esbuild'); + +const production = process.argv.includes('--production'); +const watch = process.argv.includes('--watch'); + +/** + * @type {import('esbuild').Plugin} + */ +const esbuildProblemMatcherPlugin = { + name: 'esbuild-problem-matcher', + + setup(build) { + build.onStart(() => { + // [watch] 这个不能删除,会影响 $esbuild-watch 的工作 + console.log('[watch] build started'); + }); + build.onEnd((result) => { + result.errors.forEach(({ text, location }) => { + console.error(`✘ [ERROR] ${text}`); + console.error(` ${location.file}:${location.line}:${location.column}:`); + }); + // [watch] 这个不能删除,会影响 $esbuild-watch 的工作 + console.log('[watch] build finished'); + }); + }, +}; + +async function main() { + const ctx = await esbuild.context({ + entryPoints: ['src/service/rpcServer/rpcProcess.ts'], + bundle: true, + platform: 'node', + minify: production, + sourcemap: !production, + sourcesContent: false, + outfile: 'dist/ng-helper-rpc-server.js', + logLevel: 'silent', + plugins: [ + /* add to the end of plugins array */ + esbuildProblemMatcherPlugin, + ], + }); + if (watch) { + await ctx.watch(); + } else { + await ctx.rebuild(); + await ctx.dispose(); + } +} + +main().catch((e) => { + console.error(e); + process.exit(1); +}); diff --git a/packages/ng-helper-vscode/src/activate.ts b/packages/ng-helper-vscode/src/activate.ts index 2822e33b..83ac8bfd 100644 --- a/packages/ng-helper-vscode/src/activate.ts +++ b/packages/ng-helper-vscode/src/activate.ts @@ -1,88 +1,64 @@ -import type { InjectionCheckMode } from '@ng-helper/shared/lib/plugin'; -import { Uri, commands, workspace } from 'vscode'; +import { commands, RelativePattern, window, workspace, type ExtensionContext } from 'vscode'; +import { NgHelperConfig, readUserConfig, getUserConfigFileUri } from './config'; import { EXT_CONF_PATH, EXT_IS_ACTIVATED, defaultPort } from './constants'; -import { configTsPluginConfiguration } from './service/config'; -import { getWorkspacePath, isFileExistsOnWorkspace, normalizeFileExt } from './utils'; +import { logger } from './logger'; +import { configTsPluginConfiguration } from './service/configTsPlugin'; +import { getWorkspacePath, isFileExistsOnWorkspace } from './utils'; + +export async function activateExt(vscodeContext: ExtensionContext): Promise { + /** + * 监听用户配置文件的变化。 + * 如果变化了,需要重新初始化插件才能生效。 + * 里面简单弹出一个对话框,让用户 reloadWindow。 + */ + watchUserConfig(vscodeContext); -export async function activateExt(): Promise { const canActivated = await canActivate(); if (!canActivated) { return; } - const config = await readConfig(); + const userConfig = await readUserConfig(); - const port = await configTsPluginConfiguration(defaultPort, config); + logger.logInfo('====> ng-helper user config: ', userConfig); + + const port = await configTsPluginConfiguration(defaultPort, userConfig); if (!port) { return; } await commands.executeCommand('setContext', EXT_IS_ACTIVATED, true); - return Object.assign(config, { port }); + return new NgHelperConfig(userConfig, port); } async function canActivate(): Promise { - const confUri = getConfigUri(); + const confUri = getUserConfigFileUri(); if (!confUri) { return false; } return await isFileExistsOnWorkspace(confUri); } -export async function readConfig(): Promise { - const uri = getConfigUri()!; - const uint8Array = await workspace.fs.readFile(uri); - // uint8Array to string - const jsonText = new TextDecoder().decode(uint8Array); +function watchUserConfig(vscodeContext: ExtensionContext) { + const watcher = workspace.createFileSystemWatcher(new RelativePattern(getWorkspacePath()!, EXT_CONF_PATH)); - let config = getDefaultConfig(); - try { - const userConfig = JSON.parse(jsonText || '{}') as NgHelperConfig; - config = Object.assign(config, userConfig); - } catch (error) { - console.error('ng-helper.json is not a valid JSON file: ', jsonText); - } - return normalizeConfig(config); -} - -function getDefaultConfig(): NgHelperConfig { - return { - componentStyleFileExt: 'css', - componentScriptFileExt: 'js', - injectionCheckMode: 'count_match', - }; -} + vscodeContext.subscriptions.push(watcher); -function normalizeConfig(config: NgHelperConfig): NgHelperConfig { - return { - componentStyleFileExt: normalizeFileExt(config.componentStyleFileExt), - componentScriptFileExt: normalizeFileExt(config.componentScriptFileExt), - injectionCheckMode: config.injectionCheckMode, - }; -} + watcher.onDidCreate(() => handleFileChange('create')); + watcher.onDidDelete(() => handleFileChange('delete')); + watcher.onDidChange(() => handleFileChange('change')); -function getConfigUri(): Uri | undefined { - const rootWorkspaceUri = getWorkspacePath(); - if (!rootWorkspaceUri) { - return; + async function handleFileChange(type: 'delete' | 'create' | 'change') { + const message = { + delete: 'The ng-helper configuration file has been deleted. Please reload the window to disable the plugin.', + create: 'The ng-helper configuration file has been created. Please reload the window to enable the plugin.', + change: 'The ng-helper configuration file has been changed. Please reload the window to apply the changes.', + }[type]; + const selection = await window.showInformationMessage(message, 'OK', 'Cancel'); + if (selection === 'OK') { + await commands.executeCommand('workbench.action.reloadWindow'); + } } - return Uri.joinPath(rootWorkspaceUri, EXT_CONF_PATH); -} - -export interface NgHelperConfig { - /** - * like 'less', 'scss', 'css' etc, default is 'css'; - */ - componentStyleFileExt: string; - /** - * 'js' or 'ts', default is 'js'; - */ - componentScriptFileExt: string; - injectionCheckMode: InjectionCheckMode; -} - -export interface NgHelperConfigWithPort extends NgHelperConfig { - port: number; } diff --git a/packages/ng-helper-vscode/src/asyncUtils.ts b/packages/ng-helper-vscode/src/asyncUtils.ts index 7efc01d5..4fb02b67 100644 --- a/packages/ng-helper-vscode/src/asyncUtils.ts +++ b/packages/ng-helper-vscode/src/asyncUtils.ts @@ -1,5 +1,7 @@ import { CancellationToken, CancellationTokenSource } from 'vscode'; +import { logger } from './logger'; + const countMap = new Map(); type TimeoutWithMeasureOptions = { @@ -32,22 +34,22 @@ export async function withTimeoutAndMeasure( if (!silent) { console.groupCollapsed(`[timeoutWithMeasure] ${label}()#${cnt}`); - console.log(`${label}()#${cnt} start...`); + logger.logInfo(`${label}()#${cnt} start...`); } try { return await Promise.race([cb(), createTimeoutPromise(timeout, cancelTokenSource)]); } catch (error) { hasError = true; - console.error(`${label}()#${cnt} error:`, error); + logger.logError(`${label}()#${cnt} error:`, error); } finally { if (!hasError) { const cost = Date.now() - start; if (cost >= slowThreshold) { - console.warn(`${label}()#${cnt} cost ${cost}ms`); + logger.logWarning(`${label}()#${cnt} cost ${cost}ms`); } } if (!silent) { - console.log(`${label}()#${cnt} end.`); + logger.logInfo(`${label}()#${cnt} end.`); console.groupEnd(); } } diff --git a/packages/ng-helper-vscode/src/config.ts b/packages/ng-helper-vscode/src/config.ts new file mode 100644 index 00000000..71e9845a --- /dev/null +++ b/packages/ng-helper-vscode/src/config.ts @@ -0,0 +1,307 @@ +import type { InjectionCheckMode } from '@ng-helper/shared/lib/plugin'; +import { Uri, window, workspace } from 'vscode'; +import z from 'zod'; + +import { EXT_CONF_PATH } from './constants'; +import { getFileName, getWorkspacePath, isFileExistsOnWorkspace, normalizeFileExt, normalizePath } from './utils'; + +const ALLOW_SCRIPT_FILE_EXTS = ['js', 'ts', '.js', '.ts'] as const; +const ALLOW_INJECTION_CHECK_MODE = [ + 'strict_equal', + 'ignore_case_word_match', + 'count_match', + 'off', +] as const satisfies InjectionCheckMode[]; + +const NgProjectScheme = z.object({ + /** + * 名字。 + */ + name: z.string(), + /** + * AngularJS 工程的路径,它限定了 NgHelper 的工作范围。 + * 此路径下的 html/js/ts 是让 NgHelper 工作的文件。 + */ + path: z.string(), + /** + * AngularJS 工程依赖的 TypeScript 工程路径(一般它的目录有 tsconfig.json 文件)。 + * 如果没有使用 TypeScript, 就不用配置该项目。 + * 使用了 TypeScript 就必须配置,即使路径和 AngularJS 工程一样也要配置。 + * + * 注意: + * TypeScript 工程路径可以包含 AngularJS 工程,但 AngularJS 工程不能包含 TypeScript 工程。 + * 两个一样是可以的。 + */ + dependOnTsProjectPath: z.string().optional(), +}); + +const NgHelperUserConfigScheme = z.object({ + /** + * Like 'less', 'scss', 'css', etc. Default is 'css'. + */ + componentStyleFileExt: z.string().optional(), + /** + * 'js' or 'ts'. Default is 'js'. + */ + componentScriptFileExt: z.enum(ALLOW_SCRIPT_FILE_EXTS).optional(), + /** + * Default is 'count_match'. + */ + injectionCheckMode: z.enum(ALLOW_INJECTION_CHECK_MODE).optional(), + /** + * 没有配置的话,会自动判断,但有的情况会匹配错误。 + */ + ngProjects: z.array(NgProjectScheme).optional(), +}); + +export type NgProjectConfig = z.infer; +export type NgHelperUserConfig = z.infer; + +type Result = { + ok: T; + error?: string; +}; + +export class NgHelperConfig { + constructor( + public userConfig: NgHelperUserConfig, + public port: number, + ) {} + + get hasProjectConfig(): boolean { + return !!this.userConfig.ngProjects; + } + + getNgProject(absolutePilePath: string): NgProjectConfig | undefined { + return this.userConfig.ngProjects?.find((c) => absolutePilePath.startsWith(c.path)); + } + + getNgProjectByTsProjectPath(absolutePilePath: string): NgProjectConfig | undefined { + return this.userConfig.ngProjects?.find((c) => c.dependOnTsProjectPath === absolutePilePath); + } + + isNgProjectFile(absolutePilePath: string): boolean { + const fileName = getFileName(absolutePilePath); + + // 文件名以点开头的文件,往往是配置文件(如: .eslintrc.js),排除掉 + if (fileName.startsWith('.')) { + return false; + } + + // 该插件只关心 html/js/ts 文件 + if (!fileName.endsWith('.html') && !fileName.endsWith('.js') && !fileName.endsWith('.ts')) { + return false; + } + + if (!this.hasProjectConfig) { + return true; + } + + return !!this.getNgProject(absolutePilePath); + } +} + +export async function readUserConfig(): Promise { + const uri = getUserConfigFileUri()!; + const uint8Array = await workspace.fs.readFile(uri); + const jsonText = new TextDecoder().decode(uint8Array); + + const { ok: config, error } = await parseUserConfig(jsonText); + if (error) { + // 不等待,避免阻塞插件启动进程 + void showUserConfigErrors(error); + } + + return config; +} + +export function getUserConfigFileUri(): Uri | undefined { + const rootWorkspaceUri = getWorkspacePath(); + if (!rootWorkspaceUri) { + return; + } + return Uri.joinPath(rootWorkspaceUri, EXT_CONF_PATH); +} + +export async function showUserConfigErrors(error: string | undefined) { + if (!error) { + return; + } + + const selection = await window.showWarningMessage( + `The ng-helper configuration is invalid. Please check the error: ${error}`, + 'OK', + ); + if (selection === 'OK') { + // 打开配置文件。 + const document = await workspace.openTextDocument(getUserConfigFileUri()!); + await window.showTextDocument(document); + } +} + +async function parseUserConfig(jsonText: string): Promise> { + const defaultConfig = getDefaultConfig(); + + let config: NgHelperUserConfig; + try { + const userConfig = NgHelperUserConfigScheme.parse(JSON.parse(jsonText || '{}')); + config = Object.assign(defaultConfig, userConfig); + } catch (err) { + return { + ok: defaultConfig, + error: `Failed to parse user config: ${err instanceof Error ? err.message : `${err as string}`}`, + }; + } + + // 标准化文件扩展名 + if (config.componentStyleFileExt) { + config.componentStyleFileExt = normalizeFileExt(config.componentStyleFileExt); + } + if (config.componentScriptFileExt) { + config.componentScriptFileExt = normalizeFileExt(config.componentScriptFileExt) as 'js' | 'ts'; + } + + const errors: string[] = []; + if (config.ngProjects) { + const { ok, error } = await validateAndNormalizeNgProjects(config.ngProjects); + config.ngProjects = ok; + if (error) { + errors.push(error); + } + } + + return { ok: config, error: errors.join(';') }; +} + +async function validateAndNormalizeNgProjects( + ngProjects: NgProjectConfig[], +): Promise> { + const errors: string[] = []; + + const duplicatedName = findDuplicated(ngProjects.map((c) => c.name)); + if (duplicatedName) { + errors.push(`Duplicate project name: "${duplicatedName}"`); + } + + const newNgProjects: NgProjectConfig[] = []; + const newNgProjectIndexList: number[] = []; + for (let i = 0; i < ngProjects.length; i++) { + const ngProject = ngProjects[i]; + const { ok: newNgProject, error } = await validateAndNormalizeNgProject(ngProject); + if (error) { + errors.push(error); + } + if (newNgProject) { + newNgProjects.push(newNgProject); + newNgProjectIndexList.push(i); + } + } + + const ngProjectOverlap = findOverlapPaths(newNgProjects.map((c) => c.path)); + if (ngProjectOverlap) { + const [i, j] = ngProjectOverlap; + const p1 = ngProjects[i]; + const p2 = ngProjects[j]; + errors.push(`The AngularJS project "${p1.name}" path overlaps with the AngularJS project "${p2.name}" path`); + } + + const tsProjectOverlap = findOverlapPaths(newNgProjects.map((c) => c.dependOnTsProjectPath!)); + if (tsProjectOverlap) { + const [i, j] = tsProjectOverlap; + const p1 = ngProjects[i]; + const p2 = ngProjects[j]; + errors.push(`The TypeScript project "${p1.name}" path overlaps with the TypeScript project "${p2.name}" path`); + } + + // 这个有错误,一整个都不能使用了,直接退回自动匹配 + return { ok: errors.length ? undefined : newNgProjects, error: errors.join(';') }; +} + +async function validateAndNormalizeNgProject(ngProject: NgProjectConfig): Promise> { + const workspaceDir = getWorkspacePath()!.fsPath; + const normalizeProjectPath = (p: string) => + p.startsWith('/') ? normalizePath(p) : normalizePath(workspaceDir + '/' + p); + + const config = { ...ngProject }; + + // normalize path + config.path = normalizeProjectPath(config.path); + + // exists or not + if (!(await isFileExistsOnWorkspace(Uri.file(config.path)))) { + // 注意:报错使用的信息要用用户输入的原始信息 + return { ok: undefined, error: `The AngularJS project path does not exist: ${ngProject.path}` }; + } + + if (!config.dependOnTsProjectPath) { + // 没有配置则默认取 vscode workspace 文件夹。 + config.dependOnTsProjectPath = workspaceDir; + } else { + config.dependOnTsProjectPath = normalizeProjectPath(config.dependOnTsProjectPath); + + if (!(await isFileExistsOnWorkspace(Uri.file(config.dependOnTsProjectPath)))) { + // 注意:报错使用的信息要用用户输入的原始信息 + return { + ok: undefined, + error: `The TypeScript project path does not exist: ${ngProject.dependOnTsProjectPath}`, + }; + } + + // TypeScript 工程路径可以包含 AngularJS 工程,但 AngularJS 工程不能包含 TypeScript 工程。 + // 两个一样是可以的。 + if (config.dependOnTsProjectPath !== config.path && config.dependOnTsProjectPath.startsWith(config.path)) { + // 注意:报错使用的信息要用用户输入的原始信息 + return { + ok: undefined, + error: `The AngularJS project path (${ngProject.path}) cannot contain the TypeScript project path (${ngProject.dependOnTsProjectPath})`, + }; + } + } + + return { ok: config }; +} + +function findDuplicated(list: string[]): string | undefined { + const set = new Set(); + for (const e of list) { + if (set.has(e)) { + return e; + } else { + set.add(e); + } + } + return undefined; +} + +function findOverlapPaths(paths: string[]): [number, number] | undefined { + for (let i = 0; i < paths.length - 1; i++) { + for (let j = i + 1; j < paths.length; j++) { + const p1 = paths[i]; + const p2 = paths[j]; + if (isPathOverlap(p1, p2)) { + return [i, j]; + } + } + } + return undefined; +} + +function isPathOverlap(p1: string, p2: string): boolean { + const len1 = p1.length; + const len2 = p2.length; + if (len1 === len2) { + return p1 === p2; + } else if (len1 > len2) { + return p1.startsWith(p2); + } else { + return p2.startsWith(p1); + } +} + +function getDefaultConfig(): NgHelperUserConfig { + return { + componentStyleFileExt: 'css', + componentScriptFileExt: 'js', + injectionCheckMode: 'count_match', + }; +} diff --git a/packages/ng-helper-vscode/src/extension.ts b/packages/ng-helper-vscode/src/extension.ts index 8e8fdde6..5fa999e3 100644 --- a/packages/ng-helper-vscode/src/extension.ts +++ b/packages/ng-helper-vscode/src/extension.ts @@ -2,49 +2,63 @@ import { ExtensionContext } from 'vscode'; import { activateExt } from './activate'; import { registerCodeLens } from './features/codeLens'; -import { createComponentCommand } from './features/command/createComponent'; +import { registerCommand } from './features/command'; import { registerCompletion } from './features/completion'; import { registerDefinition } from './features/definition'; import { registerHover } from './features/hover'; import { supportInlineHtml } from './features/inlineHtml'; import { registerLink } from './features/link'; import { registerSemantic } from './features/semantic'; +import { registerStatusBar } from './features/statusBar'; +import { NgContext } from './ngContext'; +import { StateControl } from './service/stateControl'; +import { TsService } from './service/tsService/tsService'; // This method is called when your extension is activated // Your extension is activated the very first time the command is executed -export async function activate(context: ExtensionContext) { - const config = await activateExt(); +export async function activate(vscodeContext: ExtensionContext) { + const config = await activateExt(vscodeContext); if (!config) { return; } - // Use the console to output diagnostic information (console.log) and errors (console.error) // This line of code will only be executed once when your extension is activated console.log('======= "ng-helper" is now active ========'); + const pluginStartAt = Date.now(); + const stateControl = new StateControl(pluginStartAt); + const tsService = new TsService(stateControl); + const rpcApi = tsService.start(config.port); + const ngContext = new NgContext(vscodeContext, config, rpcApi); + + vscodeContext.subscriptions.push(tsService); + // command - context.subscriptions.push(createComponentCommand(config.componentStyleFileExt, config.componentScriptFileExt)); + registerCommand(ngContext); + + // status bar + registerStatusBar(ngContext, stateControl); // completion - registerCompletion(context, config.port); + registerCompletion(ngContext); // hover - registerHover(context, config.port); + registerHover(ngContext); // definition - registerDefinition(context, config.port); + registerDefinition(ngContext); // semantic - registerSemantic(context, config.port); + registerSemantic(ngContext); // code lens - registerCodeLens(context, config.port); + registerCodeLens(ngContext); // link - registerLink(context, config.port); + registerLink(ngContext); // inline html - supportInlineHtml(context, config.port); + supportInlineHtml(ngContext); } // This method is called when your extension is deactivated diff --git a/packages/ng-helper-vscode/src/features/codeLens/index.ts b/packages/ng-helper-vscode/src/features/codeLens/index.ts index 4826a49c..c7fd0e53 100644 --- a/packages/ng-helper-vscode/src/features/codeLens/index.ts +++ b/packages/ng-helper-vscode/src/features/codeLens/index.ts @@ -1,7 +1,7 @@ -import { ExtensionContext } from 'vscode'; +import type { NgContext } from '../../ngContext'; import { searchUseOfComponentOrDirective } from './useOfComponentOrDirective'; -export function registerCodeLens(context: ExtensionContext, port: number) { - context.subscriptions.push(searchUseOfComponentOrDirective(port)); +export function registerCodeLens(ngContext: NgContext) { + ngContext.vscodeContext.subscriptions.push(searchUseOfComponentOrDirective(ngContext)); } diff --git a/packages/ng-helper-vscode/src/features/codeLens/useOfComponentOrDirective.ts b/packages/ng-helper-vscode/src/features/codeLens/useOfComponentOrDirective.ts index 1b9a1dd6..f230d0ad 100644 --- a/packages/ng-helper-vscode/src/features/codeLens/useOfComponentOrDirective.ts +++ b/packages/ng-helper-vscode/src/features/codeLens/useOfComponentOrDirective.ts @@ -1,14 +1,20 @@ import { kebabCase } from 'change-case'; import { languages, TextDocument, CodeLens, Range } from 'vscode'; +import type { NgContext } from '../../ngContext'; + const STRING_REGEX = `(['"])(\\.|(?!\\1).)*?\\1`; const MATCH_DIRECTIVE = new RegExp(`\\.directive\\(\\s*${STRING_REGEX}`, 'g'); const MATCH_COMPONENT = new RegExp(`\\.component\\(\\s*${STRING_REGEX}`, 'g'); const MATCH_NAME = new RegExp(STRING_REGEX); -export function searchUseOfComponentOrDirective(_: number) { +export function searchUseOfComponentOrDirective(ngContext: NgContext) { return languages.registerCodeLensProvider(['typescript', 'javascript'], { provideCodeLenses(document: TextDocument): CodeLens[] { + if (!ngContext.isNgProjectDocument(document)) { + return []; + } + const codeLenses: CodeLens[] = []; const text = document.getText(); let match: RegExpExecArray | null; diff --git a/packages/ng-helper-vscode/src/features/command/index.ts b/packages/ng-helper-vscode/src/features/command/index.ts new file mode 100644 index 00000000..e1b7cd2b --- /dev/null +++ b/packages/ng-helper-vscode/src/features/command/index.ts @@ -0,0 +1,12 @@ +import type { NgContext } from '../../ngContext'; + +import { createComponentCommand } from './createComponent'; + +export function registerCommand(ngContext: NgContext) { + ngContext.vscodeContext.subscriptions.push( + createComponentCommand( + ngContext.config.userConfig.componentStyleFileExt!, + ngContext.config.userConfig.componentScriptFileExt!, + ), + ); +} diff --git a/packages/ng-helper-vscode/src/features/command/utils.ts b/packages/ng-helper-vscode/src/features/command/utils.ts index 50b95797..5135a87a 100644 --- a/packages/ng-helper-vscode/src/features/command/utils.ts +++ b/packages/ng-helper-vscode/src/features/command/utils.ts @@ -1,12 +1,16 @@ import { commands, window } from 'vscode'; +import { logger } from '../../logger'; + +const myLogger = logger.prefixWith('Command'); + // eslint-disable-next-line @typescript-eslint/no-explicit-any export function createCommand(commandName: string, callback: (...args: any[]) => any, thisArg?: any) { return commands.registerCommand( `ng-helper.${commandName}`, // eslint-disable-next-line @typescript-eslint/no-explicit-any async (...args: any[]) => { - console.log(`Execute command ${commandName} with args: `, args); + myLogger.logInfo(`Execute command ${commandName} with args: `, args); try { // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-argument return await callback(...args); diff --git a/packages/ng-helper-vscode/src/features/completion/builtin.ts b/packages/ng-helper-vscode/src/features/completion/builtin.ts index 2379c7ff..cc02826e 100644 --- a/packages/ng-helper-vscode/src/features/completion/builtin.ts +++ b/packages/ng-helper-vscode/src/features/completion/builtin.ts @@ -26,9 +26,9 @@ const defaultNgConfigStr: BuiltinConfig = { }; export function builtinDirectiveNameCompletion({ - context, + completionContext, }: CompletionParamObj): CompletionItem[] | undefined { - if (typeof context.triggerCharacter === 'undefined') { + if (typeof completionContext.triggerCharacter === 'undefined') { return getNgDirectiveConfigList() .map(([name, configs]) => configs.length > 0 diff --git a/packages/ng-helper-vscode/src/features/completion/componentName.ts b/packages/ng-helper-vscode/src/features/completion/componentName.ts index c16949f6..448ed33e 100644 --- a/packages/ng-helper-vscode/src/features/completion/componentName.ts +++ b/packages/ng-helper-vscode/src/features/completion/componentName.ts @@ -6,8 +6,6 @@ import { CompletionItem, CompletionList, SnippetString } from 'vscode'; import { checkCancellation } from '../../asyncUtils'; import { EXT_MARK } from '../../constants'; -import { getComponentNameCompletionApi } from '../../service/api'; -import { checkNgHelperServerRunning } from '../../utils'; import { getComponentName, getControllerNameInfo, getCorrespondingScriptFileName, isComponentTagName } from '../utils'; import type { CompletionParamObj } from '.'; @@ -15,12 +13,12 @@ import type { CompletionParamObj } from '.'; export async function componentNameCompletion({ document, cursorAtInfo, - vscodeCancelToken, - context, - port, + cancelToken, + ngContext, + completionContext, }: CompletionParamObj) { // working on: no triggerChar or triggerChar is '<' - if (typeof context.triggerCharacter === 'undefined' || context.triggerCharacter === '<') { + if (typeof completionContext.triggerCharacter === 'undefined' || completionContext.triggerCharacter === '<') { return await componentNameCompletionImpl(); } @@ -30,22 +28,21 @@ export async function componentNameCompletion({ document, getControllerNameInfo(cursorAtInfo.context)?.controllerName, )) ?? document.fileName; - if (!(await checkNgHelperServerRunning(relatedScriptFile, port))) { + if (!relatedScriptFile) { return; } - checkCancellation(vscodeCancelToken); + checkCancellation(cancelToken); - let list = await getComponentNameCompletionApi({ - port, - info: { fileName: relatedScriptFile }, - vscodeCancelToken, + let list = await ngContext.rpcApi.getComponentNameCompletionApi({ + params: { fileName: relatedScriptFile }, + cancelToken, }); if (!list || !list.length) { return; } - checkCancellation(vscodeCancelToken); + checkCancellation(cancelToken); const currentComponentName = getComponentName(document); if (currentComponentName) { @@ -62,7 +59,7 @@ export async function componentNameCompletion({ } } - const preChar = context.triggerCharacter === '<' ? '' : '<'; + const preChar = completionContext.triggerCharacter === '<' ? '' : '<'; const items = list.map((x) => buildCompletionItem(x)); if (matchTransclude && matchTransclude.transclude && typeof matchTransclude.transclude !== 'boolean') { diff --git a/packages/ng-helper-vscode/src/features/completion/componentOrDirectiveAttr.ts b/packages/ng-helper-vscode/src/features/completion/componentOrDirectiveAttr.ts index 498dc38b..c91a2d64 100644 --- a/packages/ng-helper-vscode/src/features/completion/componentOrDirectiveAttr.ts +++ b/packages/ng-helper-vscode/src/features/completion/componentOrDirectiveAttr.ts @@ -4,8 +4,7 @@ import { camelCase, kebabCase } from 'change-case'; import { CancellationToken, CompletionItem, SnippetString, CompletionItemKind } from 'vscode'; import { EXT_MARK } from '../../constants'; -import { getComponentAttrCompletionApi, getDirectiveCompletionApi } from '../../service/api'; -import { checkNgHelperServerRunning } from '../../utils'; +import type { RpcApi } from '../../service/tsService/rpcApi'; import { getControllerNameInfo, getCorrespondingScriptFileName, isComponentTagName } from '../utils'; import type { CompletionParamObj } from '.'; @@ -14,12 +13,12 @@ export async function componentOrDirectiveAttrCompletion({ document, cursor, cursorAtInfo, - vscodeCancelToken, - context, - port, + cancelToken, + ngContext, + completionContext, }: CompletionParamObj) { // 属性补全触发方式有两种: 空格和输入字符。 - if (context.triggerCharacter === SPACE || typeof context.triggerCharacter === 'undefined') { + if (completionContext.triggerCharacter === SPACE || typeof completionContext.triggerCharacter === 'undefined') { if (cursorAtInfo.type === 'startTag') { // 只有是 'startTag' 时才需要看这个 const tagTextBeforeCursor = document.getText().slice(cursorAtInfo.start, cursor.at); @@ -33,7 +32,7 @@ export async function componentOrDirectiveAttrCompletion({ document, getControllerNameInfo(cursorAtInfo.context)?.controllerName, )) ?? document.fileName; - if (!(await checkNgHelperServerRunning(relatedScriptFile, port))) { + if (!relatedScriptFile) { return; } @@ -41,16 +40,16 @@ export async function componentOrDirectiveAttrCompletion({ return await handleComponentAttr({ relatedScriptFile, cursorAtInfo, - port, - vscodeCancelToken, + rpcApi: ngContext.rpcApi, + cancelToken, }); } else { return await handleDirectiveAttr({ relatedScriptFile, cursorAtInfo, cursor, - port, - vscodeCancelToken, + rpcApi: ngContext.rpcApi, + cancelToken, }); } } @@ -59,18 +58,17 @@ export async function componentOrDirectiveAttrCompletion({ async function handleComponentAttr({ relatedScriptFile, cursorAtInfo, - port, - vscodeCancelToken, + rpcApi, + cancelToken, }: { relatedScriptFile: string; cursorAtInfo: CursorAtStartTagInfo | CursorAtAttrNameInfo; - port: number; - vscodeCancelToken: CancellationToken; + rpcApi: RpcApi; + cancelToken: CancellationToken; }) { - let list = await getComponentAttrCompletionApi({ - port, - info: { fileName: relatedScriptFile, componentName: camelCase(cursorAtInfo.tagName) }, - vscodeCancelToken, + let list = await rpcApi.getComponentAttrCompletionApi({ + params: { fileName: relatedScriptFile, componentName: camelCase(cursorAtInfo.tagName) }, + cancelToken, }); if (!list || !list.length) { return; @@ -110,29 +108,28 @@ async function handleDirectiveAttr({ relatedScriptFile, cursorAtInfo, cursor, - port, - vscodeCancelToken, + rpcApi, + cancelToken, }: { relatedScriptFile: string; cursorAtInfo: CursorAtStartTagInfo | CursorAtAttrNameInfo; cursor: Cursor; - port: number; - vscodeCancelToken: CancellationToken; + rpcApi: RpcApi; + cancelToken: CancellationToken; }) { const afterCursorAttrName = Object.entries(cursorAtInfo.attrLocations) .sort(([_a, locA], [_b, locB]) => locA.start - locB.start) .find(([_, loc]) => loc.start > cursor.at)?.[0] ?? ''; - const list = await getDirectiveCompletionApi({ - port, - info: { + const list = await rpcApi.getDirectiveCompletionApi({ + params: { fileName: relatedScriptFile, attrNames: cursorAtInfo.attrNames.map((x) => camelCase(x)), afterCursorAttrName: camelCase(afterCursorAttrName), queryType: 'directiveAttr', }, - vscodeCancelToken, + cancelToken, }); if (!list || !list.length) { return; diff --git a/packages/ng-helper-vscode/src/features/completion/customDirectiveName.ts b/packages/ng-helper-vscode/src/features/completion/customDirectiveName.ts index e69cd67a..723d86e3 100644 --- a/packages/ng-helper-vscode/src/features/completion/customDirectiveName.ts +++ b/packages/ng-helper-vscode/src/features/completion/customDirectiveName.ts @@ -4,8 +4,7 @@ import { CancellationToken, CompletionItem, SnippetString, CompletionItemKind } import { checkCancellation } from '../../asyncUtils'; import { EXT_MARK } from '../../constants'; -import { getDirectiveCompletionApi } from '../../service/api'; -import { checkNgHelperServerRunning } from '../../utils'; +import type { RpcApi } from '../../service/tsService/rpcApi'; import { getControllerNameInfo, getCorrespondingScriptFileName } from '../utils'; import type { CompletionParamObj } from '.'; @@ -13,28 +12,28 @@ import type { CompletionParamObj } from '.'; export async function customDirectiveNameCompletion({ document, cursorAtInfo, - vscodeCancelToken, - context, - port, + cancelToken, + ngContext, + completionContext, }: CompletionParamObj) { // 只走没有设置触发字符的那个分支。 - if (typeof context.triggerCharacter === 'undefined') { + if (typeof completionContext.triggerCharacter === 'undefined') { const relatedScriptFile = (await getCorrespondingScriptFileName( document, getControllerNameInfo(cursorAtInfo.context)?.controllerName, )) ?? document.fileName; - if (!(await checkNgHelperServerRunning(relatedScriptFile, port))) { + if (!relatedScriptFile) { return; } - checkCancellation(vscodeCancelToken); + checkCancellation(cancelToken); return await handleDirectiveName({ relatedScriptFile, cursorAtInfo, - port, - vscodeCancelToken, + rpcApi: ngContext.rpcApi, + cancelToken, }); } } @@ -42,23 +41,22 @@ export async function customDirectiveNameCompletion({ async function handleDirectiveName({ relatedScriptFile, cursorAtInfo, - port, - vscodeCancelToken, + rpcApi, + cancelToken, }: { relatedScriptFile: string; cursorAtInfo: CursorAtStartTagInfo | CursorAtAttrNameInfo; - port: number; - vscodeCancelToken: CancellationToken; + rpcApi: RpcApi; + cancelToken: CancellationToken; }) { - const list = await getDirectiveCompletionApi({ - port, - info: { + const list = await rpcApi.getDirectiveCompletionApi({ + params: { fileName: relatedScriptFile, attrNames: cursorAtInfo.attrNames.map((x) => camelCase(x)), afterCursorAttrName: '', queryType: 'directive', }, - vscodeCancelToken, + cancelToken, }); if (!list || !list.length) { return; diff --git a/packages/ng-helper-vscode/src/features/completion/index.ts b/packages/ng-helper-vscode/src/features/completion/index.ts index 78b561e1..80233338 100644 --- a/packages/ng-helper-vscode/src/features/completion/index.ts +++ b/packages/ng-helper-vscode/src/features/completion/index.ts @@ -2,7 +2,6 @@ import { getCursorAtInfo, type CursorAtInfo } from '@ng-helper/shared/lib/cursor import { SPACE, type Cursor } from '@ng-helper/shared/lib/html'; import { CompletionList, - ExtensionContext, languages, type CancellationToken, type CompletionContext, @@ -11,6 +10,7 @@ import { } from 'vscode'; import { checkCancellation, createCancellationTokenSource, withTimeoutAndMeasure } from '../../asyncUtils'; +import type { NgContext } from '../../ngContext'; import { buildCursor } from '../../utils'; import { isComponentTagName } from '../utils'; @@ -22,9 +22,9 @@ import { templateOrAttrValueCompletion } from './type'; interface BaseCompletionParam { document: TextDocument; - vscodeCancelToken: CancellationToken; - context: CompletionContext; - port: number; + cancelToken: CancellationToken; + ngContext: NgContext; + completionContext: CompletionContext; } interface CompletionParam extends BaseCompletionParam { @@ -39,22 +39,26 @@ export interface CompletionParamObj completion({ document, position, - vscodeCancelToken: cancelTokenSource.token, - context, - port, + cancelToken: cancelTokenSource.token, + ngContext, + completionContext, }), { cancelTokenSource }, ); @@ -65,13 +69,19 @@ export function registerCompletion(context: ExtensionContext, port: number) { ); } -export async function completion({ document, position, vscodeCancelToken, context, port }: CompletionParam) { +async function completion({ document, position, cancelToken, ngContext, completionContext }: CompletionParam) { const cursor = buildCursor(document, position, false); const cursorAtInfo = getCursorAtInfo(document.getText(), cursor); - checkCancellation(vscodeCancelToken); + checkCancellation(cancelToken); - const obj = { document, cursor, port, vscodeCancelToken, context }; + const obj = { + document, + cursor, + cancelToken, + ngContext, + completionContext, + } as CompletionParamObj; switch (cursorAtInfo.type) { case 'endTag': case 'tagName': diff --git a/packages/ng-helper-vscode/src/features/completion/type.ts b/packages/ng-helper-vscode/src/features/completion/type.ts index 22bb6155..e9143e76 100644 --- a/packages/ng-helper-vscode/src/features/completion/type.ts +++ b/packages/ng-helper-vscode/src/features/completion/type.ts @@ -15,13 +15,7 @@ import { import { checkCancellation } from '../../asyncUtils'; import { EXT_MARK } from '../../constants'; -import { - getComponentControllerAsApi, - getComponentTypeCompletionApi, - getControllerTypeCompletionApi, - getFilterNameCompletionApi, -} from '../../service/api'; -import { checkNgHelperServerRunning } from '../../utils'; +import type { RpcApi } from '../../service/tsService/rpcApi'; import { getContextString, getControllerNameInfo, @@ -39,34 +33,34 @@ import type { CompletionParamObj } from '.'; export async function templateOrAttrValueCompletion({ document, position, - port, - vscodeCancelToken, + cancelToken, cursorAtInfo, - context, + ngContext, + completionContext, }: CompletionParamObj & { position: Position }): Promise< CompletionList | undefined > { const { type, value } = getContextString(cursorAtInfo); - checkCancellation(vscodeCancelToken); + checkCancellation(cancelToken); - const isPropAccessTriggerChar = context.triggerCharacter === '.'; - const isUndefinedTriggerChar = typeof context.triggerCharacter === 'undefined'; + const isPropAccessTriggerChar = completionContext.triggerCharacter === '.'; + const isUndefinedTriggerChar = typeof completionContext.triggerCharacter === 'undefined'; if (isPropAccessTriggerChar && type === 'propertyAccess') { return await getTypeCompletion({ document, cursorAtInfo, contextString: value, - port, - vscodeCancelToken, + rpcApi: ngContext.rpcApi, + cancelToken: cancelToken, }); } else if (isUndefinedTriggerChar) { if (type === 'filterName') { return await getFilterNameCompletion({ document, - port, - vscodeCancelToken, + rpcApi: ngContext.rpcApi, + cancelToken, }); } else if (type === 'identifier') { // ctrl 输入第一个字符 c 后,便成为 'identifier' 状态。 @@ -76,8 +70,8 @@ export async function templateOrAttrValueCompletion({ const ctrlAsItem = await getComponentCtrlAsCompletion({ document, cursorAtInfo, - port, - vscodeCancelToken, + rpcApi: ngContext.rpcApi, + cancelToken, }); if (ctrlAsItem) { items.push(ctrlAsItem); @@ -92,14 +86,14 @@ async function getTypeCompletion({ document, cursorAtInfo, contextString, - port, - vscodeCancelToken, + rpcApi, + cancelToken, }: { document: TextDocument; cursorAtInfo: CursorAtTemplateInfo | CursorAtAttrValueInfo; contextString: string; - port: number; - vscodeCancelToken: CancellationToken; + rpcApi: RpcApi; + cancelToken: CancellationToken; }) { const isComponent = isComponentHtml(document); const ctrlInfo = getControllerNameInfo(cursorAtInfo.context); @@ -114,7 +108,7 @@ async function getTypeCompletion({ isNgBuiltinDirective(cursorAtInfo.attrName) || isNgUserCustomAttr(cursorAtInfo.attrName)); if (isTemplateValue || isAttrValueAndCompletable) { - return await getTypeCompletionQuery({ document, ctrlInfo, prefix: contextString, port, vscodeCancelToken }); + return await getTypeCompletionQuery({ document, ctrlInfo, prefix: contextString, rpcApi, cancelToken }); } } @@ -122,32 +116,30 @@ async function getTypeCompletionQuery({ document, ctrlInfo, prefix, - port, - vscodeCancelToken, + rpcApi, + cancelToken, }: { document: TextDocument; ctrlInfo?: NgCtrlInfo; prefix: string; - port: number; - vscodeCancelToken: CancellationToken; + rpcApi: RpcApi; + cancelToken: CancellationToken; }) { - const scriptFilePath = (await getCorrespondingScriptFileName(document, ctrlInfo?.controllerName))!; - if (!(await checkNgHelperServerRunning(scriptFilePath, port))) { + const scriptFilePath = await getCorrespondingScriptFileName(document, ctrlInfo?.controllerName); + if (!scriptFilePath) { return; } - checkCancellation(vscodeCancelToken); + checkCancellation(cancelToken); const res = ctrlInfo - ? await getControllerTypeCompletionApi({ - vscodeCancelToken, - port, - info: { fileName: scriptFilePath, prefix, ...ctrlInfo }, + ? await rpcApi.getControllerTypeCompletionApi({ + cancelToken, + params: { fileName: scriptFilePath, prefix, ...ctrlInfo }, }) - : await getComponentTypeCompletionApi({ - vscodeCancelToken, - port, - info: { fileName: scriptFilePath, prefix }, + : await rpcApi.getComponentTypeCompletionApi({ + cancelToken, + params: { fileName: scriptFilePath, prefix }, }); if (res) { return buildCompletionList(res); @@ -192,23 +184,23 @@ function buildCompletionList(res: NgTypeInfo[]) { async function getComponentCtrlAsCompletion({ document, cursorAtInfo, - port, - vscodeCancelToken, + rpcApi, + cancelToken, }: { document: TextDocument; cursorAtInfo: CursorAtTemplateInfo | CursorAtAttrValueInfo; - port: number; - vscodeCancelToken: CancellationToken; + rpcApi: RpcApi; + cancelToken: CancellationToken; }): Promise { let ctrlAs: string | undefined; if (cursorAtInfo.type === 'template') { - ctrlAs = await getComponentControllerAsCompletion(document, port, vscodeCancelToken); + ctrlAs = await getComponentControllerAsCompletion(document, rpcApi, cancelToken); } else if ( isComponentTagName(cursorAtInfo.tagName) || isNgBuiltinDirective(cursorAtInfo.attrName) || isNgUserCustomAttr(cursorAtInfo.attrName) ) { - ctrlAs = await getComponentControllerAsCompletion(document, port, vscodeCancelToken); + ctrlAs = await getComponentControllerAsCompletion(document, rpcApi, cancelToken); } if (!ctrlAs) { @@ -250,41 +242,42 @@ function buildLocalVarsCompletion(items: CompletionItem[], position: Position): async function getComponentControllerAsCompletion( document: TextDocument, - port: number, - vscodeCancelToken: CancellationToken, + rpcApi: RpcApi, + cancelToken: CancellationToken, ): Promise { - const scriptFilePath = (await getCorrespondingScriptFileName(document))!; + const scriptFilePath = await getCorrespondingScriptFileName(document); - checkCancellation(vscodeCancelToken); + checkCancellation(cancelToken); - if (!(await checkNgHelperServerRunning(scriptFilePath, port))) { + if (!scriptFilePath) { return; } - checkCancellation(vscodeCancelToken); - - return await getComponentControllerAsApi({ port, info: { fileName: scriptFilePath }, vscodeCancelToken }); + return await rpcApi.getComponentControllerAsApi({ + params: { fileName: scriptFilePath }, + cancelToken, + }); } async function getFilterNameCompletion({ document, - port, - vscodeCancelToken, + rpcApi, + cancelToken, }: { document: TextDocument; - port: number; - vscodeCancelToken: CancellationToken; + rpcApi: RpcApi; + cancelToken: CancellationToken; }): Promise { const builtinList = builtinFilterNameCompletion(); - const scriptFilePath = (await getCorrespondingScriptFileName(document))!; - if (!(await checkNgHelperServerRunning(scriptFilePath, port))) { + const scriptFilePath = await getCorrespondingScriptFileName(document); + if (!scriptFilePath) { return new CompletionList(builtinList, false); } - checkCancellation(vscodeCancelToken); + checkCancellation(cancelToken); - const res = await getFilterNameCompletionApi({ port, vscodeCancelToken, info: { fileName: scriptFilePath } }); + const res = await rpcApi.getFilterNameCompletionApi({ cancelToken, params: { fileName: scriptFilePath } }); if (res) { const custom = buildCompletionList(res); return new CompletionList(builtinList.concat(custom.items), false); diff --git a/packages/ng-helper-vscode/src/features/definition/index.ts b/packages/ng-helper-vscode/src/features/definition/index.ts index f7e9b712..37c51407 100644 --- a/packages/ng-helper-vscode/src/features/definition/index.ts +++ b/packages/ng-helper-vscode/src/features/definition/index.ts @@ -14,25 +14,19 @@ import { languages, workspace, type Definition, - type ExtensionContext, TextDocument, Position, CancellationToken, } from 'vscode'; import { checkCancellation, createCancellationTokenSource, withTimeoutAndMeasure } from '../../asyncUtils'; -import { - getComponentNameOrAttrNameDefinitionApi, - getComponentTypeDefinitionApi, - getControllerTypeDefinitionApi, - getDirectiveDefinitionApi, - getFilterNameDefinitionApi, -} from '../../service/api'; +import type { NgContext } from '../../ngContext'; +import type { RpcApi } from '../../service/tsService/rpcApi'; import { buildCursor } from '../../utils'; import { onTypeHover } from '../hover/utils'; import { - checkServiceAndGetScriptFilePath, getControllerNameInfo, + getCorrespondingScriptFileName, isBuiltinFilter, isComponentHtml, isComponentTagName, @@ -41,14 +35,18 @@ import { toNgElementHoverInfo, } from '../utils'; -export function registerDefinition(context: ExtensionContext, port: number): void { - context.subscriptions.push( +export function registerDefinition(ngContext: NgContext): void { + ngContext.vscodeContext.subscriptions.push( languages.registerDefinitionProvider('html', { async provideDefinition( document: TextDocument, position: Position, token: CancellationToken, ): Promise { + if (!ngContext.isNgProjectDocument(document)) { + return; + } + const cancelTokenSource = createCancellationTokenSource(token); return await withTimeoutAndMeasure( 'provideDefinition', @@ -71,14 +69,14 @@ export function registerDefinition(context: ExtensionContext, port: number): voi return await handleTagNameOrAttrName( cursorAtInfo, document, - port, + ngContext.rpcApi, cancelTokenSource.token, ); case 'tagName': return await handleTagNameOrAttrName( cursorAtInfo, document, - port, + ngContext.rpcApi, cancelTokenSource.token, ); @@ -88,7 +86,7 @@ export function registerDefinition(context: ExtensionContext, port: number): voi document, position, cursorAtInfo, - port, + ngContext.rpcApi, cancelTokenSource.token, ); } @@ -103,28 +101,26 @@ export function registerDefinition(context: ExtensionContext, port: number): voi async function handleTagNameOrAttrName( cursorAtInfo: CursorAtTagNameInfo | CursorAtAttrNameInfo, document: TextDocument, - port: number, - token: CancellationToken, + rpcApi: RpcApi, + cancelToken: CancellationToken, ): Promise { if (isComponentTagName(cursorAtInfo.tagName) || cursorAtInfo.attrNames.length) { - const scriptFilePath = await checkServiceAndGetScriptFilePath(document, port); + const scriptFilePath = await getCorrespondingScriptFileName(document); if (!scriptFilePath) { return; } if (isComponentTagName(cursorAtInfo.tagName)) { - const definitionInfo = await getComponentNameOrAttrNameDefinitionApi({ - port, - vscodeCancelToken: token, - info: { fileName: scriptFilePath, hoverInfo: toNgElementHoverInfo(cursorAtInfo) }, + const definitionInfo = await rpcApi.getComponentNameOrAttrNameDefinitionApi({ + cancelToken, + params: { fileName: scriptFilePath, hoverInfo: toNgElementHoverInfo(cursorAtInfo) }, }); return await buildDefinition(definitionInfo); } else if (cursorAtInfo.type === 'attrName') { const cursorAtAttrName = camelCase(cursorAtInfo.cursorAtAttrName); - const definitionInfo = await getDirectiveDefinitionApi({ - port, - vscodeCancelToken: token, - info: { + const definitionInfo = await rpcApi.getDirectiveDefinitionApi({ + cancelToken, + params: { fileName: scriptFilePath, attrNames: cursorAtInfo.attrNames.map((x) => camelCase(x)), cursorAtAttrName, @@ -139,8 +135,8 @@ async function handleTemplateOrAttrValue( document: TextDocument, position: Position, cursorAtInfo: CursorAtAttrValueInfo | CursorAtTemplateInfo, - port: number, - vscodeCancelToken: CancellationToken, + rpcApi: RpcApi, + cancelToken: CancellationToken, ): Promise { if (!isHoverValidIdentifierChar(document, position)) { return; @@ -150,28 +146,25 @@ async function handleTemplateOrAttrValue( type: 'definition', document, cursorAtInfo, - port, onHoverFilterName: (filterName, scriptFilePath) => handleFilterName({ - port, - vscodeCancelToken, + rpcApi, + cancelToken: cancelToken, filterName, scriptFilePath, }), onHoverType: async (scriptFilePath, contextString, cursorAt) => { if (isComponentHtml(document)) { - return await getComponentTypeDefinitionApi({ - port, - vscodeCancelToken, - info: { fileName: scriptFilePath, contextString, cursorAt }, + return await rpcApi.getComponentTypeDefinitionApi({ + cancelToken, + params: { fileName: scriptFilePath, contextString, cursorAt }, }); } const ctrlInfo = getControllerNameInfo(cursorAtInfo.context); if (ctrlInfo) { - return await getControllerTypeDefinitionApi({ - port, - vscodeCancelToken: vscodeCancelToken, - info: { fileName: scriptFilePath, contextString, cursorAt, ...ctrlInfo }, + return await rpcApi.getControllerTypeDefinitionApi({ + cancelToken, + params: { fileName: scriptFilePath, contextString, cursorAt, ...ctrlInfo }, }); } }, @@ -186,21 +179,20 @@ async function handleTemplateOrAttrValue( async function handleFilterName({ filterName, scriptFilePath, - port, - vscodeCancelToken, + rpcApi, + cancelToken, }: { filterName: string; scriptFilePath?: string; - port: number; - vscodeCancelToken: CancellationToken; + rpcApi: RpcApi; + cancelToken: CancellationToken; }): Promise { if (isBuiltinFilter(filterName)) { return; } else if (scriptFilePath) { - return await getFilterNameDefinitionApi({ - port, - vscodeCancelToken, - info: { fileName: scriptFilePath, filterName }, + return await rpcApi.getFilterNameDefinitionApi({ + cancelToken, + params: { fileName: scriptFilePath, filterName }, }); } } diff --git a/packages/ng-helper-vscode/src/features/hover/index.ts b/packages/ng-helper-vscode/src/features/hover/index.ts index 5640a2b6..160ad706 100644 --- a/packages/ng-helper-vscode/src/features/hover/index.ts +++ b/packages/ng-helper-vscode/src/features/hover/index.ts @@ -7,20 +7,15 @@ import { } from '@ng-helper/shared/lib/cursorAt'; import { NgHoverInfo, type NgElementHoverInfo } from '@ng-helper/shared/lib/plugin'; import { camelCase } from 'change-case'; -import { ExtensionContext, Hover, languages, MarkdownString, TextDocument, Position, CancellationToken } from 'vscode'; +import { Hover, languages, MarkdownString, TextDocument, Position, CancellationToken } from 'vscode'; import { checkCancellation, createCancellationTokenSource, withTimeoutAndMeasure } from '../../asyncUtils'; -import { - getComponentNameOrAttrNameHoverApi, - getComponentTypeHoverApi, - getControllerTypeHoverApi, - getDirectiveHoverApi, - getFilterNameHoverApi, -} from '../../service/api'; +import type { NgContext } from '../../ngContext'; +import type { RpcApi } from '../../service/tsService/rpcApi'; import { buildCursor } from '../../utils'; import { - checkServiceAndGetScriptFilePath, getControllerNameInfo, + getCorrespondingScriptFileName, isBuiltinFilter, isComponentHtml, isComponentTagName, @@ -32,10 +27,14 @@ import { import { genBuiltinFilterHoverInfo } from './builtin'; import { onTypeHover } from './utils'; -export function registerHover(context: ExtensionContext, port: number): void { - context.subscriptions.push( +export function registerHover(ngContext: NgContext): void { + ngContext.vscodeContext.subscriptions.push( languages.registerHoverProvider('html', { async provideHover(document: TextDocument, position: Position, token: CancellationToken) { + if (!ngContext.isNgProjectDocument(document)) { + return; + } + const cancelTokenSource = createCancellationTokenSource(token); return await withTimeoutAndMeasure( 'provideHover', @@ -56,14 +55,14 @@ export function registerHover(context: ExtensionContext, port: number): void { return await handleTagNameOrAttrName( cursorAtInfo, document, - port, + ngContext.rpcApi, cancelTokenSource.token, ); case 'tagName': return await handleTagNameOrAttrName( cursorAtInfo, document, - port, + ngContext.rpcApi, cancelTokenSource.token, ); @@ -72,7 +71,7 @@ export function registerHover(context: ExtensionContext, port: number): void { return await handleTemplateOrAttrValue( document, position, - port, + ngContext.rpcApi, cancelTokenSource.token, cursorAtInfo, ); @@ -88,11 +87,11 @@ export function registerHover(context: ExtensionContext, port: number): void { async function handleTagNameOrAttrName( cursorAtInfo: CursorAtTagNameInfo | CursorAtAttrNameInfo, document: TextDocument, - port: number, + rpcApi: RpcApi, token: CancellationToken, ): Promise { if (isComponentTagName(cursorAtInfo.tagName) || cursorAtInfo.attrNames.length) { - const scriptFilePath = await checkServiceAndGetScriptFilePath(document, port); + const scriptFilePath = await getCorrespondingScriptFileName(document); if (!scriptFilePath) { return; } @@ -100,7 +99,7 @@ async function handleTagNameOrAttrName( checkCancellation(token); const fn = isComponentTagName(cursorAtInfo.tagName) ? getComponentHover : getDirectiveHover; - return await fn(scriptFilePath, toNgElementHoverInfo(cursorAtInfo), port, token); + return await fn(scriptFilePath, toNgElementHoverInfo(cursorAtInfo), rpcApi, token); } return undefined; } @@ -116,47 +115,44 @@ function handleBuiltinDirective(cursorAtAttrName: string): Hover | undefined { async function handleTemplateOrAttrValue( document: TextDocument, position: Position, - port: number, - vscodeCancelToken: CancellationToken, + rpcApi: RpcApi, + cancelToken: CancellationToken, cursorAtInfo: CursorAtAttrValueInfo | CursorAtTemplateInfo, ): Promise { if (!isHoverValidIdentifierChar(document, position)) { return; } - checkCancellation(vscodeCancelToken); + checkCancellation(cancelToken); const info = await onTypeHover({ type: 'hover', document, cursorAtInfo, - port, onHoverFilterName: async (filterName, scriptFilePath) => { - checkCancellation(vscodeCancelToken); + checkCancellation(cancelToken); return await handleFilterName({ - port, - vscodeCancelToken, + rpcApi, + cancelToken: cancelToken, filterName, scriptFilePath, }); }, onHoverType: async (scriptFilePath, contextString, cursorAt, hoverPropName) => { - checkCancellation(vscodeCancelToken); + checkCancellation(cancelToken); if (isComponentHtml(document)) { - return await getComponentTypeHoverApi({ - port, - vscodeCancelToken, - info: { fileName: scriptFilePath, contextString, cursorAt, hoverPropName }, + return await rpcApi.getComponentTypeHoverApi({ + cancelToken, + params: { fileName: scriptFilePath, contextString, cursorAt, hoverPropName }, }); } const ctrlInfo = getControllerNameInfo(cursorAtInfo.context); if (ctrlInfo) { - return await getControllerTypeHoverApi({ - port, - vscodeCancelToken: vscodeCancelToken, - info: { fileName: scriptFilePath, contextString, cursorAt, hoverPropName, ...ctrlInfo }, + return await rpcApi.getControllerTypeHoverApi({ + cancelToken, + params: { fileName: scriptFilePath, contextString, cursorAt, hoverPropName, ...ctrlInfo }, }); } }, @@ -171,16 +167,15 @@ async function handleTemplateOrAttrValue( async function getComponentHover( scriptFilePath: string, hoverInfo: NgElementHoverInfo, - port: number, - token: CancellationToken, + tsServer: RpcApi, + cancelToken: CancellationToken, ): Promise { - checkCancellation(token); + checkCancellation(cancelToken); hoverInfo.attrNames = []; // component query currently doesn't need all attribute names - const res = await getComponentNameOrAttrNameHoverApi({ - port, - vscodeCancelToken: token, - info: { fileName: scriptFilePath, hoverInfo: hoverInfo }, + const res = await tsServer.getComponentNameOrAttrNameHoverApi({ + cancelToken, + params: { fileName: scriptFilePath, hoverInfo: hoverInfo }, }); return buildHoverResult(res); } @@ -188,16 +183,15 @@ async function getComponentHover( async function getDirectiveHover( scriptFilePath: string, hoverInfo: NgElementHoverInfo, - port: number, - token: CancellationToken, + rpcApi: RpcApi, + cancelToken: CancellationToken, ): Promise { - checkCancellation(token); + checkCancellation(cancelToken); const cursorAtAttrName = hoverInfo.name; - const res = await getDirectiveHoverApi({ - port, - vscodeCancelToken: token, - info: { fileName: scriptFilePath, attrNames: hoverInfo.attrNames, cursorAtAttrName }, + const res = await rpcApi.getDirectiveHoverApi({ + cancelToken, + params: { fileName: scriptFilePath, attrNames: hoverInfo.attrNames, cursorAtAttrName }, }); return buildHoverResult(res); } @@ -205,23 +199,22 @@ async function getDirectiveHover( async function handleFilterName({ filterName, scriptFilePath, - port, - vscodeCancelToken, + rpcApi, + cancelToken, }: { filterName: string; scriptFilePath?: string; - port: number; - vscodeCancelToken: CancellationToken; + rpcApi: RpcApi; + cancelToken: CancellationToken; }): Promise { - checkCancellation(vscodeCancelToken); + checkCancellation(cancelToken); if (isBuiltinFilter(filterName)) { return genBuiltinFilterHoverInfo(filterName); } else if (scriptFilePath) { - return await getFilterNameHoverApi({ - port, - vscodeCancelToken, - info: { fileName: scriptFilePath, contextString: filterName, cursorAt: 0 }, + return await rpcApi.getFilterNameHoverApi({ + cancelToken, + params: { fileName: scriptFilePath, contextString: filterName, cursorAt: 0 }, }); } } diff --git a/packages/ng-helper-vscode/src/features/hover/utils.ts b/packages/ng-helper-vscode/src/features/hover/utils.ts index 74784342..795d6590 100644 --- a/packages/ng-helper-vscode/src/features/hover/utils.ts +++ b/packages/ng-helper-vscode/src/features/hover/utils.ts @@ -2,12 +2,13 @@ import type { CursorAtAttrValueInfo, CursorAtTemplateInfo } from '@ng-helper/sha import type { MinNgSyntaxInfo } from '@ng-helper/shared/lib/minNgSyntax'; import type { TextDocument } from 'vscode'; +import { logger } from '../../logger'; import { isComponentTagName, isNgBuiltinDirective, - checkServiceAndGetScriptFilePath, isNgUserCustomAttr, getContextString, + getCorrespondingScriptFileName, } from '../utils'; type OnHoverFilterName = (filterName: string, scriptFilePath?: string) => Promise; @@ -23,7 +24,6 @@ export async function onTypeHover({ type, document, cursorAtInfo, - port, onHoverFilterName, onHoverType, onHoverLocalType, @@ -31,7 +31,6 @@ export async function onTypeHover({ type: 'hover' | 'definition'; document: TextDocument; cursorAtInfo: CursorAtAttrValueInfo | CursorAtTemplateInfo; - port: number; onHoverFilterName: OnHoverFilterName; onHoverType: OnHoverType; onHoverLocalType?: OnHoverLocalType; @@ -55,14 +54,14 @@ export async function onTypeHover({ } if (isFilterName) { - const scriptFilePath = await checkServiceAndGetScriptFilePath(document, port); + const scriptFilePath = await getCorrespondingScriptFileName(document); return await onHoverFilterName(contextString.value, scriptFilePath); } // typeString 给 hover 用。 // location 给 definition 用。 if (onHoverLocalType && (type === 'hover' ? contextString.typeString : contextString.location)) { - console.log('onHoverLocalType: ', contextString); + logger.logInfo('onTypeHover(): onHoverLocalType: ', contextString); return onHoverLocalType(contextString); } @@ -77,7 +76,7 @@ export async function onTypeHover({ isNgBuiltinDirective(cursorAtInfo.attrName) || isNgUserCustomAttr(cursorAtInfo.attrName)); if (isTemplateValue || isAttrValueAndCompletable) { - const scriptFilePath = await checkServiceAndGetScriptFilePath(document, port); + const scriptFilePath = await getCorrespondingScriptFileName(document); if (scriptFilePath) { return await onHoverType(scriptFilePath, contextString.value, cursorAt, contextString.hoverPropName); } diff --git a/packages/ng-helper-vscode/src/features/inlineHtml/index.ts b/packages/ng-helper-vscode/src/features/inlineHtml/index.ts index 96930bb0..3de29668 100644 --- a/packages/ng-helper-vscode/src/features/inlineHtml/index.ts +++ b/packages/ng-helper-vscode/src/features/inlineHtml/index.ts @@ -9,12 +9,12 @@ import { workspace, type CompletionList, type Definition, - type ExtensionContext, type Hover, type Position, type TextDocument, } from 'vscode'; +import type { NgContext } from '../../ngContext'; import { triggerChars } from '../completion'; import { htmlSemanticProvider, legend } from '../semantic'; import { getOriginalFileName } from '../utils'; @@ -24,23 +24,24 @@ type VirtualDocumentInfo = { documentText: string; }; +const EMBEDDED_CONTENT_FLAG = 'embedded-content'; const NG_TPL_REG = /\btemplate\s*:\s*(['"`])[\s\S]*?(?!\\)(\1)/g; const MAX_COUNT = 5; const EXPIRE_TIME = 5 * 60 * 1000; const virtualDocumentContents = new Map(); -export function supportInlineHtml(context: ExtensionContext, port: number) { - registerVirtualDocumentProvider(context); +export function supportInlineHtml(ngContext: NgContext) { + registerVirtualDocumentProvider(ngContext); - providerSemantic(context, port); + providerSemantic(ngContext); - requestForwardHover(context); - requestForwardDefinition(context); - requestForwardCompletion(context); + requestForwardHover(ngContext); + requestForwardDefinition(ngContext); + requestForwardCompletion(ngContext); } -function providerSemantic(context: ExtensionContext, port: number) { - context.subscriptions.push( +function providerSemantic(ngContext: NgContext) { + ngContext.vscodeContext.subscriptions.push( languages.registerDocumentSemanticTokensProvider( [ { scheme: 'file', language: 'typescript' }, @@ -48,12 +49,16 @@ function providerSemantic(context: ExtensionContext, port: number) { ], { async provideDocumentSemanticTokens(document, token) { + if (!ngContext.isNgProjectDocument(document)) { + return; + } + const vDocText = resolveVirtualDocText(document); if (!vDocText) { return; } - return await htmlSemanticProvider({ document, port, token, noServiceRunningCheck: true }); + return await htmlSemanticProvider({ document, rpcApi: ngContext.rpcApi, token }); }, }, legend, @@ -61,8 +66,8 @@ function providerSemantic(context: ExtensionContext, port: number) { ); } -function requestForwardHover(context: ExtensionContext) { - context.subscriptions.push( +function requestForwardHover(ngContext: NgContext) { + ngContext.vscodeContext.subscriptions.push( languages.registerHoverProvider( [ { scheme: 'file', language: 'typescript' }, @@ -70,6 +75,10 @@ function requestForwardHover(context: ExtensionContext) { ], { async provideHover(document, position) { + if (!ngContext.isNgProjectDocument(document)) { + return; + } + const vDocText = resolveVirtualDocText(document, position); if (!vDocText) { return; @@ -90,8 +99,8 @@ function requestForwardHover(context: ExtensionContext) { ); } -function requestForwardDefinition(context: ExtensionContext) { - context.subscriptions.push( +function requestForwardDefinition(ngContext: NgContext) { + ngContext.vscodeContext.subscriptions.push( languages.registerDefinitionProvider( [ { scheme: 'file', language: 'typescript' }, @@ -99,6 +108,10 @@ function requestForwardDefinition(context: ExtensionContext) { ], { async provideDefinition(document, position) { + if (!ngContext.isNgProjectDocument(document)) { + return; + } + const vDocText = resolveVirtualDocText(document, position); if (!vDocText) { return; @@ -117,8 +130,8 @@ function requestForwardDefinition(context: ExtensionContext) { ); } -function requestForwardCompletion(context: ExtensionContext) { - context.subscriptions.push( +function requestForwardCompletion(ngContext: NgContext) { + ngContext.vscodeContext.subscriptions.push( languages.registerCompletionItemProvider( [ { scheme: 'file', language: 'typescript' }, @@ -126,6 +139,10 @@ function requestForwardCompletion(context: ExtensionContext) { ], { async provideCompletionItems(document, position, _, ctx) { + if (!ngContext.isNgProjectDocument(document)) { + return; + } + const vDocText = resolveVirtualDocText(document, position); if (!vDocText) { return; @@ -146,9 +163,9 @@ function requestForwardCompletion(context: ExtensionContext) { ); } -function registerVirtualDocumentProvider(context: ExtensionContext) { - context.subscriptions.push( - workspace.registerTextDocumentContentProvider('embedded-content', { +function registerVirtualDocumentProvider(ngContext: NgContext) { + ngContext.vscodeContext.subscriptions.push( + workspace.registerTextDocumentContentProvider(EMBEDDED_CONTENT_FLAG, { provideTextDocumentContent: (uri) => { const originalUri = getOriginalFileName(uri.path); const decodedUri = decodeURIComponent(originalUri); @@ -166,7 +183,7 @@ function prepareVirtualDocument(document: TextDocument, vDocText: string) { documentText: vDocText, }); gc(); - const vDocUriStr = `embedded-content://html/${encodeURIComponent(originalUri)}.html`; + const vDocUriStr = `${EMBEDDED_CONTENT_FLAG}://html/${encodeURIComponent(originalUri)}.html`; const vDocUri = Uri.parse(vDocUriStr); return vDocUri; } diff --git a/packages/ng-helper-vscode/src/features/link/controllerNameLink.ts b/packages/ng-helper-vscode/src/features/link/controllerNameLink.ts index 9a4fa5cb..7bf4dd5c 100644 --- a/packages/ng-helper-vscode/src/features/link/controllerNameLink.ts +++ b/packages/ng-helper-vscode/src/features/link/controllerNameLink.ts @@ -1,6 +1,6 @@ import { type TextDocument, Range, Uri, type CancellationToken } from 'vscode'; -import { getControllerNameDefinitionApi } from '../../service/api'; +import type { RpcApi } from '../../service/tsService/rpcApi'; import { isFileExistsOnWorkspace } from '../../utils'; import type { MyLink } from '.'; @@ -40,12 +40,11 @@ export function findControllerNameLink(text: string, document: TextDocument): My export async function resolveControllerNameLink( link: MyLink, token: CancellationToken, - port: number, + rpcApi: RpcApi, ): Promise { - const result = await getControllerNameDefinitionApi({ - port, - vscodeCancelToken: token, - info: { fileName: link.fileName, controllerName: link.url }, + const result = await rpcApi.getControllerNameDefinitionApi({ + cancelToken: token, + params: { fileName: link.fileName, controllerName: link.url }, }); if (result && (await isFileExistsOnWorkspace(Uri.file(result.filePath)))) { diff --git a/packages/ng-helper-vscode/src/features/link/index.ts b/packages/ng-helper-vscode/src/features/link/index.ts index 350f683d..b495c90f 100644 --- a/packages/ng-helper-vscode/src/features/link/index.ts +++ b/packages/ng-helper-vscode/src/features/link/index.ts @@ -1,4 +1,6 @@ -import { type ExtensionContext, languages, type TextDocument, type DocumentLink, type CancellationToken } from 'vscode'; +import { languages, type TextDocument, type DocumentLink, type CancellationToken } from 'vscode'; + +import type { NgContext } from '../../ngContext'; import { findControllerNameLink, resolveControllerNameLink } from './controllerNameLink'; import { findTemplateUrlLink, resolveTemplateUrlLink } from './templateUrlLink'; @@ -9,8 +11,8 @@ export type MyLink = DocumentLink & { url: string; }; -export function registerLink(context: ExtensionContext, port: number) { - context.subscriptions.push( +export function registerLink(ngContext: NgContext) { + ngContext.vscodeContext.subscriptions.push( languages.registerDocumentLinkProvider( [ { scheme: 'file', language: 'javascript' }, @@ -18,6 +20,10 @@ export function registerLink(context: ExtensionContext, port: number) { ], { provideDocumentLinks: function (document: TextDocument): MyLink[] { + if (!ngContext.isNgProjectDocument(document)) { + return []; + } + const text = document.getText(); return [...findControllerNameLink(text, document), ...findTemplateUrlLink(text, document)]; }, @@ -29,7 +35,7 @@ export function registerLink(context: ExtensionContext, port: number) { case 'templateUrl': return await resolveTemplateUrlLink(link); case 'controllerName': - return await resolveControllerNameLink(link, token, port); + return await resolveControllerNameLink(link, token, ngContext.rpcApi); } }, }, diff --git a/packages/ng-helper-vscode/src/features/semantic/index.ts b/packages/ng-helper-vscode/src/features/semantic/index.ts index 57ce6d25..86d56d5c 100644 --- a/packages/ng-helper-vscode/src/features/semantic/index.ts +++ b/packages/ng-helper-vscode/src/features/semantic/index.ts @@ -13,35 +13,35 @@ import { SemanticTokensBuilder, Range, languages, - type ExtensionContext, type TextDocument, type CancellationToken, } from 'vscode'; import { checkCancellation, createCancellationTokenSource, withTimeoutAndMeasure } from '../../asyncUtils'; -import { listComponentsStringAttrs, listDirectivesStringAttrs } from '../../service/api'; +import { logger } from '../../logger'; +import type { NgContext } from '../../ngContext'; +import type { RpcApi } from '../../service/tsService/rpcApi'; import { intersect, uniq } from '../../utils'; -import { - checkServiceAndGetScriptFilePath, - getCorrespondingScriptFileName, - isComponentTagName, - isNgUserCustomAttr, -} from '../utils'; +import { getCorrespondingScriptFileName, isComponentTagName, isNgUserCustomAttr } from '../utils'; const tokenTypes = ['string']; export const legend = new SemanticTokensLegend(tokenTypes); -export function registerSemantic(context: ExtensionContext, port: number) { +export function registerSemantic(ngContext: NgContext) { const disposable = languages.registerDocumentSemanticTokensProvider( 'html', { - provideDocumentSemanticTokens(document, token): Promise { - const cancelTokenSource = createCancellationTokenSource(token); - return withTimeoutAndMeasure( + async provideDocumentSemanticTokens(document, token): Promise { + if (!ngContext.isNgProjectDocument(document)) { + return; + } + + const tokenSource = createCancellationTokenSource(token); + return await withTimeoutAndMeasure( 'provideSemantic', - () => htmlSemanticProvider({ document, port, token: cancelTokenSource.token }), + () => htmlSemanticProvider({ document, rpcApi: ngContext.rpcApi, token: tokenSource.token }), { - cancelTokenSource, + cancelTokenSource: tokenSource, silent: true, }, ); @@ -50,19 +50,17 @@ export function registerSemantic(context: ExtensionContext, port: number) { legend, ); - context.subscriptions.push(disposable); + ngContext.vscodeContext.subscriptions.push(disposable); } export async function htmlSemanticProvider({ document, - port, + rpcApi, token, - noServiceRunningCheck, }: { document: TextDocument; - port: number; + rpcApi: RpcApi; token: CancellationToken; - noServiceRunningCheck?: boolean; }) { const tokensBuilder = new SemanticTokensBuilder(legend); @@ -74,11 +72,9 @@ export async function htmlSemanticProvider({ checkCancellation(token); - const scriptFilePath = noServiceRunningCheck - ? (await getCorrespondingScriptFileName(document))! - : await checkServiceAndGetScriptFilePath(document, port); + const scriptFilePath = await getCorrespondingScriptFileName(document); if (!scriptFilePath) { - console.warn('scriptFilePath not found or tsserver not running!'); + logger.logWarning('htmlSemanticProvider() "scriptFilePath" not found!'); return; } @@ -94,10 +90,9 @@ export async function htmlSemanticProvider({ if (componentNames.length) { promiseArr.push( (async () => { - const componentsStringAttrs = await listComponentsStringAttrs({ - port, - vscodeCancelToken: token, - info: { componentNames, fileName: scriptFilePath }, + const componentsStringAttrs = await rpcApi.listComponentsStringAttrs({ + cancelToken: token, + params: { componentNames, fileName: scriptFilePath }, }); if (componentsStringAttrs) { fillComponentSemanticTokens({ @@ -113,10 +108,9 @@ export async function htmlSemanticProvider({ if (maybeDirectiveNames.length) { promiseArr.push( (async () => { - const directivesStringAttrs = await listDirectivesStringAttrs({ - port, - vscodeCancelToken: token, - info: { maybeDirectiveNames, fileName: scriptFilePath }, + const directivesStringAttrs = await rpcApi.listDirectivesStringAttrs({ + cancelToken: token, + params: { maybeDirectiveNames, fileName: scriptFilePath }, }); if (directivesStringAttrs) { fillDirectiveSemanticTokens({ diff --git a/packages/ng-helper-vscode/src/features/statusBar/index.ts b/packages/ng-helper-vscode/src/features/statusBar/index.ts new file mode 100644 index 00000000..46896083 --- /dev/null +++ b/packages/ng-helper-vscode/src/features/statusBar/index.ts @@ -0,0 +1,8 @@ +import type { NgContext } from '../../ngContext'; +import type { StateControl } from '../../service/stateControl'; + +import { ngHelperStatusBar } from './ngHelperStatusBar'; + +export function registerStatusBar(ngContext: NgContext, stateControl: StateControl) { + ngContext.vscodeContext.subscriptions.push(ngHelperStatusBar(ngContext, stateControl)); +} diff --git a/packages/ng-helper-vscode/src/features/statusBar/ngHelperStatusBar.ts b/packages/ng-helper-vscode/src/features/statusBar/ngHelperStatusBar.ts new file mode 100644 index 00000000..40444336 --- /dev/null +++ b/packages/ng-helper-vscode/src/features/statusBar/ngHelperStatusBar.ts @@ -0,0 +1,121 @@ +import { StatusBarAlignment, ThemeColor, window, type TextEditor } from 'vscode'; + +import { logger } from '../../logger'; +import type { NgContext } from '../../ngContext'; +import type { BarStatus, StateControl } from '../../service/stateControl'; +import { getLastFolderName } from '../../utils'; +import { getNormalizedPathFromDocument } from '../utils'; + +const myLogger = logger.prefixWith('ngHelperStatusBar'); + +export function ngHelperStatusBar(ngContext: NgContext, stateControl: StateControl) { + const statusBarItem = window.createStatusBarItem(StatusBarAlignment.Right, 10); + + let visible = false; + let currentNgProjectName = ''; + let currentTsServerStatus: BarStatus = 'disconnect'; + let loadedTsProjectRootPaths: string[] = []; + + // 初始渲染 + renderWithActiveTextEditor(window.activeTextEditor); + + // 依据当前激活文件决定是否显示 status bar + window.onDidChangeActiveTextEditor(renderWithActiveTextEditor); + + // 订阅 tsserver 状态,并更新 status bar + stateControl.notifyStatusBar((tsServerStatus, tsProjectRoots) => { + currentTsServerStatus = tsServerStatus; + loadedTsProjectRootPaths = tsProjectRoots; + renderBarItem(); + }); + + return statusBarItem; + + function renderWithActiveTextEditor(editor: TextEditor | undefined) { + if (!editor) { + visible = false; + currentNgProjectName = ''; + } else { + visible = ngContext.isNgProjectDocument(editor.document); + const filePath = getNormalizedPathFromDocument(editor.document); + currentNgProjectName = ngContext.config.getNgProject(filePath)?.name || ''; + } + + myLogger.logInfo('currentNgProjectName:', currentNgProjectName); + + renderBarItem(); + } + + function renderBarItem() { + if (!visible) { + statusBarItem.hide(); + return; + } + + switch (currentTsServerStatus) { + case 'disconnect': + setDisconnected(); + break; + case 'loading': + setLoading(); + break; + case 'connected': + setStatusByCurrentNgProject(); + break; + default: + break; + } + statusBarItem.show(); + } + + function setDisconnected() { + statusBarItem.text = '$(x) NgHelper'; + statusBarItem.tooltip = 'Lost connection to tsserver.'; + statusBarItem.color = new ThemeColor('statusBarItem.errorForeground'); + statusBarItem.backgroundColor = new ThemeColor('statusBarItem.errorBackground'); + } + + function setLoading() { + statusBarItem.text = '$(sync~spin) NgHelper'; + if (currentNgProjectName) { + statusBarItem.tooltip = `Load the TypeScript project for AngularJS project "${currentNgProjectName}".`; + } else { + statusBarItem.tooltip = 'Load TypeScript project.'; + } + statusBarItem.color = new ThemeColor('statusBarItem.foreground'); + statusBarItem.backgroundColor = new ThemeColor('statusBarItem.background'); + } + + function setStatusByCurrentNgProject() { + const ngProjectNames = getLoadedProjectNames(loadedTsProjectRootPaths); + + const loadedProjectStr = ngProjectNames.map((n) => `"${n}"`).join(','); + + if (!currentNgProjectName) { + statusBarItem.text = '$(check) NgHelper'; + statusBarItem.tooltip = `Ready. Loaded js/ts projects: ${loadedProjectStr}.`; + statusBarItem.color = new ThemeColor('statusBarItem.foreground'); + statusBarItem.backgroundColor = new ThemeColor('statusBarItem.background'); + } else if (ngProjectNames.includes(currentNgProjectName)) { + statusBarItem.text = '$(check) NgHelper'; + statusBarItem.tooltip = `Ready for "${currentNgProjectName}". Loaded projects: ${loadedProjectStr}.`; + statusBarItem.color = new ThemeColor('statusBarItem.foreground'); + statusBarItem.backgroundColor = new ThemeColor('statusBarItem.background'); + } else { + statusBarItem.text = '$(alert) NgHelper'; + statusBarItem.tooltip = `Not ready for "${currentNgProjectName}". Loaded projects: ${loadedProjectStr}.`; + statusBarItem.color = new ThemeColor('statusBarItem.warningForeground'); + statusBarItem.backgroundColor = new ThemeColor('statusBarItem.warningBackground'); + } + } + + function getLoadedProjectNames(tsProjectRoots: string[]): string[] { + if (ngContext.config.hasProjectConfig) { + return tsProjectRoots + .map((p) => ngContext.config.getNgProjectByTsProjectPath(p)?.name) + .filter((x) => !!x) as string[]; + } else { + return tsProjectRoots.map((p) => getLastFolderName(p)); + } + } +} diff --git a/packages/ng-helper-vscode/src/features/utils.ts b/packages/ng-helper-vscode/src/features/utils.ts index 9f8914dc..1b3ff0dd 100644 --- a/packages/ng-helper-vscode/src/features/utils.ts +++ b/packages/ng-helper-vscode/src/features/utils.ts @@ -10,7 +10,8 @@ import { camelCase } from 'change-case'; import fuzzysort from 'fuzzysort'; import { Range, TextDocument, Uri, type Position } from 'vscode'; -import { checkNgHelperServerRunning, getScriptFiles, isFileExistsOnWorkspace, normalizePath } from '../utils'; +import { logger } from '../logger'; +import { getScriptFiles, isFileExistsOnWorkspace, normalizePath } from '../utils'; export function isInlinedHtml(document: TextDocument): boolean { const fileName = document.fileName; @@ -42,8 +43,28 @@ export function getNgCtrlInfo(text: string): NgCtrlInfo { }; } +/** + * 这个考虑了嵌入式文档等情况。 + */ +export function getNormalizedPathFromDocument(document: TextDocument): string { + let filePath = document.fileName; + if (isInlinedHtml(document)) { + const originalPath = getOriginalFileName(document.fileName); + if (os.platform() === 'win32') { + // Here do not use normalizePath() + filePath = originalPath.replace(/\\/g, '/').slice('file:///'.length); + } else { + filePath = originalPath.slice('file://'.length); + } + } + return normalizePath(filePath); +} + export function getOriginalFileName(fileName: string): string { // Remove leading `/` and ending `.html` to get original path. + // for example: + // input: /file:///d:/workdir/test/app/xyz.ts.html' + // output: file:///d:/workdir/test/app/xyz.ts const originalPath = fileName.slice(1).slice(0, -5); return originalPath; } @@ -52,38 +73,28 @@ export async function getCorrespondingScriptFileName( document: TextDocument, searchKey?: string, ): Promise { - if (isInlinedHtml(document)) { - const originalPath = getOriginalFileName(document.fileName); - let path = originalPath; - if (os.platform() === 'win32') { - // Here do not use normalizePath() - path = path.replace(/\\/g, '/').slice('file:///'.length); - } else { - path = path.slice('file://'.length); - } - return normalizePath(path); - } + const filePath = getNormalizedPathFromDocument(document); if (isComponentHtml(document)) { // remove .html add .ts - const tsFilePath = document.fileName.slice(0, -5) + '.ts'; + const tsFilePath = filePath.slice(0, -5) + '.ts'; if (await isFileExistsOnWorkspace(Uri.file(tsFilePath))) { return tsFilePath; } // remove .html add .js - const jsFilePath = document.fileName.slice(0, -5) + '.js'; + const jsFilePath = filePath.slice(0, -5) + '.js'; if (await isFileExistsOnWorkspace(Uri.file(jsFilePath))) { return jsFilePath; } } - const scriptFiles = await getScriptFiles(document.fileName, { fallbackCnt: 4, limit: searchKey ? undefined : 1 }); + const scriptFiles = await getScriptFiles(filePath, { fallbackCnt: 4, limit: searchKey ? undefined : 1 }); if (searchKey) { const result = fuzzysort.go(searchKey, scriptFiles, { limit: 1 }); if (result.length) { const scriptFilePath = result[0].target; - console.log('getCorrespondingTsFileName() fuzzy search result:', scriptFilePath); + logger.logInfo('getCorrespondingTsFileName() fuzzy search result:', scriptFilePath); return scriptFilePath; } } @@ -159,19 +170,6 @@ export function isComponentTagName(name: string): boolean { return name.includes('-') || !isHtmlTagName(name); } -export async function checkServiceAndGetScriptFilePath( - document: TextDocument, - port: number, -): Promise { - const scriptFilePath = (await getCorrespondingScriptFileName(document))!; - - if (!(await checkNgHelperServerRunning(scriptFilePath, port))) { - return; - } - - return scriptFilePath; -} - export function toNgElementHoverInfo(cursorAtInfo: CursorAtInfo): NgElementHoverInfo { const { type } = cursorAtInfo; if (type !== 'tagName' && type !== 'attrName') { diff --git a/packages/ng-helper-vscode/src/logger.ts b/packages/ng-helper-vscode/src/logger.ts new file mode 100644 index 00000000..c48cac94 --- /dev/null +++ b/packages/ng-helper-vscode/src/logger.ts @@ -0,0 +1,51 @@ +export type LogLevel = 'E' | 'W' | 'I' | 'D'; // E: error, W: warning, I: info, D: debug + +// eslint-disable-next-line @typescript-eslint/no-unused-vars +function logFilter(level: LogLevel, prefix: string[], logContent: unknown[]): boolean { + // 在这里可以实现日志过滤逻辑 + if (level === 'D' && !prefix.includes('StateControl')) { + // 排除 debug 级别的日志 + return false; + } + return true; +} + +class Logger { + constructor(private readonly prefix: string[] = []) {} + + prefixWith(...prefix: string[]): Logger { + return new Logger([...this.prefix, ...prefix]); + } + + logError(...logContent: unknown[]): void { + this.log('E', ...logContent); + } + + logWarning(...logContent: unknown[]): void { + this.log('W', ...logContent); + } + + logInfo(...logContent: unknown[]): void { + this.log('I', ...logContent); + } + + logDebug(...logContent: unknown[]): void { + this.log('D', ...logContent); + } + + private log(level: LogLevel, ...logContent: unknown[]): void { + if (!logFilter(level, this.prefix, logContent)) { + return; + } + // 取时间 2025-06-07T10:44:04.248Z => 10:44:04.248 + const time = new Date().toISOString().slice(11, -1); + + const prefixString = this.prefix.length > 0 ? `[${this.prefix.join(' ')}]` : ''; + + // 输出格式: E 10:44:04.248 [RpcProcess RpcServer] ...logContent + const logs = [`[${level}]`, time, prefixString, ...logContent]; + console.log(...logs); + } +} + +export const logger = new Logger(); diff --git a/packages/ng-helper-vscode/src/ngContext.ts b/packages/ng-helper-vscode/src/ngContext.ts new file mode 100644 index 00000000..a6c03c55 --- /dev/null +++ b/packages/ng-helper-vscode/src/ngContext.ts @@ -0,0 +1,18 @@ +import type { ExtensionContext, TextDocument } from 'vscode'; + +import type { NgHelperConfig } from './config'; +import { getNormalizedPathFromDocument } from './features/utils'; +import type { RpcApi } from './service/tsService/rpcApi'; + +export class NgContext { + constructor( + public vscodeContext: ExtensionContext, + public config: NgHelperConfig, + public rpcApi: RpcApi, + ) {} + + isNgProjectDocument(document: TextDocument): boolean { + const filePath = getNormalizedPathFromDocument(document); + return this.config.isNgProjectFile(filePath); + } +} diff --git a/packages/ng-helper-vscode/src/service/api.ts b/packages/ng-helper-vscode/src/service/api.ts deleted file mode 100644 index 2f366922..00000000 --- a/packages/ng-helper-vscode/src/service/api.ts +++ /dev/null @@ -1,315 +0,0 @@ -import { - NgTypeCompletionRequest, - NgTypeCompletionResponse, - NgComponentAttrCompletionRequest, - NgHoverRequest, - NgHoverResponse, - NgRequest, - NgResponse, - NgComponentNameCompletionResponse, - NgComponentAttrCompletionResponse, - NgCtrlTypeCompletionRequest, - NgCtrlHoverRequest, - NgComponentNameOrAttrNameHoverRequest, - type NgComponentNameOrAttrNameDefinitionRequest, - type NgDefinitionResponse, - type NgTypeDefinitionRequest, - type NgCtrlTypeDefinitionRequest, - type NgListComponentsStringAttrsRequest, - type NgComponentsStringAttrsResponse, - type NgDirectiveCompletionRequest, - type NgDirectiveCompletionResponse, - type NgDirectiveHoverRequest, - type NgDirectiveDefinitionRequest, - type NgControllerNameDefinitionRequest, - type NgListDirectivesStringAttrsRequest, - type NgDirectivesStringAttrsResponse, - type NgFilterNameDefinitionRequest, -} from '@ng-helper/shared/lib/plugin'; -import axios, { CancelToken } from 'axios'; -import { CancellationToken } from 'vscode'; - -import { normalizePath, triggerTsServerByProject } from '../utils'; - -interface ApiInput { - port: number; - info: T; - vscodeCancelToken: CancellationToken; -} - -interface BizRequestInput { - url: string; - info: T; - apiName: string; - vscodeCancelToken: CancellationToken; -} - -export function listDirectivesStringAttrs({ - port, - vscodeCancelToken, - info, -}: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'directives', 'string', 'attrs'), - info, - vscodeCancelToken, - apiName: 'listDirectivesStringAttrs', - }); -} - -export function listComponentsStringAttrs({ - port, - vscodeCancelToken, - info, -}: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'components', 'string', 'attrs'), - info, - vscodeCancelToken, - apiName: 'listComponentsStringAttrs', - }); -} - -export function getFilterNameDefinitionApi({ port, vscodeCancelToken, info }: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'filter', 'name', 'definition'), - info, - vscodeCancelToken, - apiName: 'getFilterNameDefinitionApi', - }); -} - -export function getControllerNameDefinitionApi({ - port, - vscodeCancelToken, - info, -}: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'controller', 'name', 'definition'), - info, - vscodeCancelToken, - apiName: 'getControllerNameDefinitionApi', - }); -} - -export function getDirectiveDefinitionApi({ port, vscodeCancelToken, info }: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'directive', 'definition'), - info, - vscodeCancelToken, - apiName: 'getDirectiveDefinitionApi', - }); -} - -export function getControllerTypeDefinitionApi({ - port, - vscodeCancelToken, - info, -}: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'controller', 'type', 'definition'), - info, - vscodeCancelToken, - apiName: 'getControllerTypeDefinitionApi', - }); -} - -export function getComponentTypeDefinitionApi({ port, vscodeCancelToken, info }: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'component', 'type', 'definition'), - info, - vscodeCancelToken, - apiName: 'getComponentTypeDefinitionApi', - }); -} - -export function getComponentNameOrAttrNameDefinitionApi({ - port, - vscodeCancelToken, - info, -}: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'component', info.hoverInfo.type === 'attrName' ? 'attr' : 'name', 'definition'), - info, - vscodeCancelToken, - apiName: 'getComponentNameOrAttrNameDefinitionApi', - }); -} - -export function getControllerTypeHoverApi({ port, vscodeCancelToken, info }: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'controller', 'type', 'hover'), - info, - vscodeCancelToken, - apiName: 'getControllerTypeHoverApi', - }); -} - -export function getComponentTypeHoverApi({ port, vscodeCancelToken, info }: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'component', 'type', 'hover'), - info, - vscodeCancelToken, - apiName: 'getComponentTypeHoverApi', - }); -} - -export function getComponentNameOrAttrNameHoverApi({ - port, - vscodeCancelToken, - info, -}: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'component', info.hoverInfo.type === 'attrName' ? 'attr' : 'name', 'hover'), - info, - vscodeCancelToken, - apiName: 'getComponentNameOrAttrNameHoverApi', - }); -} - -export function getDirectiveHoverApi({ port, vscodeCancelToken, info }: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'directive', 'hover'), - info, - vscodeCancelToken, - apiName: 'getDirectiveHoverApi', - }); -} - -export function getFilterNameHoverApi({ port, vscodeCancelToken, info }: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'filter', 'name', 'hover'), - info, - vscodeCancelToken, - apiName: 'getFilterNameHoverApi', - }); -} - -export function getFilterNameCompletionApi({ port, vscodeCancelToken, info }: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'filter', 'name', 'completion'), - info, - vscodeCancelToken, - apiName: 'getFilterNameCompletionApi', - }); -} - -export function getControllerTypeCompletionApi({ - port, - vscodeCancelToken, - info, -}: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'controller', 'type', 'completion'), - info, - vscodeCancelToken, - apiName: 'getControllerTypeCompletionApi', - }); -} - -export function getDirectiveCompletionApi({ port, vscodeCancelToken, info }: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'directive', 'completion'), - info, - vscodeCancelToken, - apiName: 'getDirectiveCompletionApi', - }); -} - -export function getComponentTypeCompletionApi({ port, vscodeCancelToken, info }: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'component', 'type', 'completion'), - info, - vscodeCancelToken, - apiName: 'getComponentTypeCompletionApi', - }); -} - -export function getComponentNameCompletionApi({ port, vscodeCancelToken, info }: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'component', 'name', 'completion'), - info, - vscodeCancelToken, - apiName: 'getComponentNameCompletionApi', - }); -} - -export function getComponentAttrCompletionApi({ - port, - vscodeCancelToken, - info, -}: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'component', 'attr', 'completion'), - info, - vscodeCancelToken, - apiName: 'getComponentAttrCompletionApi', - }); -} - -export function getComponentControllerAsApi({ port, vscodeCancelToken, info }: ApiInput) { - return bizRequest({ - url: buildUrl(port, 'component', 'controller-as'), - info, - vscodeCancelToken, - apiName: 'getComponentControllerAsApi', - }); -} - -export async function checkNgHelperServerRunningApi(port: number): Promise { - try { - await axios.get(buildUrl(port, 'hc')); - return true; - } catch (_) { - console.warn('checkNgHelperServerRunningApi() failed.'); - return false; - } -} - -async function bizRequest({ - vscodeCancelToken, - info, - url, - apiName, -}: BizRequestInput) { - console.group(`[api] ${apiName}()`); - try { - info.fileName = normalizePath(info.fileName); - console.debug(`${apiName}() request: `, info); - const result = await axios.post>(url, info, { - cancelToken: getAxiosCancelToken(vscodeCancelToken), - }); - console.debug(`${apiName}() result: `, result.data); - if (result.data.errKey === 'NO_CONTEXT') { - await triggerTsServerByProject(info.fileName); - return; - } - return result.data.data!; - } catch (error) { - if (axios.isCancel(error)) { - console.log(`${apiName}() cancelled by vscode.`); - } else { - console.error(`${apiName}() failed: `, error); - } - } finally { - console.groupEnd(); - } -} - -function getAxiosCancelToken(vscodeCancelToken: CancellationToken): CancelToken { - const axiosCancelToken = axios.CancelToken.source(); - - vscodeCancelToken.onCancellationRequested(() => { - axiosCancelToken.cancel('Operation cancelled by VS Code'); - }); - - return axiosCancelToken.token; -} - -function buildUrl(port: number, ...uris: string[]) { - if (!port) { - throw new Error('port is required'); - } - const url = [`http://localhost:${port}/ng-helper`, ...uris].join('/'); - return url; -} diff --git a/packages/ng-helper-vscode/src/service/config.ts b/packages/ng-helper-vscode/src/service/configTsPlugin.ts similarity index 52% rename from packages/ng-helper-vscode/src/service/config.ts rename to packages/ng-helper-vscode/src/service/configTsPlugin.ts index be256638..398900a4 100644 --- a/packages/ng-helper-vscode/src/service/config.ts +++ b/packages/ng-helper-vscode/src/service/configTsPlugin.ts @@ -1,9 +1,10 @@ -import { NgPluginConfiguration } from '@ng-helper/shared/lib/plugin'; +import { NgPluginConfiguration, type InjectionCheckMode } from '@ng-helper/shared/lib/plugin'; import getPort from 'get-port'; import * as vscode from 'vscode'; -import type { NgHelperConfig } from '../activate'; +import type { NgHelperUserConfig } from '../config'; import { pluginId, typeScriptExtensionId } from '../constants'; +import { logger } from '../logger'; /** * see https://github.com/Microsoft/vscode/blob/main/extensions/typescript-language-features/src/api.ts @@ -21,7 +22,7 @@ interface Api { export async function configTsPluginConfiguration( defaultPort: number, - config: NgHelperConfig, + config: NgHelperUserConfig, ): Promise { const extension = vscode.extensions.getExtension(typeScriptExtensionId); if (!extension) { @@ -39,14 +40,33 @@ export async function configTsPluginConfiguration( return; } - const port = await getPort({ - port: defaultPort, - }); + const port = await getPort({ port: defaultPort }); + const configuration = buildTsPluginConfiguration(port, config); + + logger.logInfo('====> ts plugin config: ', configuration); + + api.configurePlugin(pluginId, configuration); + + return port; +} + +function buildTsPluginConfiguration(port: number, config: NgHelperUserConfig): NgPluginConfiguration { const configuration: NgPluginConfiguration = { port, - injectionCheckMode: config.injectionCheckMode, + injectionCheckMode: config.injectionCheckMode as InjectionCheckMode, }; - api.configurePlugin(pluginId, configuration); - return port; + if (config.ngProjects) { + const mappingList: NgPluginConfiguration['projectMappings'] = []; + for (const p of config.ngProjects) { + mappingList.push({ + tsProjectPath: p.dependOnTsProjectPath!, + ngProjectPath: p.path, + }); + } + + configuration.projectMappings = mappingList; + } + + return configuration; } diff --git a/packages/ng-helper-vscode/src/service/processMessage.ts b/packages/ng-helper-vscode/src/service/processMessage.ts new file mode 100644 index 00000000..e63f7790 --- /dev/null +++ b/packages/ng-helper-vscode/src/service/processMessage.ts @@ -0,0 +1,19 @@ +import type { State } from './stateControl'; + +export type ProcessMessageType = 'control' | 'query' | 'report'; + +export type ProcessMessage = { + type: ProcessMessageType; + data: D; + timestamp: number; +}; + +export type ProcessControlData = { + type: 'startWsServer' | 'exit'; + port?: number; +}; + +export type ProcessReportData = { + state: State; + path?: string; +}; diff --git a/packages/ng-helper-vscode/src/service/rpcServer/rpcProcess.ts b/packages/ng-helper-vscode/src/service/rpcServer/rpcProcess.ts new file mode 100644 index 00000000..257ec57f --- /dev/null +++ b/packages/ng-helper-vscode/src/service/rpcServer/rpcProcess.ts @@ -0,0 +1,54 @@ +import type { ProcessReportData, ProcessControlData, ProcessMessage, ProcessMessageType } from '../processMessage'; + +import { RpcServer } from './rpcServer'; +import { rpcProcessLogger } from './utils'; + +const logger = rpcProcessLogger; + +let rpcServer: RpcServer | null = null; + +process.on('message', (message: ProcessMessage) => { + logger.logDebug(`Received message from parent process: ${JSON.stringify(message)}`); + + if (message.type === 'control') { + const data = message.data as ProcessControlData; + if (data.type === 'startWsServer') { + initRpcServer(data); + } else if (data.type === 'exit') { + rpcServer?.dispose(); + process.exit(0); + } + } else if (message.type === 'query') { + if (rpcServer) { + rpcServer.send(message.data as string); + } else { + sendReportMessage({ state: 'canNotQuery' }); + } + } +}); + +function initRpcServer(data: ProcessControlData): void { + if (!rpcServer) { + rpcServer = new RpcServer(data.port!); + rpcServer.addEventListener('message', sendQueryResponse); + rpcServer.addEventListener('report', sendReportMessage); + } +} + +function sendReportMessage(data: ProcessReportData): void { + sendMessageToParent('report', data); +} + +function sendQueryResponse(message: string): void { + sendMessageToParent('query', message); +} + +function sendMessageToParent(type: ProcessMessageType, data: T): void { + const message: ProcessMessage = { + type, + data, + timestamp: Date.now(), + }; + logger.logDebug(`Sending message to parent process: ${JSON.stringify(message)}`); + process.send?.(message); +} diff --git a/packages/ng-helper-vscode/src/service/rpcServer/rpcServer.ts b/packages/ng-helper-vscode/src/service/rpcServer/rpcServer.ts new file mode 100644 index 00000000..6660347e --- /dev/null +++ b/packages/ng-helper-vscode/src/service/rpcServer/rpcServer.ts @@ -0,0 +1,174 @@ +import { parseRpcMessage, RPC_HEARTBEAT_INTERVAL, RpcServeType } from '@ng-helper/shared/lib/rpc'; +import { Disposable } from 'vscode'; +import WebSocket from 'ws'; + +import type { ProcessReportData } from '../processMessage'; +import type { State } from '../stateControl'; + +import { rpcProcessLogger } from './utils'; + +const logger = rpcProcessLogger.prefixWith('RpcServer'); + +interface Ws extends WebSocket { + serveType?: RpcServeType; +} + +type RpcServerEvent = 'message' | 'report'; +type RpcServerMessageListener = (data: string) => void; +type ProcessReportListener = (data: ProcessReportData) => void; + +type RpcServerListener = T extends 'message' + ? RpcServerMessageListener + : T extends 'report' + ? ProcessReportListener + : never; + +export class RpcServer implements Disposable { + private _wss: WebSocket.Server; + private _ws: Ws | null = null; + private _listeners: Map[]> = new Map(); + + constructor(port: number) { + logger.logInfo(`start ws server on port: ${port}`); + this._wss = new WebSocket.Server({ port }); + this.initServer(); + } + + send(message: string) { + if (!this.ws || this.ws.readyState !== WebSocket.OPEN) { + logger.logWarning(`Cannot send message, ws is not connected.`); + return; + } + + logger.logDebug(`Sending message: ${message}`); + this.ws.send(message); + } + + addEventListener(event: T, listener: RpcServerListener) { + const listeners = this._listeners.get(event) || []; + listeners.push(listener); + this._listeners.set(event, listeners); + + return () => { + const currentListeners = this._listeners.get(event); + if (currentListeners) { + this._listeners.set( + event, + currentListeners.filter((l) => l !== listener), + ); + } + }; + } + + dispose() { + this._listeners.clear(); + this._wss.close(); + } + + private get ws() { + return this._ws; + } + + private set ws(v) { + this._ws = v; + this.report(v ? 'connected' : 'disconnect'); + } + + private report(state: State, path?: string) { + this._listeners.get('report')?.forEach((listener) => { + (listener as ProcessReportListener)({ state, path }); + }); + } + + private receiveMessage(message: string) { + this._listeners.get('message')?.forEach((listener) => { + (listener as RpcServerMessageListener)(message); + }); + } + + private initServer() { + this._wss.on('connection', (ws: Ws) => { + logger.logDebug(`ws connected!`); + + ws.once('message', (message) => { + // eslint-disable-next-line @typescript-eslint/no-base-to-string + const msgStr = message.toString('utf8'); + + logger.logDebug(`Received initial message: ${msgStr}`); + + const msg = parseRpcMessage('auth', msgStr); + if (!msg || msg.data.serveType !== 'srv') { + logger.logWarning(`Terminate invalid ws.`); + ws.terminate(); + return; + } + + ws.serveType = msg.data.serveType; + this.initTargetWs(ws); + }); + }); + + this._wss.on('error', (error) => { + logger.logError(`wss error:`, error); + }); + + this._wss.on('close', () => { + logger.logInfo(`wss close!`); + this.removeTargetWs(); + }); + } + + private initTargetWs(ws: Ws) { + this.ws?.terminate(); + + this.ws = ws; + + this.handleWsHeartbeat(ws); + + ws.on('message', (message) => { + // eslint-disable-next-line @typescript-eslint/no-base-to-string + const msgStr = message.toString('utf8'); + logger.logDebug(`Received ws message: ${msgStr}`); + this.receiveMessage(msgStr); + }); + ws.on('error', (error) => { + logger.logError(`ws error:`, error); + }); + ws.on('close', () => { + logger.logInfo(`ws closed!`); + this.removeTargetWs(); + }); + } + + private removeTargetWs() { + this.ws?.terminate(); + this.ws = null; + } + + private handleWsHeartbeat(ws: Ws): void { + let pingTimeout: NodeJS.Timeout | undefined; + + const nextPing = () => { + if (ws.readyState !== WebSocket.OPEN) { + logger.logDebug(`ws is not open!`); + return; + } + + setTimeout(() => { + logger.logDebug(`Sending ping to ws!`); + ws.ping(); + pingTimeout = setTimeout(() => { + logger.logInfo(`Terminate ws cause heartbeat timeout!`); + this.removeTargetWs(); + }, 500); + }, RPC_HEARTBEAT_INTERVAL); + }; + + nextPing(); + ws.on('pong', () => { + logger.logDebug(`Received pong from ws!`); + clearTimeout(pingTimeout); + nextPing(); + }); + } +} diff --git a/packages/ng-helper-vscode/src/service/rpcServer/utils.ts b/packages/ng-helper-vscode/src/service/rpcServer/utils.ts new file mode 100644 index 00000000..730dd25d --- /dev/null +++ b/packages/ng-helper-vscode/src/service/rpcServer/utils.ts @@ -0,0 +1,3 @@ +import { logger } from '../../logger'; + +export const rpcProcessLogger = logger.prefixWith('>> RpcProcess'); diff --git a/packages/ng-helper-vscode/src/service/stateControl.ts b/packages/ng-helper-vscode/src/service/stateControl.ts new file mode 100644 index 00000000..99ec3812 --- /dev/null +++ b/packages/ng-helper-vscode/src/service/stateControl.ts @@ -0,0 +1,152 @@ +import { logger } from '../logger'; +import { triggerTsServerByProject } from '../utils'; + +export type State = 'disconnect' | 'connected' | 'canNotQuery' | 'noContext' | 'addProject' | 'removeProject'; +export type BarStatus = 'disconnect' | 'connected' | 'loading'; +export type ListenForStatusBar = (status: BarStatus, projectRoots: string[]) => void; + +const MAX_LOADING_TIME = 10000; +// 至少启动多久才能去触发 +const BASE_START_TIME = 0; + +const myLogger = logger.prefixWith('StateControl'); + +/** + * 状态控制器: 主要是将 rpc 和 tsService 的状态转换为 vscode状态栏的状态。 + * + * rpc 和 tsService 的状态见 {@link State}; + * 状态栏显示的状态见 {@link BarStatus}; + */ +export class StateControl { + private _notifyStatusBar?: ListenForStatusBar; + private _pluginStartAt: number; + private _isRpcServerReady = false; + private _isLoading = false; + private _projectRoots: string[] = []; + private _loadingTimeout?: ReturnType; + private _hasPopupWarning = false; + + constructor(pluginStartAt: number) { + this._pluginStartAt = pluginStartAt; + } + + updateState(state: State, path?: string) { + myLogger.logInfo(`updateState(): ${state}, path: ${path}`); + this.logSnapshot(); + + // 状态出现的顺序是: + // 1. 插件第一次启动: + // disconnect -> canNotQuery -> connected -> addProject + // 2. 插件启动后,打开新项目: + // -> noContext -> addProject + // 3. 插件启动后,关闭项目: + // -> removeProject + // 4. 插件启动后,断开连接: + // -> disconnect + switch (state) { + case 'disconnect': + this.setRpcServerReady(false); + this.setIsLoading(false); + break; + case 'canNotQuery': + this.triggerTsProjectLoading(path!); + break; + case 'connected': + this.setRpcServerReady(true); + this.setIsLoading(false); + break; + case 'noContext': + this.triggerTsProjectLoading(path!); + break; + case 'addProject': + this.addProjectRoot(path!); + this.setIsLoading(false); + break; + case 'removeProject': + this.removeProjectRoot(path!); + break; + default: + break; + } + } + + notifyStatusBar(listener: ListenForStatusBar) { + this._notifyStatusBar = listener; + } + + get rpcServerReady() { + return this._isRpcServerReady; + } + + private setRpcServerReady(value: boolean) { + this._isRpcServerReady = value; + this.handleStateChange(); + } + + private setIsLoading(value: boolean) { + if (value) { + this._loadingTimeout = setTimeout(() => this.setIsLoading(false), MAX_LOADING_TIME); + } else { + clearTimeout(this._loadingTimeout); + } + this._isLoading = value; + this.handleStateChange(); + } + + private addProjectRoot(rootPath: string) { + if (this._projectRoots.includes(rootPath)) { + return; + } + this._projectRoots.push(rootPath); + this.handleStateChange(); + } + + private removeProjectRoot(rootPath: string) { + this._projectRoots = this._projectRoots.filter((x) => x !== rootPath); + this.handleStateChange(); + } + + private handleStateChange() { + const barStatus = this._isLoading ? 'loading' : this.rpcServerReady ? 'connected' : 'disconnect'; + myLogger.logInfo(`handleStateChange(): barStatus: ${barStatus}`); + this.logSnapshot(); + this._notifyStatusBar?.(barStatus, this._projectRoots); + } + + private triggerTsProjectLoading(filePath: string) { + // 至少在插件启动一段时间后才能去触发。 + if (this.getDelay() > 0) { + return; + } + + if (this._isLoading || this._hasPopupWarning) { + return; + } + + this._hasPopupWarning = true; + void triggerTsServerByProject(filePath) + .then((ok) => { + if (ok) { + this.setIsLoading(true); + } + }) + .finally(() => { + this._hasPopupWarning = false; + }); + } + + private logSnapshot() { + const snapshot: Record = {}; + for (const [key, value] of Object.entries(this)) { + if (typeof value !== 'function') { + snapshot[key] = value; + } + } + myLogger.logDebug('snapshot: ', snapshot); + } + + private getDelay() { + const timeCost = Date.now() - this._pluginStartAt; + return timeCost > BASE_START_TIME ? 0 : BASE_START_TIME - timeCost; + } +} diff --git a/packages/ng-helper-vscode/src/service/tsService/rpcApi.ts b/packages/ng-helper-vscode/src/service/tsService/rpcApi.ts new file mode 100644 index 00000000..7572a06a --- /dev/null +++ b/packages/ng-helper-vscode/src/service/tsService/rpcApi.ts @@ -0,0 +1,224 @@ +import { + NgTypeCompletionRequest, + NgTypeCompletionResponse, + NgComponentAttrCompletionRequest, + NgHoverRequest, + NgHoverResponse, + NgRequest, + NgComponentNameCompletionResponse, + NgComponentAttrCompletionResponse, + NgCtrlTypeCompletionRequest, + NgCtrlHoverRequest, + NgComponentNameOrAttrNameHoverRequest, + type NgComponentNameOrAttrNameDefinitionRequest, + type NgDefinitionResponse, + type NgTypeDefinitionRequest, + type NgCtrlTypeDefinitionRequest, + type NgListComponentsStringAttrsRequest, + type NgComponentsStringAttrsResponse, + type NgDirectiveCompletionRequest, + type NgDirectiveCompletionResponse, + type NgDirectiveHoverRequest, + type NgDirectiveDefinitionRequest, + type NgControllerNameDefinitionRequest, + type NgListDirectivesStringAttrsRequest, + type NgDirectivesStringAttrsResponse, + type NgFilterNameDefinitionRequest, +} from '@ng-helper/shared/lib/plugin'; +import type { CancellationToken } from 'vscode'; + +import type { RpcQueryControl } from './rpcQueryControl'; + +interface ApiInput { + params: T; + cancelToken: CancellationToken; +} + +export class RpcApi { + constructor(private _rpcQueryControl: RpcQueryControl) {} + + getFilterNameDefinitionApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'definition/filter/name', + params, + 'getFilterNameDefinitionApi', + cancelToken, + ); + } + + listDirectivesStringAttrs({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'attrs/string/directives', + params, + 'listDirectivesStringAttrs', + cancelToken, + ); + } + + listComponentsStringAttrs({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'attrs/string/components', + params, + 'listComponentsStringAttrs', + cancelToken, + ); + } + + getControllerNameDefinitionApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'definition/controller/name', + params, + 'getControllerNameDefinitionApi', + cancelToken, + ); + } + + getDirectiveDefinitionApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'definition/directive', + params, + 'getDirectiveDefinitionApi', + cancelToken, + ); + } + + getControllerTypeDefinitionApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'definition/controller/type', + params, + 'getControllerTypeDefinitionApi', + cancelToken, + ); + } + + getComponentTypeDefinitionApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'definition/component/type', + params, + 'getComponentTypeDefinitionApi', + cancelToken, + ); + } + + getComponentNameOrAttrNameDefinitionApi({ + params, + cancelToken, + }: ApiInput) { + const path = params.hoverInfo.type === 'attrName' ? 'definition/component/attr' : 'definition/component/name'; + return this._rpcQueryControl.query( + path, + params, + 'getComponentNameOrAttrNameDefinitionApi', + cancelToken, + ); + } + + getControllerTypeHoverApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'hover/controller/type', + params, + 'getControllerTypeHoverApi', + cancelToken, + ); + } + + getComponentTypeHoverApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'hover/component/type', + params, + 'getComponentTypeHoverApi', + cancelToken, + ); + } + + getComponentNameOrAttrNameHoverApi({ params, cancelToken }: ApiInput) { + const path = params.hoverInfo.type === 'attrName' ? 'hover/component/attr' : 'hover/component/name'; + return this._rpcQueryControl.query( + path, + params, + 'getComponentNameOrAttrNameHoverApi', + cancelToken, + ); + } + + getDirectiveHoverApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'hover/directive', + params, + 'getDirectiveHoverApi', + cancelToken, + ); + } + + getFilterNameHoverApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'hover/filter/name', + params, + 'getFilterNameHoverApi', + cancelToken, + ); + } + + getFilterNameCompletionApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'completion/filter/name', + params, + 'getFilterNameCompletionApi', + cancelToken, + ); + } + + getControllerTypeCompletionApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'completion/controller/type', + params, + 'getControllerTypeCompletionApi', + cancelToken, + ); + } + + getDirectiveCompletionApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'completion/directive', + params, + 'getDirectiveCompletionApi', + cancelToken, + ); + } + + getComponentTypeCompletionApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'completion/component/type', + params, + 'getComponentTypeCompletionApi', + cancelToken, + ); + } + + getComponentNameCompletionApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'completion/component/name', + params, + 'getComponentNameCompletionApi', + cancelToken, + ); + } + + getComponentAttrCompletionApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'completion/component/attr', + params, + 'getComponentAttrCompletionApi', + cancelToken, + ); + } + + getComponentControllerAsApi({ params, cancelToken }: ApiInput) { + return this._rpcQueryControl.query( + 'controller-as/component', + params, + 'getComponentControllerAsApi', + cancelToken, + ); + } +} diff --git a/packages/ng-helper-vscode/src/service/tsService/rpcControl.ts b/packages/ng-helper-vscode/src/service/tsService/rpcControl.ts new file mode 100644 index 00000000..4ec75a2d --- /dev/null +++ b/packages/ng-helper-vscode/src/service/tsService/rpcControl.ts @@ -0,0 +1,84 @@ +import { fork } from 'child_process'; +import path from 'path'; + +import { logger } from '../../logger'; +import type { ProcessControlData, ProcessMessage, ProcessMessageType, ProcessReportData } from '../processMessage'; +import type { StateControl } from '../stateControl'; + +const myLogger = logger.prefixWith('RpcControl'); +const rpcServerPath = path.join(__dirname, 'ng-helper-rpc-server.js'); + +export class RpcControl { + private _childProc: ReturnType; + private _stateControl: StateControl; + private _queryListener?: (message: string) => void; + + constructor(stateControl: StateControl) { + this._stateControl = stateControl; + this._childProc = fork(rpcServerPath, [], { stdio: ['pipe', 'pipe', 'pipe', 'ipc'] }); + this.handleChildProcessLog(); + } + + start(port: number) { + this.onMessage(); + myLogger.logInfo(`Starting RPC server on port: ${port}`); + this.sendControlMessage({ type: 'startWsServer', port }); + } + + dispose() { + myLogger.logInfo(`Stopping RPC server process.`); + this.sendControlMessage({ type: 'exit' }); + + const timeout = setTimeout(() => { + // Force kill the child process if it doesn't exit gracefully. + this._childProc.kill(); + }, 500); + + this._childProc.once('exit', () => { + clearTimeout(timeout); + }); + } + + sendQueryMessage(message: string) { + this.sendMessageToChild('query', message); + } + + listenQueryMessage(listener: (message: string) => void) { + this._queryListener = listener; + } + + private handleChildProcessLog() { + // 注意:不要用 logger 替换这里的 console.log 和 console.error。 + this._childProc.stderr?.on('data', (data) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access + console.error(data.toString('utf8')); + }); + this._childProc.stdout?.on('data', (data) => { + // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access + console.log(data.toString('utf8')); + }); + } + + private onMessage() { + this._childProc.on('message', (message: ProcessMessage) => { + if (message.type === 'query') { + this._queryListener?.(message.data as string); + } else if (message.type === 'report') { + const { state, path } = message.data as ProcessReportData; + this._stateControl.updateState(state, path); + } + }); + } + + private sendControlMessage(data: ProcessControlData) { + this.sendMessageToChild('control', data); + } + + private sendMessageToChild(type: ProcessMessageType, data: T) { + this._childProc.send({ + type, + data, + timestamp: Date.now(), + }); + } +} diff --git a/packages/ng-helper-vscode/src/service/tsService/rpcQueryControl.ts b/packages/ng-helper-vscode/src/service/tsService/rpcQueryControl.ts new file mode 100644 index 00000000..ce99cd57 --- /dev/null +++ b/packages/ng-helper-vscode/src/service/tsService/rpcQueryControl.ts @@ -0,0 +1,129 @@ +import type { NgRequest } from '@ng-helper/shared/lib/plugin'; +import { packRpcMessage, parseRpcMessage } from '@ng-helper/shared/lib/rpc'; +import type { CancellationToken } from 'vscode'; + +import { logger } from '../../logger'; +import { normalizePath } from '../../utils'; +import type { StateControl } from '../stateControl'; + +import type { RpcControl } from './rpcControl'; + +const RPC_TIMEOUT = 500; + +const myLogger = logger.prefixWith('RpcQueryControl'); + +export class RpcQueryControl { + private _rpcControl: RpcControl; + private _stateControl: StateControl; + private _id = 0; + private _cbMap = new Map void>(); + + constructor(rpcControl: RpcControl, stateControl: StateControl) { + this._rpcControl = rpcControl; + this._stateControl = stateControl; + this._rpcControl.listenQueryMessage((message) => { + this.handleQueryResponse(message); + }); + } + + async query( + method: string, + params: TParams, + apiName: string, + cancelToken?: CancellationToken, + ): Promise { + if (!this._stateControl.rpcServerReady) { + this._stateControl.updateState('canNotQuery', params.fileName); + return; + } + + try { + const id = this.getId(); + params.fileName = normalizePath(params.fileName); + const rpcRequest = packRpcMessage('request', { + id, + method, + params: JSON.stringify(params), + }); + + myLogger.logInfo(`(${id}) ---> ${apiName}() : ${rpcRequest}`); + + this._rpcControl.sendQueryMessage(rpcRequest); + + const result = await Promise.race([ + this.timeoutOrCancel(id, cancelToken), + this.getQueryResult(id), + ]); + return result; + } catch (err) { + myLogger.logError(`${apiName}() error:`, err); + } + } + + private handleQueryResponse(message: string) { + myLogger.logDebug(`Received query response: ${message}`); + + try { + const response = parseRpcMessage('response', message, true); + if (response) { + const { requestId, success, result, error } = response.data; + const cb = this._cbMap.get(requestId); + if (cb) { + cb(result); + this._cbMap.delete(requestId); + } + if (!success) { + myLogger.logError(`Query response error(${error?.errorKey}): ${error?.errorMessage}`); + if (error?.errorKey === 'NO_CONTEXT') { + this._stateControl.updateState('noContext', error.data as string); + } + } + } else { + const report = parseRpcMessage('report', message, true); + if (report) { + this._stateControl.updateState(report.data.type, report.data.projectRoot); + } + } + } catch (err) { + myLogger.logError(`handleQueryResponse() error:`, err); + } + } + + private getQueryResult(id: string): Promise { + return new Promise((r) => { + this.addCb(id, (result: string | undefined) => { + const queryResult = (result ? JSON.parse(result) : undefined) as TResult; + myLogger.logInfo(`(${id}) <--- :`, queryResult); + r(queryResult); + }); + }); + } + + private timeoutOrCancel(id: string, cancelToken?: CancellationToken): Promise { + return new Promise((_, reject) => { + const timeoutId = setTimeout(() => { + this.removeCb(id); + reject(new Error(`Rpc(#${id}) timeout(${RPC_TIMEOUT}ms)`)); + }, RPC_TIMEOUT); + cancelToken?.onCancellationRequested(() => { + this.removeCb(id); + // 如果外面先取消,这里清除定时器,并直接 reject + clearTimeout(timeoutId); + reject(new Error(`Rpc(#${id}) query cancelled`)); + }); + }); + } + + private addCb(id: string, cb: (result: string | undefined) => void) { + this._cbMap.set(id, cb); + } + + private removeCb(id: string) { + this._cbMap.delete(id); + } + + private getId() { + this._id++; + return this._id.toString(); + } +} diff --git a/packages/ng-helper-vscode/src/service/tsService/tsService.ts b/packages/ng-helper-vscode/src/service/tsService/tsService.ts new file mode 100644 index 00000000..ea8330a3 --- /dev/null +++ b/packages/ng-helper-vscode/src/service/tsService/tsService.ts @@ -0,0 +1,26 @@ +import type { StateControl } from '../stateControl'; + +import { RpcApi } from './rpcApi'; +import { RpcControl } from './rpcControl'; +import { RpcQueryControl } from './rpcQueryControl'; + +export class TsService { + private _rpcControl: RpcControl; + private _rpcQueryControl: RpcQueryControl; + private _rpcApi: RpcApi; + + constructor(stateControl: StateControl) { + this._rpcControl = new RpcControl(stateControl); + this._rpcQueryControl = new RpcQueryControl(this._rpcControl, stateControl); + this._rpcApi = new RpcApi(this._rpcQueryControl); + } + + start(port: number): RpcApi { + this._rpcControl.start(port); + return this._rpcApi; + } + + dispose() { + this._rpcControl.dispose(); + } +} diff --git a/packages/ng-helper-vscode/src/utils.ts b/packages/ng-helper-vscode/src/utils.ts index e468ccb1..dfc451ac 100644 --- a/packages/ng-helper-vscode/src/utils.ts +++ b/packages/ng-helper-vscode/src/utils.ts @@ -1,29 +1,12 @@ -import { normalize } from 'node:path'; +import { basename, normalize, parse } from 'node:path'; import { cursorAt } from '@ng-helper/shared/lib/cursorAt'; import type { Cursor } from '@ng-helper/shared/lib/html'; import { window, workspace, Uri, FileType, TextDocument, type Position } from 'vscode'; -import { checkNgHelperServerRunningApi } from './service/api'; +import { logger } from './logger'; -let tsRunning = false; -export async function checkNgHelperServerRunning(filePath: string, port: number): Promise { - if (tsRunning) { - return true; - } - - tsRunning = await checkNgHelperServerRunningApi(port); - if (tsRunning) { - // Mark ts server running - tsRunning = true; - return true; - } - - await triggerTsServerByProject(filePath); - return false; -} - -export async function triggerTsServerByProject(filePath: string) { +export async function triggerTsServerByProject(filePath: string): Promise { let scriptFilePath = filePath; if (!scriptFilePath.endsWith('.ts') && !scriptFilePath.endsWith('.js')) { @@ -33,7 +16,7 @@ export async function triggerTsServerByProject(filePath: string) { if (!(await isFileExistsOnWorkspace(Uri.file(scriptFilePath)))) { const path = await getOneScriptFile(filePath); if (!path) { - return; + return false; } scriptFilePath = path; } @@ -46,8 +29,11 @@ export async function triggerTsServerByProject(filePath: string) { // 目前只能通过打开 ts/js 文档来确保,tsserver 真正运行起来,这样插件才能跑起来。 const document = await workspace.openTextDocument(Uri.file(scriptFilePath)); await window.showTextDocument(document); + return true; } + return false; + async function getOneScriptFile(filePath: string): Promise { const files = await getScriptFiles(filePath, { limit: 1 }); return files[0]; @@ -98,6 +84,20 @@ export async function getFiles( predicate: options?.predicate, limit: options?.limit, recursive: true, + /** + * 这里要使用深度优先搜索(DFS)。为什么? + * 举一个实际 bug: + * cloud/client/xxx-biz 目录是某个业务的代码,如果切换的一个以前的分支,这个目录不存在, + * 编辑器中还显示的是 cloud/client/xxx-biz/y.html, 虽然这个文件已经被删除了。 + * 但是在关掉该文件前,还是可以去做触发 ng-helper 查询 tsserver 信息的操作(如:hover ctrl)。 + * 由于默认是广度优先搜索(BFS),会先去查找 cloud/client/xxx-biz/y.ts 文件, + * 由于文件不存在,会向父文件夹继续查找,这样很容易找到并返回项目下的一些工具配置文件(比如 .eslintrc.js)。 + * 而这些文件并没有在 tsconfig.json 的项目配置范围内,那么最终得到的 projectRoot 会是 + * vscode 打开的 ${workspace} 目录(即根目录)。 + * 这样导致后续的任何文件都能归集到该项目下,导致 html 文件触发的 ng-helper 查询 tsserver 信息操作, + * 无法产生 'noContext' 状态, 从而无法调用 triggerTsServerByProject,使得 ng-helper 处于半瘫痪状态。 + */ + DFS: true, }); if (files.length) { return files; @@ -114,8 +114,17 @@ export async function listFiles( excludePaths?: string[]; limit?: number; recursive?: boolean; + /** + * 是否使用深度优先搜索, 如果开启,则默认 recursive 为 true。 + */ + DFS?: boolean; }, ): Promise { + if (options.DFS) { + // DFS 开启时,recursive 默认是 true + options.recursive = true; + } + const result: string[] = []; // 避免遍历 node_modules @@ -127,36 +136,50 @@ export async function listFiles( try { files = await workspace.fs.readDirectory(Uri.file(dirPath)); } catch (error) { - console.error('listFiles() error:', error); + logger.logError('listFiles() error:', error); return result; } - const subDirNames: string[] = []; const excludePaths = options.excludePaths?.map((path) => normalizePath(path)) ?? []; - for (const [name, fileType] of files) { - if (options.limit && result.length >= options.limit) { - break; - } - if (fileType === FileType.File) { - if (options.suffix && !options.suffix.some((suffix) => name.endsWith(suffix))) { - continue; - } + const subDirNames: string[] = []; + // DFS,则先找符合条件的子文件夹 + if (options.DFS) { + const dirs = files.filter( + ([name, type]) => + type === FileType.Directory && !excludePaths.some((path) => `${dirPath}/${name}`.startsWith(path)), + ); + subDirNames.push(...dirs.map(([name]) => name)); + } - const filePath = `${dirPath}/${name}`; - if (options.predicate && !options.predicate(filePath)) { - continue; + // 如果没有子目录(这里包含了 DFS 找不到目录和非 DFS 初始 subDirNames 就是为空),就优先处理当前目录下的文件 + if (!subDirNames.length) { + for (const [name, fileType] of files) { + if (options.limit && result.length >= options.limit) { + break; } - result.push(filePath); - } else if (options.recursive && fileType === FileType.Directory) { - if (options.excludePaths && excludePaths.some((path) => `${dirPath}/${name}`.startsWith(path))) { - continue; + if (fileType === FileType.File && (!options.DFS || !subDirNames.length)) { + if (options.suffix && !options.suffix.some((suffix) => name.endsWith(suffix))) { + continue; + } + + const filePath = `${dirPath}/${name}`; + if (options.predicate && !options.predicate(filePath)) { + continue; + } + + result.push(filePath); + } else if (options.recursive && fileType === FileType.Directory) { + if (excludePaths.some((path) => `${dirPath}/${name}`.startsWith(path))) { + continue; + } + subDirNames.push(name); } - subDirNames.push(name); } } + // 记住:DFS 开启时,recursive 默认是 true if (options.recursive && subDirNames.length) { for (const subDirName of subDirNames) { const subFiles = await listFiles(`${dirPath}/${subDirName}`, options); @@ -196,7 +219,11 @@ export function normalizeFileExt(ext: string): string { export function normalizePath(filePath: string): string { filePath = normalize(filePath); - return filePath.replace(/\\/g, '/'); + filePath = filePath.replace(/\\/g, '/'); + if (filePath.endsWith('/')) { + return filePath.slice(0, -1); + } + return filePath; } export function uniq(arr: T[]): T[] { @@ -210,3 +237,34 @@ export function intersect(arr1: T[], arr2: T[]): T[] { export function buildCursor(document: TextDocument, position: Position, isHover = true): Cursor { return cursorAt(document.offsetAt(position), isHover); } + +export function time(): string { + const date = new Date(); + const hours = String(date.getHours()).padStart(2, '0'); + const minutes = String(date.getMinutes()).padStart(2, '0'); + const seconds = String(date.getSeconds()).padStart(2, '0'); + + return `${hours}:${minutes}:${seconds}`; +} + +export function getLastFolderName(p: string): string { + const normalizedPath = normalize(p); // 标准化,比如去掉多余的斜杠 + const parsed = parse(normalizedPath); + + if (parsed.ext) { + // 如果有扩展名,说明是文件,返回上一级文件夹 + return basename(parsed.dir); + } else { + // 如果是文件夹,直接返回最后一段 + return basename(normalizedPath); + } +} + +export function getFileName(filePath: string): string { + const normalizedPath = normalize(filePath); // 标准化,比如去掉多余的斜杠 + return basename(normalizedPath); +} + +export function findMissingElements(sourceArr: string[], targetArr: string[]): string[] { + return targetArr.filter((item) => !sourceArr.includes(item)); +} diff --git a/packages/ng-helper-vscode/tests/e2e/semantic.test.ts b/packages/ng-helper-vscode/tests/e2e/semantic.test.ts index e7cbda56..927edce8 100644 --- a/packages/ng-helper-vscode/tests/e2e/semantic.test.ts +++ b/packages/ng-helper-vscode/tests/e2e/semantic.test.ts @@ -14,7 +14,11 @@ describe('Semantic', () => { setupChaiSnapshotPlugin(); before(async () => { - await activate(); + // 这里给 3s 延时,是因为: + // 1. 这个测试目前被排到第一个执行 + // 2. 加上使用 ws,导致去查询 semantic 信息太早,而 tsserver 那边还没有准备好 + // 所以查不到信息,最终导致测试失败 + await activate(3); }); it('html semantic', async () => { diff --git a/packages/ng-helper-vscode/tests/testUtils.ts b/packages/ng-helper-vscode/tests/testUtils.ts index e7bf995c..70fc22a7 100644 --- a/packages/ng-helper-vscode/tests/testUtils.ts +++ b/packages/ng-helper-vscode/tests/testUtils.ts @@ -26,10 +26,10 @@ export function setupChaiSnapshotPlugin() { ); } -export async function activate() { +export async function activate(waitSeconds: number = 1) { // enable tsserver await vscode.window.showTextDocument(vscode.Uri.file(BAR_FOO_COMPONENT_TS_PATH), { preview: false }); - await sleep(1000); + await sleep(1000 * waitSeconds); // show the document await vscode.window.showTextDocument(vscode.Uri.file(BAR_FOO_COMPONENT_HTML_PATH)); diff --git a/packages/ng-parser/package.json b/packages/ng-parser/package.json index 0552d422..90770076 100644 --- a/packages/ng-parser/package.json +++ b/packages/ng-parser/package.json @@ -15,6 +15,6 @@ "@babel/preset-typescript": "^7.24.7", "@types/jest": "^29.5.12", "jest": "^29.7.0", - "typescript": "~5.4.5" + "typescript": "~5.5.4" } } diff --git a/packages/ng-parser/tests/testUtils.ts b/packages/ng-parser/tests/testUtils.ts index 69eeb205..42080a66 100644 --- a/packages/ng-parser/tests/testUtils.ts +++ b/packages/ng-parser/tests/testUtils.ts @@ -109,7 +109,7 @@ export class SExpr implements INodeVisitor { return `"${node.value}"`; } return Token.shouldHaveValue(node.literalTokenKind) - ? node.value ?? '' + ? (node.value ?? '') : Token.createEmpty(node.literalTokenKind).toString(); } } diff --git a/packages/shared/lib/plugin.ts b/packages/shared/lib/plugin.ts index 7c2d7b91..a7488ba4 100644 --- a/packages/shared/lib/plugin.ts +++ b/packages/shared/lib/plugin.ts @@ -20,17 +20,26 @@ export type InjectionCheckMode = 'strict_equal' | 'ignore_case_word_match' | 'co export interface NgPluginConfiguration { port: number; injectionCheckMode: InjectionCheckMode; + /** + * Ts 项目到 AngularJS 项目的映射。 + * ts plugin 这边主要用这个做两件事: + * 1. 控制某个项目是否启用注入到 ts language service 中的功能(像依赖注入检查、service 名字跳转等),并控制它们作用的文件范围; + * 2. 控制 client 查询时,需要去哪个 ts project 中查询。 + * 如果没有配置这个,则使用之前的自动处理的方案。 + * 自动处理的问题,就是对应上面的两点: + * 1. 可能处理了不该处理的项目; + * 2. 项目查找可能会错。 + */ + projectMappings?: Array<{ + tsProjectPath: string; + ngProjectPath: string; + }>; } export interface NgRequest { fileName: string; } -export type NgResponse = { - errKey?: 'NO_CONTEXT'; - data?: T; -}; - export interface NgTypeCompletionRequest extends NgRequest { prefix: string; } diff --git a/packages/shared/lib/rpc.ts b/packages/shared/lib/rpc.ts new file mode 100644 index 00000000..35d64d86 --- /dev/null +++ b/packages/shared/lib/rpc.ts @@ -0,0 +1,77 @@ +export const RPC_HEARTBEAT_INTERVAL = 30000; + +export type RpcMessageType = 'request' | 'response' | 'auth' | 'report'; +export type RpcServeType = 'srv'; // 保留扩展可能性,当前只支持 'srv' +export type RpcErrorKey = 'METHOD_NOT_FOUND' | 'PARSE_PARAMS_ERROR' | 'NO_CONTEXT' | 'INTERNAL_ERROR'; +export type RpcReportType = 'addProject' | 'removeProject'; + +export interface RpcAuth { + serveType: RpcServeType; +} + +export interface RpcReport { + type: RpcReportType; + projectRoot: string; +} + +export interface RpcRequest { + id: string; + method: string; + params: string; +} + +export interface RpcError { + errorKey: RpcErrorKey; + errorMessage: string; + data?: unknown; +} + +export interface RpcResponse { + requestId: string; + success: boolean; + result?: string; + error?: RpcError; +} + +export interface RpcPackMessage { + type: TypeT; + data: DataT; + timestamp: number; +} + +export type RpcData = T extends 'auth' + ? RpcAuth + : T extends 'report' + ? RpcReport + : T extends 'request' + ? RpcRequest + : T extends 'response' + ? RpcResponse + : never; + +export type RpcMessage = RpcPackMessage>; + +export function parseRpcMessage( + type: T, + message: string, + throwOnError = false, +): RpcMessage | null { + try { + const msg = JSON.parse(message) as RpcMessage; + if (msg.type === type) { + return msg; + } + } catch (err) { + const errInfo = `Failed to parse rpc message(${message}): ${err as string}`; + if (throwOnError) { + throw new Error(errInfo); + } else { + console.error(errInfo); + } + } + return null; +} + +export function packRpcMessage(type: T, data: RpcData): string { + return JSON.stringify({ type, data, timestamp: Date.now() }); +} diff --git a/packages/shared/package.json b/packages/shared/package.json index 3ccca06d..bdcdf5e5 100644 --- a/packages/shared/package.json +++ b/packages/shared/package.json @@ -18,6 +18,6 @@ "@babel/preset-typescript": "^7.24.7", "@types/jest": "^29.5.12", "jest": "^29.7.0", - "typescript": "~5.4.5" + "typescript": "~5.5.4" } } diff --git a/packages/typescript-plugin/package.json b/packages/typescript-plugin/package.json index 92fc7438..86abe34c 100644 --- a/packages/typescript-plugin/package.json +++ b/packages/typescript-plugin/package.json @@ -6,9 +6,9 @@ "license": "MIT", "private": "true", "scripts": { - "compile": "yarn run tsc && yarn run lint && node esbuild.js --production", - "compile:e2e": "node esbuild.js", - "watch:esbuild": "node esbuild.js --watch", + "compile": "yarn run tsc && yarn run lint && node scripts/esbuild.js --production", + "compile:e2e": "node scripts/esbuild.js", + "watch:esbuild": "node scripts/esbuild.js --watch", "tsc": "tsc --noEmit", "lint": "eslint src --ext ts", "test": "jest", @@ -16,7 +16,8 @@ }, "dependencies": { "@ng-helper/shared": "^0.0.1", - "express": "^4.17.3" + "express": "^4.17.3", + "ws": "^7.5.10" }, "devDependencies": { "@babel/preset-env": "^7.24.7", @@ -25,11 +26,12 @@ "@types/jest": "^29.5.12", "@types/node": "18.x", "@types/vscode": "^1.90.0", + "@types/ws": "^7.4.7", "@typescript-eslint/eslint-plugin": "^7.11.0", "@typescript-eslint/parser": "^7.11.0", "esbuild": "^0.21.4", "eslint": "^8.57.0", - "typescript": "~5.4.5", - "jest": "^29.7.0" + "jest": "^29.7.0", + "typescript": "~5.5.4" } } diff --git a/packages/typescript-plugin/esbuild.js b/packages/typescript-plugin/scripts/esbuild.js similarity index 100% rename from packages/typescript-plugin/esbuild.js rename to packages/typescript-plugin/scripts/esbuild.js diff --git a/packages/typescript-plugin/src/completion/index.ts b/packages/typescript-plugin/src/completion/index.ts index c631eaeb..22841924 100644 --- a/packages/typescript-plugin/src/completion/index.ts +++ b/packages/typescript-plugin/src/completion/index.ts @@ -9,9 +9,9 @@ import { type NgRequest, } from '@ng-helper/shared/lib/plugin'; -import { ngHelperServer } from '../ngHelperServer'; -import type { ComponentInfo, DirectiveInfo, Property } from '../ngHelperServer/ngCache'; -import { getCtxOfCoreCtx } from '../ngHelperServer/utils'; +import { ngHelperTsService } from '../ngHelperTsService'; +import type { ComponentInfo, DirectiveInfo, Property } from '../ngHelperTsService/ngCache'; +import { getCtxOfCoreCtx } from '../ngHelperTsService/utils'; import { CorePluginContext, PluginContext } from '../type'; import { findMatchedDirectives, getDirectivesUsableAsAttributes, getTypeInfosFromDirectiveScope } from '../utils/biz'; import { formatParameters, getPublicMembersTypeInfoOfType, typeToString } from '../utils/common'; @@ -27,7 +27,7 @@ import { getExpressionSyntaxNode, getNodeType } from './utils'; export function getComponentControllerAs(ctx: PluginContext): string | undefined { const logger = ctx.logger.prefix('getComponentControllerAs()'); - const cache = ngHelperServer.getCache(ctx.sourceFile.fileName); + const cache = ngHelperTsService.getCache(ctx.sourceFile.fileName); if (!cache) { logger.info(`cache not found for file(${ctx.sourceFile.fileName})!`); return; @@ -60,7 +60,7 @@ export function getComponentTypeCompletions(ctx: PluginContext, prefix: string): return; } - const cache = ngHelperServer.getCache(ctx.sourceFile.fileName); + const cache = ngHelperTsService.getCache(ctx.sourceFile.fileName); if (!cache) { logger.info(`cache not found! fileName: ${ctx.sourceFile.fileName}`); return; @@ -157,7 +157,7 @@ export function getComponentNameCompletions( ): NgComponentNameCompletionResponse { const logger = coreCtx.logger.prefix('getComponentNameCompletions()'); - const cache = ngHelperServer.getCache(filePath); + const cache = ngHelperTsService.getCache(filePath); if (!cache) { logger.info(`cache not found for file(${filePath})!`); return; @@ -192,7 +192,7 @@ export function getComponentAttrCompletions( ): NgComponentAttrCompletionResponse { const logger = coreCtx.logger.prefix('getComponentAttrCompletions()'); - const cache = ngHelperServer.getCache(filePath); + const cache = ngHelperTsService.getCache(filePath); if (!cache) { logger.info(`cache not found for file(${filePath})!`); return; @@ -271,7 +271,7 @@ export function resolveCtrlCtx( ): PluginContext | undefined { const logger = coreCtx.logger.prefix('resolveCtrlCtx()'); - const cache = ngHelperServer.getCache(fileName); + const cache = ngHelperTsService.getCache(fileName); if (!cache) { logger.info(`cache not found for file(${fileName})!`); return; @@ -304,7 +304,7 @@ export function getDirectiveCompletions( ): NgDirectiveCompletionResponse { const logger = coreCtx.logger.prefix('getDirectiveCompletions()'); - const cache = ngHelperServer.getCache(info.fileName); + const cache = ngHelperTsService.getCache(info.fileName); if (!cache) { logger.info(`cache not found for file(${info.fileName})!`); return; @@ -362,7 +362,7 @@ function findClosestMatchedDirective( export function getFilterNameCompletions(coreCtx: CorePluginContext, info: NgRequest): NgTypeCompletionResponse { const logger = coreCtx.logger.prefix('getFilterNameCompletions()'); - const cache = ngHelperServer.getCache(info.fileName); + const cache = ngHelperTsService.getCache(info.fileName); if (!cache) { logger.info(`cache not found for file(${info.fileName})!`); return; diff --git a/packages/typescript-plugin/src/definition/index.ts b/packages/typescript-plugin/src/definition/index.ts index d6f5fb32..d21ff8ce 100644 --- a/packages/typescript-plugin/src/definition/index.ts +++ b/packages/typescript-plugin/src/definition/index.ts @@ -15,8 +15,8 @@ import { resolveCtrlCtx } from '../completion'; import { getExpressionSyntaxNode, getNodeType } from '../completion/utils'; import { isAngularFile } from '../diagnostic/utils'; import { findComponentOrDirectiveInfo, getMinSyntaxNodeForHover } from '../hover/utils'; -import { ngHelperServer } from '../ngHelperServer'; -import type { ComponentInfo, DirectiveInfo } from '../ngHelperServer/ngCache'; +import { ngHelperTsService } from '../ngHelperTsService'; +import type { ComponentInfo, DirectiveInfo } from '../ngHelperTsService/ngCache'; import { CorePluginContext, type PluginContext, type SyntaxNodeInfoEx } from '../type'; import { findMatchedDirectives } from '../utils/biz'; import { getNodeAtPosition, typeToString } from '../utils/common'; @@ -34,7 +34,7 @@ export function getDirectiveDefinitionInfo( ): NgDefinitionResponse { const logger = coreCtx.logger.prefix('getDirectiveDefinitionInfo()'); - const cache = ngHelperServer.getCache(fileName); + const cache = ngHelperTsService.getCache(fileName); if (!cache) { logger.info(`cache not found for file(${fileName})!`); return; @@ -83,7 +83,7 @@ export function getComponentNameOrAttrNameDefinitionInfo( ): NgDefinitionResponse { const logger = coreCtx.logger.prefix('getComponentNameOrAttrNameDefinitionInfo()'); - const cache = ngHelperServer.getCache(fileName); + const cache = ngHelperTsService.getCache(fileName); if (!cache) { logger.info(`cache not found for file(${fileName})!`); return; @@ -144,7 +144,7 @@ export function getComponentTypeDefinitionInfo( ): NgDefinitionResponse { const logger = ctx.logger.prefix('getComponentTypeDefinitionInfo()'); - const cache = ngHelperServer.getCache(ctx.sourceFile.fileName); + const cache = ngHelperTsService.getCache(ctx.sourceFile.fileName); if (!cache) { logger.info(`cache not found! fileName: ${ctx.sourceFile.fileName}`); return; @@ -334,7 +334,7 @@ export function getControllerNameDefinitionInfo( ): NgDefinitionResponse { const logger = ctx.logger.prefix('getControllerNameDefinitionInfo()'); - const cache = ngHelperServer.getCache(fileName); + const cache = ngHelperTsService.getCache(fileName); if (!cache) { logger.info(`cache not found for file(${fileName})!`); return; @@ -358,7 +358,7 @@ export function getFilterNameDefinitionInfo( ): NgDefinitionResponse { const logger = coreCtx.logger.prefix('getFilterNameDefinitionInfo()'); - const cache = ngHelperServer.getCache(fileName); + const cache = ngHelperTsService.getCache(fileName); if (!cache) { logger.info(`cache not found! fileName: ${fileName}`); return; @@ -385,11 +385,11 @@ export function overrideGetDefinitionAtPosition({ }) { proxy.getDefinitionAndBoundSpan = (fileName: string, position: number) => { const prior = info.languageService.getDefinitionAndBoundSpan(fileName, position); - if (prior || isDtsFile(fileName) || !ngHelperServer.isExtensionActivated()) { + if (prior || isDtsFile(fileName) || !ngHelperTsService.isNgHelperCanHandled(info, fileName)) { return prior; } - const ctx = ngHelperServer.getContext(fileName); + const ctx = ngHelperTsService.getContext(fileName); if (!ctx || !isAngularFile(ctx)) { return; } @@ -407,7 +407,7 @@ function serviceDefinition(ctx: PluginContext, position: number): DefinitionInfo const node = getNodeAtPosition(ctx, position); if (node && isDependencyInjectionString(node)) { const serviceName = node.text; - const cache = ngHelperServer.getCache(ctx.sourceFile.fileName); + const cache = ngHelperTsService.getCache(ctx.sourceFile.fileName); if (!cache) { logger.info(`cache not found! fileName: ${ctx.sourceFile.fileName}`); return; diff --git a/packages/typescript-plugin/src/diagnostic/index.ts b/packages/typescript-plugin/src/diagnostic/index.ts index 219307e3..c2530d7b 100644 --- a/packages/typescript-plugin/src/diagnostic/index.ts +++ b/packages/typescript-plugin/src/diagnostic/index.ts @@ -2,7 +2,7 @@ import type { InjectionCheckMode } from '@ng-helper/shared/lib/plugin'; import type ts from 'typescript'; import type tsserver from 'typescript/lib/tsserverlibrary'; -import { ngHelperServer } from '../ngHelperServer'; +import { ngHelperTsService } from '../ngHelperTsService'; import { PluginContext } from '../type'; import { getPropValueByName } from '../utils/common'; import { @@ -30,8 +30,8 @@ export function overrideGetSemanticDiagnostics({ }) { proxy.getSemanticDiagnostics = (fileName: string) => { const prior = info.languageService.getSemanticDiagnostics(fileName); - const checkMode = ngHelperServer.getConfig()?.injectionCheckMode; - if (!ngHelperServer.isExtensionActivated() || !isValidCheckMode(checkMode)) { + const checkMode = ngHelperTsService.getConfig()?.injectionCheckMode; + if (!ngHelperTsService.isNgHelperCanHandled(info, fileName) || !isValidCheckMode(checkMode)) { return prior; } @@ -39,7 +39,7 @@ export function overrideGetSemanticDiagnostics({ return prior; } - const ctx = ngHelperServer.getContext(fileName); + const ctx = ngHelperTsService.getContext(fileName); if (!ctx || !isAngularFile(ctx)) { return prior; } diff --git a/packages/typescript-plugin/src/hover/index.ts b/packages/typescript-plugin/src/hover/index.ts index fb65b010..3dd55a2b 100644 --- a/packages/typescript-plugin/src/hover/index.ts +++ b/packages/typescript-plugin/src/hover/index.ts @@ -10,9 +10,9 @@ import type ts from 'typescript'; import { resolveCtrlCtx } from '../completion'; import { getNodeType, getExpressionSyntaxNode } from '../completion/utils'; -import { ngHelperServer } from '../ngHelperServer'; -import type { ComponentInfo, DirectiveInfo, Property } from '../ngHelperServer/ngCache'; -import { getCtxOfCoreCtx } from '../ngHelperServer/utils'; +import { ngHelperTsService } from '../ngHelperTsService'; +import type { ComponentInfo, DirectiveInfo, Property } from '../ngHelperTsService/ngCache'; +import { getCtxOfCoreCtx } from '../ngHelperTsService/utils'; import { CorePluginContext, PluginContext, type SyntaxNodeInfo } from '../type'; import { findMatchedDirectives } from '../utils/biz'; import { formatParameters, getPropertyType, getPublicMembersTypeInfoOfType, typeToString } from '../utils/common'; @@ -39,7 +39,7 @@ export function getComponentNameOrAttrNameHoverInfo( ): NgHoverResponse { const logger = coreCtx.logger.prefix('getComponentNameOrAttrNameHoverInfo()'); - const cache = ngHelperServer.getCache(fileName); + const cache = ngHelperTsService.getCache(fileName); if (!cache) { logger.info(`cache not found! fileName: ${fileName}`); return; @@ -233,7 +233,7 @@ export function getComponentTypeHoverInfo( ): NgHoverResponse { const logger = ctx.logger.prefix('getComponentHoverType()'); - const cache = ngHelperServer.getCache(ctx.sourceFile.fileName); + const cache = ngHelperTsService.getCache(ctx.sourceFile.fileName); if (!cache) { logger.info(`cache not found! fileName: ${ctx.sourceFile.fileName}`); return; @@ -359,7 +359,7 @@ export function getControllerTypeHoverInfo( function getControllerNameHoverInfo(ctx: PluginContext, controllerName: string): NgHoverResponse { const logger = ctx.logger.prefix('getControllerNameHoverInfo()'); - const cache = ngHelperServer.getCache(ctx.sourceFile.fileName); + const cache = ngHelperTsService.getCache(ctx.sourceFile.fileName); if (!cache) { logger.info(`cache not found for file(${ctx.sourceFile.fileName})!`); return; @@ -485,7 +485,7 @@ export function getDirectiveHoverInfo( ): NgHoverResponse { const logger = coreCtx.logger.prefix('getDirectiveHoverInfo()'); - const cache = ngHelperServer.getCache(fileName); + const cache = ngHelperTsService.getCache(fileName); if (!cache) { logger.info(`cache not found! fileName: ${fileName}`); return; @@ -522,7 +522,7 @@ export function getFilterNameHoverInfo( ): NgHoverResponse { const logger = coreCtx.logger.prefix('getFilterNameHoverInfo()'); - const cache = ngHelperServer.getCache(fileName); + const cache = ngHelperTsService.getCache(fileName); if (!cache) { logger.info(`cache not found! fileName: ${fileName}`); return; diff --git a/packages/typescript-plugin/src/hover/utils.ts b/packages/typescript-plugin/src/hover/utils.ts index 4be65d2f..ebdaa9c4 100644 --- a/packages/typescript-plugin/src/hover/utils.ts +++ b/packages/typescript-plugin/src/hover/utils.ts @@ -1,7 +1,7 @@ import { NgHoverInfo, type NgElementHoverInfo } from '@ng-helper/shared/lib/plugin'; import type ts from 'typescript'; -import type { NgCache, DirectiveInfo, ComponentInfo } from '../ngHelperServer/ngCache'; +import type { NgCache, DirectiveInfo, ComponentInfo } from '../ngHelperTsService/ngCache'; import { PluginContext, SyntaxNodeInfoEx } from '../type'; import { createTmpSourceFile, getNodeAtPosition, getSymbolDocument, typeToString } from '../utils/common'; import { isElementDirective } from '../utils/ng'; diff --git a/packages/typescript-plugin/src/index.ts b/packages/typescript-plugin/src/index.ts index 0e71c172..da6eb616 100644 --- a/packages/typescript-plugin/src/index.ts +++ b/packages/typescript-plugin/src/index.ts @@ -3,14 +3,14 @@ import type ts from 'typescript/lib/tsserverlibrary'; import { overrideGetDefinitionAtPosition } from './definition'; import { overrideGetSemanticDiagnostics } from './diagnostic'; -import { ngHelperServer } from './ngHelperServer'; +import { ngHelperTsService } from './ngHelperTsService'; export = init; function init(modules: { typescript: typeof import('typescript/lib/tsserverlibrary') }): ts.server.PluginModule { return { create(info: ts.server.PluginCreateInfo) { - const removeProject = ngHelperServer.addProject({ info, modules }); + const removeProject = ngHelperTsService.addProject({ info, modules }); // Set up decorator object const proxy: ts.LanguageService = buildProxy(info); @@ -27,7 +27,7 @@ function init(modules: { typescript: typeof import('typescript/lib/tsserverlibra return proxy; }, onConfigurationChanged(config: NgPluginConfiguration) { - ngHelperServer.updateConfig(config); + ngHelperTsService.updateConfig(config); }, }; } diff --git a/packages/typescript-plugin/src/ngHelperServer/configApi.ts b/packages/typescript-plugin/src/ngHelperServer/configApi.ts deleted file mode 100644 index 8ff77103..00000000 --- a/packages/typescript-plugin/src/ngHelperServer/configApi.ts +++ /dev/null @@ -1,306 +0,0 @@ -import type { - NgListComponentsStringAttrsRequest, - NgComponentsStringAttrsResponse, - NgRequest, - NgTypeCompletionRequest, - NgTypeCompletionResponse, - NgComponentNameCompletionResponse, - NgComponentAttrCompletionRequest, - NgComponentAttrCompletionResponse, - NgDirectiveCompletionRequest, - NgDirectiveCompletionResponse, - NgCtrlTypeCompletionRequest, - NgHoverRequest, - NgHoverResponse, - NgComponentNameOrAttrNameHoverRequest, - NgCtrlHoverRequest, - NgDirectiveHoverRequest, - NgComponentNameOrAttrNameDefinitionRequest, - NgDefinitionResponse, - NgTypeDefinitionRequest, - NgCtrlTypeDefinitionRequest, - NgDirectiveDefinitionRequest, - NgControllerNameDefinitionRequest, - NgResponse, - NgListDirectivesStringAttrsRequest, - NgDirectivesStringAttrsResponse, - NgFilterNameDefinitionRequest, -} from '@ng-helper/shared/lib/plugin'; -import express from 'express'; - -import { - getComponentControllerAs, - getComponentTypeCompletions, - getComponentNameCompletions, - getComponentAttrCompletions, - getDirectiveCompletions, - getControllerTypeCompletions, - getFilterNameCompletions, -} from '../completion'; -import { - getComponentNameOrAttrNameDefinitionInfo, - getComponentTypeDefinitionInfo, - getControllerNameDefinitionInfo, - getControllerTypeDefinitionInfo, - getDirectiveDefinitionInfo, - getFilterNameDefinitionInfo, -} from '../definition'; -import { - getComponentTypeHoverInfo, - getComponentNameOrAttrNameHoverInfo, - getControllerTypeHoverInfo, - getDirectiveHoverInfo, - getFilterNameHoverInfo, -} from '../hover'; -import { getComponentsStringAttrsInfo, getDirectivesStringAttrsInfo } from '../other'; -import type { PluginContext, CorePluginContext } from '../type'; - -import { ngHelperServer } from '.'; - -export function configApi(app: express.Application) { - configCompletionApi(app); - - configHoverApi(app); - - configDefinitionApi(app); - - app.post('/ng-helper/directives/string/attrs', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (ctx, body) => getDirectivesStringAttrsInfo(ctx, body), - }); - }); - - app.post('/ng-helper/components/string/attrs', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (ctx, body) => getComponentsStringAttrsInfo(ctx, body), - }); - }); - - app.post('/ng-helper/component/controller-as', (req, res) => { - handleRequestWithCtx({ - req, - res, - action: (ctx) => getComponentControllerAs(ctx), - }); - }); - - app.get('/ng-helper/hc', (_, res) => res.send('ok')); -} - -function configDefinitionApi(app: express.Application) { - app.post('/ng-helper/filter/name/definition', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getFilterNameDefinitionInfo(coreCtx, body), - }); - }); - - app.post('/ng-helper/controller/name/definition', (req, res) => { - handleRequestWithCtx({ - req, - res, - action: (ctx, body) => getControllerNameDefinitionInfo(ctx, body), - }); - }); - - app.post('/ng-helper/component/name/definition', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getComponentNameOrAttrNameDefinitionInfo(coreCtx, body), - }); - }); - - app.post('/ng-helper/component/attr/definition', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getComponentNameOrAttrNameDefinitionInfo(coreCtx, body), - }); - }); - - app.post('/ng-helper/component/type/definition', (req, res) => { - handleRequestWithCtx({ - req, - res, - action: (ctx, body) => getComponentTypeDefinitionInfo(ctx, body), - }); - }); - - app.post('/ng-helper/controller/type/definition', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getControllerTypeDefinitionInfo(coreCtx, body), - }); - }); - - app.post('/ng-helper/directive/definition', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getDirectiveDefinitionInfo(coreCtx, body), - }); - }); -} - -function configHoverApi(app: express.Application) { - app.post('/ng-helper/filter/name/hover', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getFilterNameHoverInfo(coreCtx, body), - }); - }); - - app.post('/ng-helper/component/type/hover', (req, res) => { - handleRequestWithCtx({ - req, - res, - action: (ctx, body) => getComponentTypeHoverInfo(ctx, body), - }); - }); - - app.post('/ng-helper/component/name/hover', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getComponentNameOrAttrNameHoverInfo(coreCtx, body), - }); - }); - - app.post('/ng-helper/component/attr/hover', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getComponentNameOrAttrNameHoverInfo(coreCtx, body), - }); - }); - - app.post('/ng-helper/controller/type/hover', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getControllerTypeHoverInfo(coreCtx, body), - }); - }); - - app.post('/ng-helper/directive/hover', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getDirectiveHoverInfo(coreCtx, body), - }); - }); -} - -function configCompletionApi(app: express.Application) { - app.post('/ng-helper/filter/name/completion', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getFilterNameCompletions(coreCtx, body), - }); - }); - - app.post('/ng-helper/component/type/completion', (req, res) => { - handleRequestWithCtx({ - req, - res, - action: (ctx, body) => getComponentTypeCompletions(ctx, body.prefix), - }); - }); - - app.post('/ng-helper/component/name/completion', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (ctx, body) => getComponentNameCompletions(ctx, body.fileName), - }); - }); - - app.post('/ng-helper/component/attr/completion', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getComponentAttrCompletions(coreCtx, body.fileName, body.componentName), - }); - }); - - app.post('/ng-helper/directive/completion', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getDirectiveCompletions(coreCtx, body), - }); - }); - - app.post('/ng-helper/controller/type/completion', (req, res) => { - handleRequestWithCoreCtx({ - req, - res, - action: (coreCtx, body) => getControllerTypeCompletions(coreCtx, body), - }); - }); -} - -function handleRequestWithCtx({ - req, - res, - action, -}: { - req: express.Request; - res: express.Response>; - action: (ctx: PluginContext, body: TBody) => TResponse; -}) { - return handleRequest({ req, res, resolveCtx: (body) => ngHelperServer.getContext(body.fileName), action }); -} - -function handleRequestWithCoreCtx({ - req, - res, - action, -}: { - req: express.Request; - res: express.Response>; - action: (ctx: CorePluginContext, body: TBody) => TResponse; -}) { - return handleRequest({ req, res, resolveCtx: (body) => ngHelperServer.getCoreContext(body.fileName), action }); -} - -function handleRequest({ - req, - res, - resolveCtx, - action, -}: { - req: express.Request; - res: express.Response>; - resolveCtx: (body: TBody) => TCtx | undefined; - action: (ctx: TCtx, body: TBody) => TResponse; -}) { - const body = req.body; - const ctx = resolveCtx(body); - if (!ctx) { - return res.send({ errKey: 'NO_CONTEXT' }); - } - - ctx.logger.startGroup(); - try { - ctx.logger.info('[api] ->', body); - const data = action(ctx, body); - res.send({ data }); - ctx.logger.info('[api] <-', data); - } catch (error) { - ctx.logger.error(req.url, (error as Error).message, (error as Error).stack); - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-explicit-any - res.status(500).send(error as any); - } finally { - ctx.logger.endGroup(); - } -} diff --git a/packages/typescript-plugin/src/ngHelperTsService/RpcRouter.ts b/packages/typescript-plugin/src/ngHelperTsService/RpcRouter.ts new file mode 100644 index 00000000..5cb32b45 --- /dev/null +++ b/packages/typescript-plugin/src/ngHelperTsService/RpcRouter.ts @@ -0,0 +1,88 @@ +import type { NgRequest } from '@ng-helper/shared/lib/plugin'; +import type { RpcErrorKey, RpcRequest, RpcResponse } from '@ng-helper/shared/lib/rpc'; + +import type { CorePluginContext, PluginContext } from '../type'; + +import type { Log, RpcRequestHandler } from './rpcClient'; + +export type RpcMethodConfig = { + isCoreCtx: boolean; + handler: (ctx: CorePluginContext | PluginContext, ngRequest: NgRequest) => unknown; +}; + +export type ResolveCtx = (ngRequest: NgRequest, isCoreCtx: boolean) => CorePluginContext | PluginContext | undefined; + +export class RpcRouter implements RpcRequestHandler { + constructor( + private _resolveCtx: ResolveCtx, + private _methodMapping: Record, + private _log: Log, + ) {} + + handleRequest(rpcRequest: RpcRequest): RpcResponse { + try { + return this.dispatchRequest(rpcRequest); + } catch (error) { + return this.rpcError(rpcRequest.id, 'INTERNAL_ERROR', JSON.stringify(error)); + } + } + + private dispatchRequest(rpcRequest: RpcRequest): RpcResponse { + const { method, params, id } = rpcRequest; + + const config = this._methodMapping[method]; + if (!config) { + return this.rpcError(id, 'METHOD_NOT_FOUND', `Method not found: ${method}`); + } + + const ngRequest = this.parseNgRequest(params); + if (!ngRequest) { + return this.rpcError(id, 'PARSE_PARAMS_ERROR', `Failed to parse params: ${params}`); + } + + const ctx = this._resolveCtx(ngRequest, config.isCoreCtx); + if (!ctx) { + return this.rpcError(id, 'NO_CONTEXT', `No context for "${method}"`, ngRequest.fileName); + } + + ctx.logger.startGroup(); + try { + ctx.logger.info(`[rpc]#${id} ->`, ngRequest); + const result = config.handler(ctx, ngRequest); + ctx.logger.info(`[rpc]#${id} <-`, result); + + return { + requestId: id, + success: true, + result: result ? JSON.stringify(result) : undefined, + }; + } finally { + ctx.logger.endGroup(); + } + } + + private rpcError(requestId: string, errorKey: RpcErrorKey, errorMessage: string, data?: unknown): RpcResponse { + const result = { + requestId, + success: false, + error: { + errorKey, + errorMessage, + data, + }, + }; + + this._log('[rpc router] Send error message:', result); + + return result; + } + + private parseNgRequest(params: string): NgRequest | null { + try { + return JSON.parse(params) as NgRequest; + } catch (error) { + this._log('[rpc router] parseNgRequest() error:', error); + return null; + } + } +} diff --git a/packages/typescript-plugin/src/ngHelperServer/index.ts b/packages/typescript-plugin/src/ngHelperTsService/index.ts similarity index 59% rename from packages/typescript-plugin/src/ngHelperServer/index.ts rename to packages/typescript-plugin/src/ngHelperTsService/index.ts index 7b0d88b1..28a8b129 100644 --- a/packages/typescript-plugin/src/ngHelperServer/index.ts +++ b/packages/typescript-plugin/src/ngHelperTsService/index.ts @@ -1,28 +1,26 @@ -import * as http from 'http'; - -import { NgPluginConfiguration } from '@ng-helper/shared/lib/plugin'; -import express from 'express'; +import { NgPluginConfiguration, type NgRequest } from '@ng-helper/shared/lib/plugin'; import type ts from 'typescript/lib/tsserverlibrary'; import { CorePluginContext, GetCoreContextFn, NgHelperServer, PluginContext, PluginLogger, ProjectInfo } from '../type'; import { buildLogger } from '../utils/log'; -import { configApi } from './configApi'; +import { RpcRouter } from './RpcRouter'; +import { methodMapping } from './methodMapping'; import { buildCache, type NgCache } from './ngCache'; +import { RpcClient } from './rpcClient'; import { getCtxOfCoreCtx } from './utils'; -export const ngHelperServer = createNgHelperServer(); +export const ngHelperTsService = createNgHelperTsService(); -function createNgHelperServer(): NgHelperServer { - const _express = initHttpServer(); - let _httpServer: http.Server | undefined; +function createNgHelperTsService(): NgHelperServer { + const _rpcClient = new RpcClient(new RpcRouter(_resolveCtx, methodMapping, _log), _log); let _config: Partial | undefined; const _getContextMap = new Map(); const _cacheMap = new Map(); return { - isExtensionActivated, + isNgHelperCanHandled, getConfig, updateConfig, addProject, @@ -31,8 +29,42 @@ function createNgHelperServer(): NgHelperServer { getCache, }; - function isExtensionActivated() { - return !!_config?.port; + function _resolveCtx( + ngRequest: NgRequest, + isCoreCtx: T, + ): CorePluginContext | PluginContext | undefined { + return isCoreCtx ? getCoreContext(ngRequest.fileName) : getContext(ngRequest.fileName); + } + + function _log(msg: string, ...info: unknown[]) { + // log record + if (_getContextMap.size > 0) { + const { value: getCoreContext } = _getContextMap.values().next() as { + value: GetCoreContextFn; + done: boolean; + }; + getCoreContext()?.logger.info(msg, ...info); + } + } + + function isNgHelperCanHandled(info: ts.server.PluginCreateInfo, filePath: string) { + // config 还没有,则还没有准备好,统一返回 false + if (!_config || !_config.port) { + return false; + } + + if (!Array.isArray(_config.projectMappings)) { + // 没有配置,则都是 + return true; + } + + // 按照配置来决定 + const tsProjectRootPath = info.project.getCurrentDirectory(); + const projectConfig = _config.projectMappings.find((x) => x.tsProjectPath === tsProjectRootPath); + if (!projectConfig) { + return false; + } + return filePath.startsWith(projectConfig.ngProjectPath); } function getConfig() { @@ -40,20 +72,20 @@ function createNgHelperServer(): NgHelperServer { } function updateConfig(cfg: Partial) { - if (_config?.port !== cfg.port && cfg.port) { - _httpServer?.close(); - _httpServer = _express.listen(cfg.port); - } + _log('updateConfig(): config:', cfg); - _config = cfg; + // 注意: + // 这里的 info.config 不一定包含 ng-helper-vscode 那边传递的配置。 + // 通过判断有没有 port 可以确定是从 ng-helper-vscode 传递过来的。 + const isNgHelperConfig = !!cfg.port; + const isUpdateRpcPort = isNgHelperConfig && _config?.port !== cfg.port; - // log record - if (_getContextMap.size > 0) { - const { value: getCoreContext } = _getContextMap.values().next() as { - value: GetCoreContextFn; - done: boolean; - }; - getCoreContext()?.logger.info('updateConfig(): config:', cfg); + if (isNgHelperConfig) { + _config = cfg; + } + + if (isUpdateRpcPort) { + _rpcClient.updatePort(cfg.port); } } @@ -65,12 +97,15 @@ function createNgHelperServer(): NgHelperServer { initLogger.startGroup(); initLogger.info('start with info.config:', info.config); - if (!_config) { - updateConfig(info.config as Partial); - } + // 更新 config + // 注意: + // 这里的 info.config 不一定包含 ng-helper-vscode 那边传递的配置。 + // 具体有没有取决于 ng-helper-vscode 那边 set config 与这里执行的先后。 + updateConfig(info.config as Partial); const projectRoot = projectInfo.info.project.getCurrentDirectory(); initLogger.info('project root from ts server:', projectRoot); + _rpcClient.report('addProject', projectRoot); const getCoreContext = buildGetCoreContextFunc({ info, logger, modules }); @@ -86,10 +121,11 @@ function createNgHelperServer(): NgHelperServer { if (projectRoot) { _getContextMap.delete(projectRoot); _cacheMap.delete(projectRoot); + _rpcClient.report('removeProject', projectRoot); initLogger.info('dispose:', projectRoot); if (_getContextMap.size === 0) { - _httpServer?.close(); + _rpcClient.dispose(); initLogger.info('close http server.'); } } @@ -136,6 +172,15 @@ function createNgHelperServer(): NgHelperServer { function getProjectRoot(filePath: string): string | undefined { const paths = Array.from(_getContextMap.keys()); + if (Array.isArray(_config?.projectMappings)) { + for (const { tsProjectPath, ngProjectPath } of _config.projectMappings) { + if (filePath.startsWith(ngProjectPath)) { + return tsProjectPath; + } + } + return undefined; + } + paths.sort((a, b) => b.length - a.length); for (const projectRoot of paths) { if (filePath.startsWith(projectRoot)) { @@ -166,12 +211,3 @@ function buildGetCoreContextFunc({ info, logger, modules }: ProjectInfo & { logg }; } } - -function initHttpServer() { - const app = express(); - app.use(express.json()); - - configApi(app); - - return app; -} diff --git a/packages/typescript-plugin/src/ngHelperTsService/methodMapping.ts b/packages/typescript-plugin/src/ngHelperTsService/methodMapping.ts new file mode 100644 index 00000000..c8f17604 --- /dev/null +++ b/packages/typescript-plugin/src/ngHelperTsService/methodMapping.ts @@ -0,0 +1,166 @@ +import type { + NgFilterNameDefinitionRequest, + NgControllerNameDefinitionRequest, + NgComponentNameOrAttrNameDefinitionRequest, + NgTypeDefinitionRequest, + NgCtrlTypeDefinitionRequest, + NgDirectiveDefinitionRequest, + NgHoverRequest, + NgComponentNameOrAttrNameHoverRequest, + NgCtrlHoverRequest, + NgDirectiveHoverRequest, + NgTypeCompletionRequest, + NgComponentAttrCompletionRequest, + NgDirectiveCompletionRequest, + NgCtrlTypeCompletionRequest, + NgListDirectivesStringAttrsRequest, + NgListComponentsStringAttrsRequest, +} from '@ng-helper/shared/lib/plugin'; + +import { + getComponentAttrCompletions, + getComponentControllerAs, + getComponentNameCompletions, + getComponentTypeCompletions, + getControllerTypeCompletions, + getDirectiveCompletions, + getFilterNameCompletions, +} from '../completion'; +import { + getComponentNameOrAttrNameDefinitionInfo, + getComponentTypeDefinitionInfo, + getControllerNameDefinitionInfo, + getControllerTypeDefinitionInfo, + getDirectiveDefinitionInfo, + getFilterNameDefinitionInfo, +} from '../definition'; +import { + getComponentNameOrAttrNameHoverInfo, + getComponentTypeHoverInfo, + getControllerTypeHoverInfo, + getDirectiveHoverInfo, + getFilterNameHoverInfo, +} from '../hover'; +import { getComponentsStringAttrsInfo, getDirectivesStringAttrsInfo } from '../other'; +import type { PluginContext } from '../type'; + +import type { RpcMethodConfig } from './RpcRouter'; + +const definitionMethods = { + 'definition/component/attr': { + isCoreCtx: true, + handler: (ctx, ngRequest) => + getComponentNameOrAttrNameDefinitionInfo(ctx, ngRequest as NgComponentNameOrAttrNameDefinitionRequest), + }, + 'definition/component/name': { + isCoreCtx: true, + handler: (ctx, ngRequest) => + getComponentNameOrAttrNameDefinitionInfo(ctx, ngRequest as NgComponentNameOrAttrNameDefinitionRequest), + }, + 'definition/component/type': { + isCoreCtx: false, + handler: (ctx, ngRequest) => + getComponentTypeDefinitionInfo(ctx as PluginContext, ngRequest as NgTypeDefinitionRequest), + }, + 'definition/controller/name': { + isCoreCtx: false, + handler: (ctx, ngRequest) => + getControllerNameDefinitionInfo(ctx as PluginContext, ngRequest as NgControllerNameDefinitionRequest), + }, + 'definition/controller/type': { + isCoreCtx: true, + handler: (ctx, ngRequest) => getControllerTypeDefinitionInfo(ctx, ngRequest as NgCtrlTypeDefinitionRequest), + }, + 'definition/directive': { + isCoreCtx: true, + handler: (ctx, ngRequest) => getDirectiveDefinitionInfo(ctx, ngRequest as NgDirectiveDefinitionRequest), + }, + 'definition/filter/name': { + isCoreCtx: true, + handler: (ctx, ngRequest) => getFilterNameDefinitionInfo(ctx, ngRequest as NgFilterNameDefinitionRequest), + }, +} satisfies Record; + +const completionMethods = { + 'completion/component/attr': { + isCoreCtx: true, + handler: (ctx, ngRequest) => + getComponentAttrCompletions( + ctx, + (ngRequest as NgComponentAttrCompletionRequest).fileName, + (ngRequest as NgComponentAttrCompletionRequest).componentName, + ), + }, + 'completion/component/name': { + isCoreCtx: true, + handler: (ctx, ngRequest) => getComponentNameCompletions(ctx, ngRequest.fileName), + }, + 'completion/component/type': { + isCoreCtx: false, + handler: (ctx, ngRequest) => + getComponentTypeCompletions(ctx as PluginContext, (ngRequest as NgTypeCompletionRequest).prefix), + }, + 'completion/controller/type': { + isCoreCtx: true, + handler: (ctx, ngRequest) => getControllerTypeCompletions(ctx, ngRequest as NgCtrlTypeCompletionRequest), + }, + 'completion/directive': { + isCoreCtx: true, + handler: (ctx, ngRequest) => getDirectiveCompletions(ctx, ngRequest as NgDirectiveCompletionRequest), + }, + 'completion/filter/name': { + isCoreCtx: true, + handler: (ctx, ngRequest) => getFilterNameCompletions(ctx, ngRequest), + }, +} satisfies Record; + +const hoverMethods = { + 'hover/component/attr': { + isCoreCtx: true, + handler: (ctx, ngRequest) => + getComponentNameOrAttrNameHoverInfo(ctx, ngRequest as NgComponentNameOrAttrNameHoverRequest), + }, + 'hover/component/name': { + isCoreCtx: true, + handler: (ctx, ngRequest) => + getComponentNameOrAttrNameHoverInfo(ctx, ngRequest as NgComponentNameOrAttrNameHoverRequest), + }, + 'hover/component/type': { + isCoreCtx: false, + handler: (ctx, ngRequest) => getComponentTypeHoverInfo(ctx as PluginContext, ngRequest as NgHoverRequest), + }, + 'hover/controller/type': { + isCoreCtx: true, + handler: (ctx, ngRequest) => getControllerTypeHoverInfo(ctx, ngRequest as NgCtrlHoverRequest), + }, + 'hover/directive': { + isCoreCtx: true, + handler: (ctx, ngRequest) => getDirectiveHoverInfo(ctx, ngRequest as NgDirectiveHoverRequest), + }, + 'hover/filter/name': { + isCoreCtx: true, + handler: (ctx, ngRequest) => getFilterNameHoverInfo(ctx, ngRequest as NgHoverRequest), + }, +} satisfies Record; + +const otherMethods = { + 'controller-as/component': { + isCoreCtx: false, + handler: (ctx) => getComponentControllerAs(ctx as PluginContext), + }, + 'attrs/string/components': { + isCoreCtx: true, + handler: (ctx, ngRequest) => getComponentsStringAttrsInfo(ctx, ngRequest as NgListComponentsStringAttrsRequest), + }, + 'attrs/string/directives': { + isCoreCtx: true, + handler: (ctx, ngRequest) => getDirectivesStringAttrsInfo(ctx, ngRequest as NgListDirectivesStringAttrsRequest), + }, +} satisfies Record; + +export const methodMapping = { + ...definitionMethods, + ...completionMethods, + ...hoverMethods, + ...otherMethods, +} as const satisfies Record; diff --git a/packages/typescript-plugin/src/ngHelperServer/ngCache.ts b/packages/typescript-plugin/src/ngHelperTsService/ngCache.ts similarity index 100% rename from packages/typescript-plugin/src/ngHelperServer/ngCache.ts rename to packages/typescript-plugin/src/ngHelperTsService/ngCache.ts diff --git a/packages/typescript-plugin/src/ngHelperTsService/rpcClient.ts b/packages/typescript-plugin/src/ngHelperTsService/rpcClient.ts new file mode 100644 index 00000000..fc88b97e --- /dev/null +++ b/packages/typescript-plugin/src/ngHelperTsService/rpcClient.ts @@ -0,0 +1,146 @@ +import { + packRpcMessage, + parseRpcMessage, + RPC_HEARTBEAT_INTERVAL, + type RpcReportType, + type RpcRequest, + type RpcResponse, +} from '@ng-helper/shared/lib/rpc'; +import WebSocket from 'ws'; + +type Ws = WebSocket & { pingTimeout?: NodeJS.Timeout }; + +export type Log = (msg: string, ...info: unknown[]) => void; + +export interface RpcRequestHandler { + handleRequest(rpcRequest: RpcRequest): RpcResponse; +} + +const MIN_DELAY = 500; +const MAX_DELAY = RPC_HEARTBEAT_INTERVAL; + +export class RpcClient { + private _ws?: Ws; + private _port?: number; + private _isDispose = false; + private _delay = MIN_DELAY; + + constructor( + private _rpcRequestHandler: RpcRequestHandler, + private _log: Log, + ) {} + + updatePort(port?: number) { + if (this._port !== port) { + this.createWs(port); + } + + this._port = port; + } + + report(type: RpcReportType, projectRoot: string) { + if (this._isDispose) { + return; + } + + if (this._ws && this._ws.readyState === WebSocket.OPEN) { + this._ws.send(packRpcMessage('report', { type, projectRoot })); + } else { + setTimeout(() => { + this.report(type, projectRoot); + }, MIN_DELAY); + } + } + + dispose(): void { + this._isDispose = true; + this._ws?.terminate(); + this._ws = undefined; + } + + private createWs(port?: number) { + // Use `WebSocket#terminate()`, which immediately destroys the connection, + // instead of `WebSocket#close()`, which waits for the close timer. + this._ws?.terminate(); + + if (!port) { + return; + } + + this._ws = new WebSocket(`ws://localhost:${port}`) as Ws; + this.auth(); + this.controlConnection(); + this.handleMessage(); + this.handleError(); + } + + private auth() { + this._ws?.once('open', () => { + this._log('[rpc client] Ws open.'); + + this._delay = MIN_DELAY; + this._ws?.send(packRpcMessage('auth', { serveType: 'srv' })); + }); + } + + private controlConnection() { + this._ws?.once('open', () => this.heartbeat(this._ws!)); + this._ws?.on('ping', () => this.heartbeat(this._ws!)); + this._ws?.on('close', () => { + this._log('[rpc client] Ws close.'); + + clearTimeout(this._ws?.pingTimeout); + this._ws = undefined; + + if (this._isDispose) { + return; + } + + this.reconnection(); + }); + } + + private reconnection() { + if (this._delay > MAX_DELAY) { + this._delay = MIN_DELAY; + } else { + this._delay *= 2; + } + + this._log('[rpc client] Reconnection() delay:', this._delay); + + setTimeout(() => { + this.createWs(this._port); + }, this._delay); + } + + private heartbeat(ws: Ws) { + clearTimeout(ws.pingTimeout); + + // Use `WebSocket#terminate()`, which immediately destroys the connection, + // instead of `WebSocket#close()`, which waits for the close timer. + // Delay should be equal to the interval at which your server + // sends out pings plus a conservative assumption of the latency. + ws.pingTimeout = setTimeout(() => { + this.createWs(this._port); + }, RPC_HEARTBEAT_INTERVAL + 500); + } + + private handleError() { + this._ws?.on('error', (error) => this._log('[rpc client] Ws error:', error)); + } + + private handleMessage() { + this._ws?.on('message', (message) => { + try { + const rpcRequest = parseRpcMessage('request', message as unknown as string, true); + if (rpcRequest) { + const rpcResponse = this._rpcRequestHandler.handleRequest(rpcRequest.data); + this._ws?.send(packRpcMessage('response', rpcResponse)); + } + } catch (error) { + this._log('[rpc client] Handle request error:', error); + } + }); + } +} diff --git a/packages/typescript-plugin/src/ngHelperServer/utils.ts b/packages/typescript-plugin/src/ngHelperTsService/utils.ts similarity index 100% rename from packages/typescript-plugin/src/ngHelperServer/utils.ts rename to packages/typescript-plugin/src/ngHelperTsService/utils.ts diff --git a/packages/typescript-plugin/src/other/index.ts b/packages/typescript-plugin/src/other/index.ts index b19ae00f..e1de2d5e 100644 --- a/packages/typescript-plugin/src/other/index.ts +++ b/packages/typescript-plugin/src/other/index.ts @@ -5,7 +5,7 @@ import type { NgListDirectivesStringAttrsRequest, } from '@ng-helper/shared/lib/plugin'; -import { ngHelperServer } from '../ngHelperServer'; +import { ngHelperTsService } from '../ngHelperTsService'; import type { CorePluginContext } from '../type'; import { getBindingName, isAttributeDirective, isStringBinding } from '../utils/ng'; @@ -16,7 +16,7 @@ export function getComponentsStringAttrsInfo( ): NgComponentsStringAttrsResponse { const logger = coreCtx.logger.prefix('getComponentsStringAttrsInfo()'); - const cache = ngHelperServer.getCache(fileName); + const cache = ngHelperTsService.getCache(fileName); if (!cache) { logger.info(`cache not found for file(${fileName})!`); return; @@ -56,7 +56,7 @@ export function getDirectivesStringAttrsInfo( ): NgDirectivesStringAttrsResponse { const logger = coreCtx.logger.prefix('getDirectivesStringAttrsInfo()'); - const cache = ngHelperServer.getCache(fileName); + const cache = ngHelperTsService.getCache(fileName); if (!cache) { logger.info(`cache not found for file(${fileName})!`); return; diff --git a/packages/typescript-plugin/src/type.ts b/packages/typescript-plugin/src/type.ts index 7bd413ad..7e97e592 100644 --- a/packages/typescript-plugin/src/type.ts +++ b/packages/typescript-plugin/src/type.ts @@ -1,7 +1,7 @@ import { NgPluginConfiguration } from '@ng-helper/shared/lib/plugin'; import type ts from 'typescript'; -import { type NgCache } from './ngHelperServer/ngCache'; +import { type NgCache } from './ngHelperTsService/ngCache'; export interface PluginCoreLogger { // eslint-disable-next-line @typescript-eslint/no-explicit-any @@ -53,7 +53,7 @@ export type NgHelperServer = { addProject: (projectInfo: ProjectInfo) => () => void; getContext: GetContextFnViaFilePath; getCoreContext: GetCoreContextFnViaFilePath; - isExtensionActivated: () => boolean; + isNgHelperCanHandled: (info: ts.server.PluginCreateInfo, filePath: string) => boolean; getCache: (filePath: string) => NgCache | undefined; }; diff --git a/packages/typescript-plugin/src/utils/biz.ts b/packages/typescript-plugin/src/utils/biz.ts index fc6762fa..7ed694b8 100644 --- a/packages/typescript-plugin/src/utils/biz.ts +++ b/packages/typescript-plugin/src/utils/biz.ts @@ -1,7 +1,7 @@ import type { NgTypeInfo } from '@ng-helper/shared/lib/plugin'; -import type { DirectiveInfo, NgCache } from '../ngHelperServer/ngCache'; -import { getCtxOfCoreCtx } from '../ngHelperServer/utils'; +import type { DirectiveInfo, NgCache } from '../ngHelperTsService/ngCache'; +import { getCtxOfCoreCtx } from '../ngHelperTsService/utils'; import type { CorePluginContext } from '../type'; import { getTypeInfoOfDirectiveScope, isAttributeDirective } from './ng'; diff --git a/packages/typescript-plugin/src/utils/common.ts b/packages/typescript-plugin/src/utils/common.ts index f26a5e3b..bac5218d 100644 --- a/packages/typescript-plugin/src/utils/common.ts +++ b/packages/typescript-plugin/src/utils/common.ts @@ -1,7 +1,7 @@ import { NgTypeInfo } from '@ng-helper/shared/lib/plugin'; import type ts from 'typescript'; -import type { Parameter } from '../ngHelperServer/ngCache'; +import type { Parameter } from '../ngHelperTsService/ngCache'; import { PluginContext, FileVersion, type CorePluginContext } from '../type'; export function createTmpSourceFile( @@ -122,7 +122,7 @@ function getPublicMembersTypeInfoViaType(ctx: PluginContext, type: ts.Type): NgT const result = type .getApparentProperties() .map((x) => buildTypeInfo(ctx, x)) - .filter((x) => !!x) as NgTypeInfo[]; + .filter((x) => !!x); return result; } diff --git a/packages/typescript-plugin/src/utils/ng.ts b/packages/typescript-plugin/src/utils/ng.ts index bd801bc8..87cab031 100644 --- a/packages/typescript-plugin/src/utils/ng.ts +++ b/packages/typescript-plugin/src/utils/ng.ts @@ -2,7 +2,7 @@ import { SPACE } from '@ng-helper/shared/lib/html'; import { NgTypeInfo } from '@ng-helper/shared/lib/plugin'; import type ts from 'typescript'; -import type { DirectiveInfo, Property } from '../ngHelperServer/ngCache'; +import type { DirectiveInfo, Property } from '../ngHelperTsService/ngCache'; import { PluginContext } from '../type'; import { getPropValueByName, isTypeOfType } from './common'; @@ -388,4 +388,8 @@ export function isDtsFile(fileName: string): boolean { return fileName.endsWith('.d.ts'); } +export function isJsOrTsFile(fileName: string): boolean { + return fileName.endsWith('.js') || fileName.endsWith('.ts'); +} + export const INDENT = SPACE.repeat(4); diff --git a/packages/typescript-plugin/tests/utils/ng.spec.ts b/packages/typescript-plugin/tests/utils/ng.spec.ts index 3a08f4b9..44276775 100644 --- a/packages/typescript-plugin/tests/utils/ng.spec.ts +++ b/packages/typescript-plugin/tests/utils/ng.spec.ts @@ -1,7 +1,7 @@ import type { NgTypeInfo } from '@ng-helper/shared/lib/plugin'; import type ts from 'typescript'; -import { DirectiveInfo, type Property } from '../../src/ngHelperServer/ngCache'; +import { DirectiveInfo, type Property } from '../../src/ngHelperTsService/ngCache'; import { PluginContext } from '../../src/type'; import { isAttributeDirective, diff --git a/yarn.lock b/yarn.lock index 825a7f32..89d76dac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -10,13 +10,6 @@ "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.24" -"@azure/abort-controller@^1.0.0": - version "1.1.0" - resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-1.1.0.tgz#788ee78457a55af8a1ad342acb182383d2119249" - integrity sha512-TrRLIoSQVzfAJX9H1JeFjzAoDGcoK1IYX1UImfceTZpsyYfWr09Ss1aHW1y5TrrR3iq6RZLBwJ3E24uwPhwahw== - dependencies: - tslib "^2.2.0" - "@azure/abort-controller@^2.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/@azure/abort-controller/-/abort-controller-2.1.2.tgz#42fe0ccab23841d9905812c58f1082d27784566d" @@ -24,19 +17,19 @@ dependencies: tslib "^2.6.2" -"@azure/core-auth@^1.4.0", "@azure/core-auth@^1.5.0": - version "1.7.2" - resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.7.2.tgz#558b7cb7dd12b00beec07ae5df5907d74df1ebd9" - integrity sha512-Igm/S3fDYmnMq1uKS38Ae1/m37B3zigdlZw+kocwEhh5GjyKjPrXKO2J6rzpC1wAxrNil/jX9BJRqBshyjnF3g== +"@azure/core-auth@^1.4.0", "@azure/core-auth@^1.8.0", "@azure/core-auth@^1.9.0": + version "1.9.0" + resolved "https://registry.yarnpkg.com/@azure/core-auth/-/core-auth-1.9.0.tgz#ac725b03fabe3c892371065ee9e2041bee0fd1ac" + integrity sha512-FPwHpZywuyasDSLMqJ6fhbOK3TqUdviZNF8OqRGA4W5Ewib2lEEZ+pBsYcBa88B2NGO/SEnYPGhyBqNlE8ilSw== dependencies: "@azure/abort-controller" "^2.0.0" - "@azure/core-util" "^1.1.0" + "@azure/core-util" "^1.11.0" tslib "^2.6.2" "@azure/core-client@^1.9.2": - version "1.9.2" - resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.9.2.tgz#6fc69cee2816883ab6c5cdd653ee4f2ff9774f74" - integrity sha512-kRdry/rav3fUKHl/aDLd/pDLcB+4pOFwPPTVEExuMyaI5r+JBbMWqRbCY1pn5BniDaU3lRxO9eaQ1AmSMehl/w== + version "1.9.3" + resolved "https://registry.yarnpkg.com/@azure/core-client/-/core-client-1.9.3.tgz#9ca8f3bdc730d10d58f65c9c2c9ca992bc15bb67" + integrity sha512-/wGw8fJ4mdpJ1Cum7s1S+VQyXt1ihwKLzfabS1O/RDADnmzVc01dHn44qD0BvGH6KlZNzOMW95tEpKqhkCChPA== dependencies: "@azure/abort-controller" "^2.0.0" "@azure/core-auth" "^1.4.0" @@ -46,181 +39,170 @@ "@azure/logger" "^1.0.0" tslib "^2.6.2" -"@azure/core-rest-pipeline@^1.1.0", "@azure/core-rest-pipeline@^1.9.1": - version "1.16.1" - resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.16.1.tgz#069caf02ca283027dd0a3cf37817e674ebf130c8" - integrity sha512-ExPSbgjwCoht6kB7B4MeZoBAxcQSIl29r/bPeazZJx50ej4JJCByimLOrZoIsurISNyJQQHf30b3JfqC3Hb88A== +"@azure/core-rest-pipeline@^1.17.0", "@azure/core-rest-pipeline@^1.9.1": + version "1.19.1" + resolved "https://registry.yarnpkg.com/@azure/core-rest-pipeline/-/core-rest-pipeline-1.19.1.tgz#e740676444777a04dc55656d8660131dfd926924" + integrity sha512-zHeoI3NCs53lLBbWNzQycjnYKsA1CVKlnzSNuSFcUDwBp8HHVObePxrM7HaX+Ha5Ks639H7chNC9HOaIhNS03w== dependencies: "@azure/abort-controller" "^2.0.0" - "@azure/core-auth" "^1.4.0" + "@azure/core-auth" "^1.8.0" "@azure/core-tracing" "^1.0.1" - "@azure/core-util" "^1.9.0" + "@azure/core-util" "^1.11.0" "@azure/logger" "^1.0.0" http-proxy-agent "^7.0.0" https-proxy-agent "^7.0.0" tslib "^2.6.2" "@azure/core-tracing@^1.0.0", "@azure/core-tracing@^1.0.1": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.1.2.tgz#065dab4e093fb61899988a1cdbc827d9ad90b4ee" - integrity sha512-dawW9ifvWAWmUm9/h+/UQ2jrdvjCJ7VJEuCJ6XVNudzcOwm53BFZH4Q845vjfgoUAM8ZxokvVNxNxAITc502YA== + version "1.2.0" + resolved "https://registry.yarnpkg.com/@azure/core-tracing/-/core-tracing-1.2.0.tgz#7be5d53c3522d639cf19042cbcdb19f71bc35ab2" + integrity sha512-UKTiEJPkWcESPYJz3X5uKRYyOcJD+4nYph+KpfdPRnQJVrZfk0KJgdnaAWKfhsBBtAf/D58Az4AvCJEmWgIBAg== dependencies: tslib "^2.6.2" -"@azure/core-util@^1.1.0", "@azure/core-util@^1.3.0", "@azure/core-util@^1.6.1", "@azure/core-util@^1.9.0": - version "1.9.0" - resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.9.0.tgz#469afd7e6452d5388b189f90d33f7756b0b210d1" - integrity sha512-AfalUQ1ZppaKuxPPMsFEUdX6GZPB3d9paR9d/TTL7Ow2De8cJaC7ibi7kWVlFAVPCYo31OcnGymc0R89DX8Oaw== +"@azure/core-util@^1.11.0", "@azure/core-util@^1.6.1": + version "1.11.0" + resolved "https://registry.yarnpkg.com/@azure/core-util/-/core-util-1.11.0.tgz#f530fc67e738aea872fbdd1cc8416e70219fada7" + integrity sha512-DxOSLua+NdpWoSqULhjDyAZTXFdP/LKkqtYuxxz1SCN289zk3OG8UOpnCQAz/tygyACBtWp/BoO72ptK7msY8g== dependencies: "@azure/abort-controller" "^2.0.0" tslib "^2.6.2" "@azure/identity@^4.1.0": - version "4.3.0" - resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-4.3.0.tgz#e8da6b3bf1df4de1511e813a7166a4b5b4a99ca1" - integrity sha512-LHZ58/RsIpIWa4hrrE2YuJ/vzG1Jv9f774RfTTAVDZDriubvJ0/S5u4pnw4akJDlS0TiJb6VMphmVUFsWmgodQ== + version "4.9.1" + resolved "https://registry.yarnpkg.com/@azure/identity/-/identity-4.9.1.tgz#ee4b9435f1b96bea5985e7dec989760a67d9a119" + integrity sha512-986D7Cf1AOwYqSDtO/FnMAyk/Jc8qpftkGsxuehoh4F85MhQ4fICBGX/44+X1y78lN4Sqib3Bsoaoh/FvOGgmg== dependencies: - "@azure/abort-controller" "^1.0.0" - "@azure/core-auth" "^1.5.0" + "@azure/abort-controller" "^2.0.0" + "@azure/core-auth" "^1.9.0" "@azure/core-client" "^1.9.2" - "@azure/core-rest-pipeline" "^1.1.0" + "@azure/core-rest-pipeline" "^1.17.0" "@azure/core-tracing" "^1.0.0" - "@azure/core-util" "^1.3.0" + "@azure/core-util" "^1.11.0" "@azure/logger" "^1.0.0" - "@azure/msal-browser" "^3.11.1" - "@azure/msal-node" "^2.9.2" - events "^3.0.0" - jws "^4.0.0" - open "^8.0.0" - stoppable "^1.1.0" + "@azure/msal-browser" "^4.2.0" + "@azure/msal-node" "^3.5.0" + open "^10.1.0" tslib "^2.2.0" "@azure/logger@^1.0.0": - version "1.1.2" - resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.1.2.tgz#3f4b876cefad328dc14aff8b850d63b611e249dc" - integrity sha512-l170uE7bsKpIU6B/giRc9i4NI0Mj+tANMMMxf7Zi/5cKzEqPayP7+X1WPrG7e+91JgY8N+7K7nF2WOi7iVhXvg== + version "1.1.4" + resolved "https://registry.yarnpkg.com/@azure/logger/-/logger-1.1.4.tgz#223cbf2b424dfa66478ce9a4f575f59c6f379768" + integrity sha512-4IXXzcCdLdlXuCG+8UKEwLA1T1NHqUfanhXYHiQTn+6sfWCZXduqbtXDGceg3Ce5QxTGo7EqmbV6Bi+aqKuClQ== dependencies: tslib "^2.6.2" -"@azure/msal-browser@^3.11.1": - version "3.18.0" - resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-3.18.0.tgz#dabbde2c53195a2e0ec8404f61f337c82c159b71" - integrity sha512-jvK5bDUWbpOaJt2Io/rjcaOVcUzkqkrCme/WntdV1SMUc67AiTcEdKuY6G/nMQ7N5Cfsk9SfpugflQwDku53yg== +"@azure/msal-browser@^4.2.0": + version "4.11.0" + resolved "https://registry.yarnpkg.com/@azure/msal-browser/-/msal-browser-4.11.0.tgz#e9d9651d692969e68c78ef873ed9a69e02389a64" + integrity sha512-0p5Ut3wORMP+975AKvaSPIO4UytgsfAvJ7RxaTx+nkP+Hpkmm93AuiMkBWKI2x9tApU/SLgIyPz/ZwLYUIWb5Q== dependencies: - "@azure/msal-common" "14.13.0" + "@azure/msal-common" "15.5.1" -"@azure/msal-common@14.13.0": - version "14.13.0" - resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-14.13.0.tgz#7377b4909a46d19ea91dadd24af7705e6aa947af" - integrity sha512-b4M/tqRzJ4jGU91BiwCsLTqChveUEyFK3qY2wGfZ0zBswIBZjAxopx5CYt5wzZFKuN15HqRDYXQbztttuIC3nA== +"@azure/msal-common@15.5.1": + version "15.5.1" + resolved "https://registry.yarnpkg.com/@azure/msal-common/-/msal-common-15.5.1.tgz#3b34c81013530e1425a1fad40f3ac1238e1780f8" + integrity sha512-oxK0khbc4Bg1bKQnqDr7ikULhVL2OHgSrIq0Vlh4b6+hm4r0lr6zPMQE8ZvmacJuh+ZZGKBM5iIObhF1q1QimQ== -"@azure/msal-node@^2.9.2": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-2.10.0.tgz#0b893ab05dbef5c963aba080c88a0330393c4973" - integrity sha512-JxsSE0464a8IA/+q5EHKmchwNyUFJHtCH00tSXsLaOddwLjG6yVvTH6lGgPcWMhO7YWUXj/XVgVgeE9kZtsPUQ== +"@azure/msal-node@^3.5.0": + version "3.5.1" + resolved "https://registry.yarnpkg.com/@azure/msal-node/-/msal-node-3.5.1.tgz#8bb233cbeeda83f64af4cc29569f1b5312c9b9ad" + integrity sha512-dkgMYM5B6tI88r/oqf5bYd93WkenQpaWwiszJDk7avVjso8cmuKRTW97dA1RMi6RhihZFLtY1VtWxU9+sW2T5g== dependencies: - "@azure/msal-common" "14.13.0" + "@azure/msal-common" "15.5.1" jsonwebtoken "^9.0.0" uuid "^8.3.0" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.24.7.tgz#882fd9e09e8ee324e496bd040401c6f046ef4465" - integrity sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA== +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.26.2": + version "7.26.2" + resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.26.2.tgz#4b5fab97d33338eff916235055f0ebc21e573a85" + integrity sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ== dependencies: - "@babel/highlight" "^7.24.7" + "@babel/helper-validator-identifier" "^7.25.9" + js-tokens "^4.0.0" picocolors "^1.0.0" -"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.24.7.tgz#d23bbea508c3883ba8251fb4164982c36ea577ed" - integrity sha512-qJzAIcv03PyaWqxRgO4mSU3lihncDT296vnyuE2O8uA4w3UHWI4S3hgeZd1L8W1Bft40w9JxJ2b412iDUFFRhw== +"@babel/compat-data@^7.22.6", "@babel/compat-data@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.26.8.tgz#821c1d35641c355284d4a870b8a4a7b0c141e367" + integrity sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ== "@babel/core@^7.11.6", "@babel/core@^7.12.3", "@babel/core@^7.23.9": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.24.7.tgz#b676450141e0b52a3d43bc91da86aa608f950ac4" - integrity sha512-nykK+LEK86ahTkX/3TgauT0ikKoNCfKHEaZYTUVupJdTLzGNvrblu4u6fa7DhZONAltdf8e662t/abY8idrd/g== + version "7.26.10" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.26.10.tgz#5c876f83c8c4dcb233ee4b670c0606f2ac3000f9" + integrity sha512-vMqyb7XCDMPvJFFOaT9kxtiRh42GwlZEg1/uIgtZshS5a/8OaduUfCi7kynKgc3Tw/6Uo2D+db9qBttghhmxwQ== dependencies: "@ampproject/remapping" "^2.2.0" - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.7" - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helpers" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/template" "^7.24.7" - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.26.10" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helpers" "^7.26.10" + "@babel/parser" "^7.26.10" + "@babel/template" "^7.26.9" + "@babel/traverse" "^7.26.10" + "@babel/types" "^7.26.10" convert-source-map "^2.0.0" debug "^4.1.0" gensync "^1.0.0-beta.2" json5 "^2.2.3" semver "^6.3.1" -"@babel/generator@^7.24.7", "@babel/generator@^7.7.2": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.24.7.tgz#1654d01de20ad66b4b4d99c135471bc654c55e6d" - integrity sha512-oipXieGC3i45Y1A41t4tAqpnEZWgB/lC6Ehh6+rOviR5XWpTtMmLN+fGjz9vOiNRt0p6RtO6DtD0pdU3vpqdSA== +"@babel/generator@^7.26.10", "@babel/generator@^7.27.0", "@babel/generator@^7.7.2": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.27.0.tgz#764382b5392e5b9aff93cadb190d0745866cbc2c" + integrity sha512-VybsKvpiN1gU1sdMZIp7FcqphVVKEwcuj02x73uvcHE0PTihx1nlBcowYWhDwjpoAXRv43+gDzyggGnn1XZhVw== dependencies: - "@babel/types" "^7.24.7" + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" "@jridgewell/gen-mapping" "^0.3.5" "@jridgewell/trace-mapping" "^0.3.25" - jsesc "^2.5.1" - -"@babel/helper-annotate-as-pure@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.24.7.tgz#5373c7bc8366b12a033b4be1ac13a206c6656aab" - integrity sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg== - dependencies: - "@babel/types" "^7.24.7" + jsesc "^3.0.2" -"@babel/helper-builder-binary-assignment-operator-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-builder-binary-assignment-operator-visitor/-/helper-builder-binary-assignment-operator-visitor-7.24.7.tgz#37d66feb012024f2422b762b9b2a7cfe27c7fba3" - integrity sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA== +"@babel/helper-annotate-as-pure@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.25.9.tgz#d8eac4d2dc0d7b6e11fa6e535332e0d3184f06b4" + integrity sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g== dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" + "@babel/types" "^7.25.9" -"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.24.7.tgz#4eb6c4a80d6ffeac25ab8cd9a21b5dfa48d503a9" - integrity sha512-ctSdRHBi20qWOfy27RUb4Fhp07KSJ3sXcuSvTrXrc4aG8NSYDo1ici3Vhg9bg69y5bj0Mr1lh0aeEgTvc12rMg== +"@babel/helper-compilation-targets@^7.22.6", "@babel/helper-compilation-targets@^7.25.9", "@babel/helper-compilation-targets@^7.26.5": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.27.0.tgz#de0c753b1cd1d9ab55d473c5a5cf7170f0a81880" + integrity sha512-LVk7fbXml0H2xH34dFzKQ7TDZ2G4/rVTOrq9V+icbbadjbVxxeFeDsNHv2SrZeWoA+6ZiTyWYWtScEIW07EAcA== dependencies: - "@babel/compat-data" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - browserslist "^4.22.2" + "@babel/compat-data" "^7.26.8" + "@babel/helper-validator-option" "^7.25.9" + browserslist "^4.24.0" lru-cache "^5.1.1" semver "^6.3.1" -"@babel/helper-create-class-features-plugin@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.7.tgz#2eaed36b3a1c11c53bdf80d53838b293c52f5b3b" - integrity sha512-kTkaDl7c9vO80zeX1rJxnuRpEsD5tA81yh11X1gQo+PhSti3JS+7qeZo9U4RHobKRiFPKaGK3svUAeb8D0Q7eg== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.7" - "@babel/helper-optimise-call-expression" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" +"@babel/helper-create-class-features-plugin@^7.25.9", "@babel/helper-create-class-features-plugin@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.27.0.tgz#518fad6a307c6a96f44af14912b2c20abe9bfc30" + integrity sha512-vSGCvMecvFCd/BdpGlhpXYNhhC4ccxyvQWpbGL4CWbvfEoLFWUZuSuf7s9Aw70flgQF+6vptvgK2IfOnKlRmBg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/helper-replace-supers" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/traverse" "^7.27.0" semver "^6.3.1" -"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.24.7.tgz#be4f435a80dc2b053c76eeb4b7d16dd22cfc89da" - integrity sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA== +"@babel/helper-create-regexp-features-plugin@^7.18.6", "@babel/helper-create-regexp-features-plugin@^7.25.9": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.27.0.tgz#0e41f7d38c2ebe06ebd9cf0e02fb26019c77cd95" + integrity sha512-fO8l08T76v48BhpNRW/nQ0MxfnSdoSKUJBMjubOAYffsVuGG5qOfMq7N6Es7UJvi7Y8goXXo07EfcHZXDPuELQ== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - regexpu-core "^5.3.1" + "@babel/helper-annotate-as-pure" "^7.25.9" + regexpu-core "^6.2.0" semver "^6.3.1" -"@babel/helper-define-polyfill-provider@^0.6.1", "@babel/helper-define-polyfill-provider@^0.6.2": - version "0.6.2" - resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.2.tgz#18594f789c3594acb24cfdb4a7f7b7d2e8bd912d" - integrity sha512-LV76g+C502biUK6AyZ3LK10vDpDyCzZnhZFXkH1L75zHPj68+qc8Zfpx2th+gzwA2MzyK+1g/3EPl62yFnVttQ== +"@babel/helper-define-polyfill-provider@^0.6.3", "@babel/helper-define-polyfill-provider@^0.6.4": + version "0.6.4" + resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.6.4.tgz#15e8746368bfa671785f5926ff74b3064c291fab" + integrity sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw== dependencies: "@babel/helper-compilation-targets" "^7.22.6" "@babel/helper-plugin-utils" "^7.22.5" @@ -228,187 +210,146 @@ lodash.debounce "^4.0.8" resolve "^1.14.2" -"@babel/helper-environment-visitor@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-environment-visitor/-/helper-environment-visitor-7.24.7.tgz#4b31ba9551d1f90781ba83491dd59cf9b269f7d9" - integrity sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ== +"@babel/helper-member-expression-to-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.25.9.tgz#9dfffe46f727005a5ea29051ac835fb735e4c1a3" + integrity sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-imports@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.25.9.tgz#e7f8d20602ebdbf9ebbea0a0751fb0f2a4141715" + integrity sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-module-transforms@^7.25.9", "@babel/helper-module-transforms@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.26.0.tgz#8ce54ec9d592695e58d84cd884b7b5c6a2fdeeae" + integrity sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw== + dependencies: + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/helper-optimise-call-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.25.9.tgz#3324ae50bae7e2ab3c33f60c9a877b6a0146b54e" + integrity sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ== dependencies: - "@babel/types" "^7.24.7" + "@babel/types" "^7.25.9" + +"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.25.9", "@babel/helper-plugin-utils@^7.26.5", "@babel/helper-plugin-utils@^7.8.0": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.26.5.tgz#18580d00c9934117ad719392c4f6585c9333cc35" + integrity sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg== + +"@babel/helper-remap-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.25.9.tgz#e53956ab3d5b9fb88be04b3e2f31b523afd34b92" + integrity sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-wrap-function" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/helper-function-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-function-name/-/helper-function-name-7.24.7.tgz#75f1e1725742f39ac6584ee0b16d94513da38dd2" - integrity sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA== +"@babel/helper-replace-supers@^7.25.9", "@babel/helper-replace-supers@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.26.5.tgz#6cb04e82ae291dae8e72335dfe438b0725f14c8d" + integrity sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg== dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-hoist-variables@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-hoist-variables/-/helper-hoist-variables-7.24.7.tgz#b4ede1cde2fd89436397f30dc9376ee06b0f25ee" - integrity sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ== - dependencies: - "@babel/types" "^7.24.7" + "@babel/helper-member-expression-to-functions" "^7.25.9" + "@babel/helper-optimise-call-expression" "^7.25.9" + "@babel/traverse" "^7.26.5" -"@babel/helper-member-expression-to-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.24.7.tgz#67613d068615a70e4ed5101099affc7a41c5225f" - integrity sha512-LGeMaf5JN4hAT471eJdBs/GK1DoYIJ5GCtZN/EsL6KUiiDZOvO/eKE11AMZJa2zP4zk4qe9V2O/hxAmkRc8p6w== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-module-imports@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.24.7.tgz#f2f980392de5b84c3328fc71d38bd81bbb83042b" - integrity sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-module-transforms@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.24.7.tgz#31b6c9a2930679498db65b685b1698bfd6c7daf8" - integrity sha512-1fuJEwIrp+97rM4RWdO+qrRsZlAeL1lQJoPqtCYWv0NL115XM93hIH4CSRln2w52SqvmY5hqdtauB6QFCDiZNQ== - dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - -"@babel/helper-optimise-call-expression@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.24.7.tgz#8b0a0456c92f6b323d27cfd00d1d664e76692a0f" - integrity sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-plugin-utils@^7.0.0", "@babel/helper-plugin-utils@^7.10.4", "@babel/helper-plugin-utils@^7.12.13", "@babel/helper-plugin-utils@^7.14.5", "@babel/helper-plugin-utils@^7.18.6", "@babel/helper-plugin-utils@^7.22.5", "@babel/helper-plugin-utils@^7.24.7", "@babel/helper-plugin-utils@^7.8.0", "@babel/helper-plugin-utils@^7.8.3": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.7.tgz#98c84fe6fe3d0d3ae7bfc3a5e166a46844feb2a0" - integrity sha512-Rq76wjt7yz9AAc1KnlRKNAi/dMSVWgDRx43FHoJEbcYU6xOWaE2dVPwcdTukJrjxS65GITyfbvEYHvkirZ6uEg== - -"@babel/helper-remap-async-to-generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.24.7.tgz#b3f0f203628522713849d49403f1a414468be4c7" - integrity sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-wrap-function" "^7.24.7" - -"@babel/helper-replace-supers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.24.7.tgz#f933b7eed81a1c0265740edc91491ce51250f765" - integrity sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg== - dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-member-expression-to-functions" "^7.24.7" - "@babel/helper-optimise-call-expression" "^7.24.7" - -"@babel/helper-simple-access@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.24.7.tgz#bcade8da3aec8ed16b9c4953b74e506b51b5edb3" - integrity sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-skip-transparent-expression-wrappers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.24.7.tgz#5f8fa83b69ed5c27adc56044f8be2b3ea96669d9" - integrity sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ== - dependencies: - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helper-split-export-declaration@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.24.7.tgz#83949436890e07fa3d6873c61a96e3bbf692d856" - integrity sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA== - dependencies: - "@babel/types" "^7.24.7" - -"@babel/helper-string-parser@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.24.7.tgz#4d2d0f14820ede3b9807ea5fc36dfc8cd7da07f2" - integrity sha512-7MbVt6xrwFQbunH2DNQsAP5sTGxfqQtErvBIvIMi6EQnbgUOuVYanvREcmFrOPhoXBrTtjhhP+lW+o5UfK+tDg== - -"@babel/helper-validator-identifier@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz#75b889cfaf9e35c2aaf42cf0d72c8e91719251db" - integrity sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w== - -"@babel/helper-validator-option@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.24.7.tgz#24c3bb77c7a425d1742eec8fb433b5a1b38e62f6" - integrity sha512-yy1/KvjhV/ZCL+SM7hBrvnZJ3ZuT9OuZgIJAGpPEToANvc3iM6iDvBnRjtElWibHU6n8/LPR/EjX9EtIEYO3pw== - -"@babel/helper-wrap-function@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.24.7.tgz#52d893af7e42edca7c6d2c6764549826336aae1f" - integrity sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw== - dependencies: - "@babel/helper-function-name" "^7.24.7" - "@babel/template" "^7.24.7" - "@babel/traverse" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/helpers@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.24.7.tgz#aa2ccda29f62185acb5d42fb4a3a1b1082107416" - integrity sha512-NlmJJtvcw72yRJRcnCmGvSi+3jDEg8qFu3z0AFoymmzLx5ERVWyzd9kVXr7Th9/8yIJi2Zc6av4Tqz3wFs8QWg== - dependencies: - "@babel/template" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/highlight@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.24.7.tgz#a05ab1df134b286558aae0ed41e6c5f731bf409d" - integrity sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw== - dependencies: - "@babel/helper-validator-identifier" "^7.24.7" - chalk "^2.4.2" - js-tokens "^4.0.0" - picocolors "^1.0.0" +"@babel/helper-skip-transparent-expression-wrappers@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.25.9.tgz#0b2e1b62d560d6b1954893fd2b705dc17c91f0c9" + integrity sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA== + dependencies: + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" + +"@babel/helper-string-parser@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.25.9.tgz#1aabb72ee72ed35789b4bbcad3ca2862ce614e8c" + integrity sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA== -"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.24.7.tgz#9a5226f92f0c5c8ead550b750f5608e766c8ce85" - integrity sha512-9uUYRm6OqQrCqQdG1iCBwBPZgN8ciDBro2nIOFaiRz1/BCxaI7CNvQbDHvsArAC7Tw9Hda/B3U+6ui9u4HWXPw== +"@babel/helper-validator-identifier@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.25.9.tgz#24b64e2c3ec7cd3b3c547729b8d16871f22cbdc7" + integrity sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ== -"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.24.7.tgz#fd059fd27b184ea2b4c7e646868a9a381bbc3055" - integrity sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ== +"@babel/helper-validator-option@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.25.9.tgz#86e45bd8a49ab7e03f276577f96179653d41da72" + integrity sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw== + +"@babel/helper-wrap-function@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.25.9.tgz#d99dfd595312e6c894bd7d237470025c85eea9d0" + integrity sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g== dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/template" "^7.25.9" + "@babel/traverse" "^7.25.9" + "@babel/types" "^7.25.9" -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.24.7.tgz#468096ca44bbcbe8fcc570574e12eb1950e18107" - integrity sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg== +"@babel/helpers@^7.26.10": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.27.0.tgz#53d156098defa8243eab0f32fa17589075a1b808" + integrity sha512-U5eyP/CTFPuNE3qk+WZMxFkp/4zUzdceQlfzf7DdGdhp+Fezd7HD+i8Y24ZuTMKX3wQBld449jijbGq6OdGNQg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.24.7.tgz#e4eabdd5109acc399b38d7999b2ef66fc2022f89" - integrity sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ== +"@babel/parser@^7.1.0", "@babel/parser@^7.14.7", "@babel/parser@^7.20.7", "@babel/parser@^7.23.9", "@babel/parser@^7.26.10", "@babel/parser@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.27.0.tgz#3d7d6ee268e41d2600091cbd4e145ffee85a44ec" + integrity sha512-iaepho73/2Pz7w2eMS0Q5f83+0RKI7i4xmiYeBmDzfRVbQtTOG7Ts0S4HzJVsTMGI9keU8rNfuZr8DKfSt7Yyg== + dependencies: + "@babel/types" "^7.27.0" + +"@babel/plugin-bugfix-firefox-class-in-computed-class-key@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-firefox-class-in-computed-class-key/-/plugin-bugfix-firefox-class-in-computed-class-key-7.25.9.tgz#cc2e53ebf0a0340777fff5ed521943e253b4d8fe" + integrity sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" + +"@babel/plugin-bugfix-safari-class-field-initializer-scope@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-class-field-initializer-scope/-/plugin-bugfix-safari-class-field-initializer-scope-7.25.9.tgz#af9e4fb63ccb8abcb92375b2fcfe36b60c774d30" + integrity sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression/-/plugin-bugfix-safari-id-destructuring-collision-in-function-expression-7.25.9.tgz#e8dc26fcd616e6c5bf2bd0d5a2c151d4f92a9137" + integrity sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.24.7.tgz#71b21bb0286d5810e63a1538aa901c58e87375ec" - integrity sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg== +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining/-/plugin-bugfix-v8-spread-parameters-in-optional-chaining-7.25.9.tgz#807a667f9158acac6f6164b4beb85ad9ebc9e1d1" + integrity sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g== dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + +"@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly/-/plugin-bugfix-v8-static-class-fields-redefine-readonly-7.25.9.tgz#de7093f1e7deaf68eadd7cc6b07f2ab82543269e" + integrity sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg== + dependencies: + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" "@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2": version "7.21.0-placeholder-for-preset-env.2" @@ -429,7 +370,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-class-properties@^7.12.13", "@babel/plugin-syntax-class-properties@^7.8.3": +"@babel/plugin-syntax-class-properties@^7.12.13": version "7.12.13" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.13.tgz#b5c987274c4a3a82b89714796931a6b53544ae10" integrity sha512-fm4idjKla0YahUNgFNLCB0qySdsoPiZP3iQE3rky0mBUtMZ23yDJ9SJdg6dXTSDnulOVqiF3Hgr9nbXvXTQZYA== @@ -443,35 +384,21 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-dynamic-import@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" - integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== - dependencies: - "@babel/helper-plugin-utils" "^7.8.0" - -"@babel/plugin-syntax-export-namespace-from@^7.8.3": - version "7.8.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-export-namespace-from/-/plugin-syntax-export-namespace-from-7.8.3.tgz#028964a9ba80dbc094c915c487ad7c4e7a66465a" - integrity sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q== - dependencies: - "@babel/helper-plugin-utils" "^7.8.3" - -"@babel/plugin-syntax-import-assertions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.24.7.tgz#2a0b406b5871a20a841240586b1300ce2088a778" - integrity sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg== +"@babel/plugin-syntax-import-assertions@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.26.0.tgz#620412405058efa56e4a564903b79355020f445f" + integrity sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-import-attributes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.24.7.tgz#b4f9ea95a79e6912480c4b626739f86a076624ca" - integrity sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A== +"@babel/plugin-syntax-import-attributes@^7.24.7", "@babel/plugin-syntax-import-attributes@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-attributes/-/plugin-syntax-import-attributes-7.26.0.tgz#3b1412847699eea739b4f2602c74ce36f6b0b0f7" + integrity sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3": +"@babel/plugin-syntax-import-meta@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51" integrity sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g== @@ -485,14 +412,14 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-jsx@^7.24.7", "@babel/plugin-syntax-jsx@^7.7.2": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.24.7.tgz#39a1fa4a7e3d3d7f34e2acc6be585b718d30e02d" - integrity sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ== +"@babel/plugin-syntax-jsx@^7.25.9", "@babel/plugin-syntax-jsx@^7.7.2": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.25.9.tgz#a34313a178ea56f1951599b929c1ceacee719290" + integrity sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": +"@babel/plugin-syntax-logical-assignment-operators@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" integrity sha512-d8waShlpFDinQ5MtvGU9xDAOzKH47+FFoney2baFIoMr952hKOLp1HR7VszoZvOsV/4+RRszNY7D17ba0te0ig== @@ -506,7 +433,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.8.0" -"@babel/plugin-syntax-numeric-separator@^7.10.4", "@babel/plugin-syntax-numeric-separator@^7.8.3": +"@babel/plugin-syntax-numeric-separator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-numeric-separator/-/plugin-syntax-numeric-separator-7.10.4.tgz#b9b070b3e33570cd9fd07ba7fa91c0dd37b9af97" integrity sha512-9H6YdfkcK/uOnY/K7/aA2xpzaAgkQn37yzWUMRK7OaPOqOpGS1+n0H5hxT9AUw9EsSjPW8SVyMJwYRtWs3X3ug== @@ -541,19 +468,19 @@ dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-top-level-await@^7.14.5", "@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-top-level-await@^7.14.5": version "7.14.5" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.14.5.tgz#c1cfdadc35a646240001f06138247b741c34d94c" integrity sha512-hx++upLv5U1rgYfwe1xBQUhRmU41NEvpUvrp8jkrSCdvGSnM5/qdRMtylJ6PG5OFkBaHkbTAKTnd3/YyESRHFw== dependencies: "@babel/helper-plugin-utils" "^7.14.5" -"@babel/plugin-syntax-typescript@^7.24.7", "@babel/plugin-syntax-typescript@^7.7.2": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.24.7.tgz#58d458271b4d3b6bb27ee6ac9525acbb259bad1c" - integrity sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA== +"@babel/plugin-syntax-typescript@^7.25.9", "@babel/plugin-syntax-typescript@^7.7.2": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-typescript/-/plugin-syntax-typescript-7.25.9.tgz#67dda2b74da43727cf21d46cf9afef23f4365399" + integrity sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/plugin-syntax-unicode-sets-regex@^7.18.6": version "7.18.6" @@ -563,488 +490,477 @@ "@babel/helper-create-regexp-features-plugin" "^7.18.6" "@babel/helper-plugin-utils" "^7.18.6" -"@babel/plugin-transform-arrow-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.24.7.tgz#4f6886c11e423bd69f3ce51dbf42424a5f275514" - integrity sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ== +"@babel/plugin-transform-arrow-functions@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.25.9.tgz#7821d4410bee5daaadbb4cdd9a6649704e176845" + integrity sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-async-generator-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.24.7.tgz#7330a5c50e05181ca52351b8fd01642000c96cfd" - integrity sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g== +"@babel/plugin-transform-async-generator-functions@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-generator-functions/-/plugin-transform-async-generator-functions-7.26.8.tgz#5e3991135e3b9c6eaaf5eff56d1ae5a11df45ff8" + integrity sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg== dependencies: - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-remap-async-to-generator" "^7.24.7" - "@babel/plugin-syntax-async-generators" "^7.8.4" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-remap-async-to-generator" "^7.25.9" + "@babel/traverse" "^7.26.8" -"@babel/plugin-transform-async-to-generator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.24.7.tgz#72a3af6c451d575842a7e9b5a02863414355bdcc" - integrity sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA== +"@babel/plugin-transform-async-to-generator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.25.9.tgz#c80008dacae51482793e5a9c08b39a5be7e12d71" + integrity sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ== dependencies: - "@babel/helper-module-imports" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-remap-async-to-generator" "^7.24.7" + "@babel/helper-module-imports" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-remap-async-to-generator" "^7.25.9" -"@babel/plugin-transform-block-scoped-functions@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.24.7.tgz#a4251d98ea0c0f399dafe1a35801eaba455bbf1f" - integrity sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ== +"@babel/plugin-transform-block-scoped-functions@^7.26.5": + version "7.26.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.26.5.tgz#3dc4405d31ad1cbe45293aa57205a6e3b009d53e" + integrity sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.26.5" -"@babel/plugin-transform-block-scoping@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.24.7.tgz#42063e4deb850c7bd7c55e626bf4e7ab48e6ce02" - integrity sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ== +"@babel/plugin-transform-block-scoping@^7.25.9": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.27.0.tgz#acc2c0d98a7439bbde4244588ddbd4904701d47f" + integrity sha512-u1jGphZ8uDI2Pj/HJj6YQ6XQLZCNjOlprjxB5SVz6rq2T6SwAR+CdrWK0CP7F+9rDVMXdB0+r6Am5G5aobOjAQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.26.5" -"@babel/plugin-transform-class-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.24.7.tgz#256879467b57b0b68c7ddfc5b76584f398cd6834" - integrity sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w== +"@babel/plugin-transform-class-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-properties/-/plugin-transform-class-properties-7.25.9.tgz#a8ce84fedb9ad512549984101fa84080a9f5f51f" + integrity sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-class-static-block@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.24.7.tgz#c82027ebb7010bc33c116d4b5044fbbf8c05484d" - integrity sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ== +"@babel/plugin-transform-class-static-block@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-class-static-block/-/plugin-transform-class-static-block-7.26.0.tgz#6c8da219f4eb15cae9834ec4348ff8e9e09664a0" + integrity sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-classes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.24.7.tgz#4ae6ef43a12492134138c1e45913f7c46c41b4bf" - integrity sha512-CFbbBigp8ln4FU6Bpy6g7sE8B/WmCmzvivzUC6xDAdWVsjYTXijpuuGJmYkAaoWAzcItGKT3IOAbxRItZ5HTjw== - dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" +"@babel/plugin-transform-classes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.25.9.tgz#7152457f7880b593a63ade8a861e6e26a4469f52" + integrity sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" + "@babel/traverse" "^7.25.9" globals "^11.1.0" -"@babel/plugin-transform-computed-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.24.7.tgz#4cab3214e80bc71fae3853238d13d097b004c707" - integrity sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ== +"@babel/plugin-transform-computed-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.25.9.tgz#db36492c78460e534b8852b1d5befe3c923ef10b" + integrity sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/template" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/template" "^7.25.9" -"@babel/plugin-transform-destructuring@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.24.7.tgz#a097f25292defb6e6cc16d6333a4cfc1e3c72d9e" - integrity sha512-19eJO/8kdCQ9zISOf+SEUJM/bAUIsvY3YDnXZTupUCQ8LgrWnsG/gFB9dvXqdXnRXMAM8fvt7b0CBKQHNGy1mw== +"@babel/plugin-transform-destructuring@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.25.9.tgz#966ea2595c498224340883602d3cfd7a0c79cea1" + integrity sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-dotall-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.24.7.tgz#5f8bf8a680f2116a7207e16288a5f974ad47a7a0" - integrity sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw== +"@babel/plugin-transform-dotall-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.25.9.tgz#bad7945dd07734ca52fe3ad4e872b40ed09bb09a" + integrity sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-duplicate-keys@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.24.7.tgz#dd20102897c9a2324e5adfffb67ff3610359a8ee" - integrity sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw== +"@babel/plugin-transform-duplicate-keys@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.25.9.tgz#8850ddf57dce2aebb4394bb434a7598031059e6d" + integrity sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-dynamic-import@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.24.7.tgz#4d8b95e3bae2b037673091aa09cd33fecd6419f4" - integrity sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg== +"@babel/plugin-transform-duplicate-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-named-capturing-groups-regex/-/plugin-transform-duplicate-named-capturing-groups-regex-7.25.9.tgz#6f7259b4de127721a08f1e5165b852fcaa696d31" + integrity sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-exponentiation-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.24.7.tgz#b629ee22645f412024297d5245bce425c31f9b0d" - integrity sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ== +"@babel/plugin-transform-dynamic-import@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dynamic-import/-/plugin-transform-dynamic-import-7.25.9.tgz#23e917de63ed23c6600c5dd06d94669dce79f7b8" + integrity sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg== dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-export-namespace-from@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.24.7.tgz#176d52d8d8ed516aeae7013ee9556d540c53f197" - integrity sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA== +"@babel/plugin-transform-exponentiation-operator@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.26.3.tgz#e29f01b6de302c7c2c794277a48f04a9ca7f03bc" + integrity sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-for-of@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.24.7.tgz#f25b33f72df1d8be76399e1b8f3f9d366eb5bc70" - integrity sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g== +"@babel/plugin-transform-export-namespace-from@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-export-namespace-from/-/plugin-transform-export-namespace-from-7.25.9.tgz#90745fe55053394f554e40584cda81f2c8a402a2" + integrity sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-function-name@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.24.7.tgz#6d8601fbffe665c894440ab4470bc721dd9131d6" - integrity sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w== +"@babel/plugin-transform-for-of@^7.26.9": + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.26.9.tgz#27231f79d5170ef33b5111f07fe5cafeb2c96a56" + integrity sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg== dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-json-strings@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.24.7.tgz#f3e9c37c0a373fee86e36880d45b3664cedaf73a" - integrity sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw== +"@babel/plugin-transform-function-name@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.25.9.tgz#939d956e68a606661005bfd550c4fc2ef95f7b97" + integrity sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-json-strings" "^7.8.3" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.24.7.tgz#36b505c1e655151a9d7607799a9988fc5467d06c" - integrity sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ== +"@babel/plugin-transform-json-strings@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-json-strings/-/plugin-transform-json-strings-7.25.9.tgz#c86db407cb827cded902a90c707d2781aaa89660" + integrity sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-logical-assignment-operators@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.24.7.tgz#a58fb6eda16c9dc8f9ff1c7b1ba6deb7f4694cb0" - integrity sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw== +"@babel/plugin-transform-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.25.9.tgz#1a1c6b4d4aa59bc4cad5b6b3a223a0abd685c9de" + integrity sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-member-expression-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.24.7.tgz#3b4454fb0e302e18ba4945ba3246acb1248315df" - integrity sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw== +"@babel/plugin-transform-logical-assignment-operators@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-logical-assignment-operators/-/plugin-transform-logical-assignment-operators-7.25.9.tgz#b19441a8c39a2fda0902900b306ea05ae1055db7" + integrity sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-amd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.24.7.tgz#65090ed493c4a834976a3ca1cde776e6ccff32d7" - integrity sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg== +"@babel/plugin-transform-member-expression-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.25.9.tgz#63dff19763ea64a31f5e6c20957e6a25e41ed5de" + integrity sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA== dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-commonjs@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.24.7.tgz#9fd5f7fdadee9085886b183f1ad13d1ab260f4ab" - integrity sha512-iFI8GDxtevHJ/Z22J5xQpVqFLlMNstcLXh994xifFwxxGslr2ZXXLWgtBeLctOD63UFDArdvN6Tg8RFw+aEmjQ== +"@babel/plugin-transform-modules-amd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.25.9.tgz#49ba478f2295101544abd794486cd3088dddb6c5" + integrity sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw== dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-simple-access" "^7.24.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-systemjs@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.24.7.tgz#f8012316c5098f6e8dee6ecd58e2bc6f003d0ce7" - integrity sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw== +"@babel/plugin-transform-modules-commonjs@^7.26.3": + version "7.26.3" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.26.3.tgz#8f011d44b20d02c3de44d8850d971d8497f981fb" + integrity sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ== dependencies: - "@babel/helper-hoist-variables" "^7.24.7" - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" + "@babel/helper-module-transforms" "^7.26.0" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-modules-umd@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.24.7.tgz#edd9f43ec549099620df7df24e7ba13b5c76efc8" - integrity sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A== +"@babel/plugin-transform-modules-systemjs@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.25.9.tgz#8bd1b43836269e3d33307151a114bcf3ba6793f8" + integrity sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA== dependencies: - "@babel/helper-module-transforms" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" + "@babel/traverse" "^7.25.9" -"@babel/plugin-transform-named-capturing-groups-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.24.7.tgz#9042e9b856bc6b3688c0c2e4060e9e10b1460923" - integrity sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g== +"@babel/plugin-transform-modules-umd@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.25.9.tgz#6710079cdd7c694db36529a1e8411e49fcbf14c9" + integrity sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-module-transforms" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-new-target@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.24.7.tgz#31ff54c4e0555cc549d5816e4ab39241dfb6ab00" - integrity sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA== +"@babel/plugin-transform-named-capturing-groups-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.25.9.tgz#454990ae6cc22fd2a0fa60b3a2c6f63a38064e6a" + integrity sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-nullish-coalescing-operator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.24.7.tgz#1de4534c590af9596f53d67f52a92f12db984120" - integrity sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ== +"@babel/plugin-transform-new-target@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.25.9.tgz#42e61711294b105c248336dcb04b77054ea8becd" + integrity sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-numeric-separator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.24.7.tgz#bea62b538c80605d8a0fac9b40f48e97efa7de63" - integrity sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA== +"@babel/plugin-transform-nullish-coalescing-operator@^7.26.6": + version "7.26.6" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-nullish-coalescing-operator/-/plugin-transform-nullish-coalescing-operator-7.26.6.tgz#fbf6b3c92cb509e7b319ee46e3da89c5bedd31fe" + integrity sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/helper-plugin-utils" "^7.26.5" -"@babel/plugin-transform-object-rest-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.7.tgz#d13a2b93435aeb8a197e115221cab266ba6e55d6" - integrity sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q== +"@babel/plugin-transform-numeric-separator@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-numeric-separator/-/plugin-transform-numeric-separator-7.25.9.tgz#bfed75866261a8b643468b0ccfd275f2033214a1" + integrity sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q== dependencies: - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-transform-parameters" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-object-super@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.24.7.tgz#66eeaff7830bba945dd8989b632a40c04ed625be" - integrity sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg== +"@babel/plugin-transform-object-rest-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.25.9.tgz#0203725025074164808bcf1a2cfa90c652c99f18" + integrity sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-replace-supers" "^7.24.7" + "@babel/helper-compilation-targets" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" -"@babel/plugin-transform-optional-catch-binding@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.24.7.tgz#00eabd883d0dd6a60c1c557548785919b6e717b4" - integrity sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA== +"@babel/plugin-transform-object-super@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.25.9.tgz#385d5de135162933beb4a3d227a2b7e52bb4cf03" + integrity sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-replace-supers" "^7.25.9" -"@babel/plugin-transform-optional-chaining@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.24.7.tgz#b8f6848a80cf2da98a8a204429bec04756c6d454" - integrity sha512-tK+0N9yd4j+x/4hxF3F0e0fu/VdcxU18y5SevtyM/PCFlQvXbR0Zmlo2eBrKtVipGNFzpq56o8WsIIKcJFUCRQ== +"@babel/plugin-transform-optional-catch-binding@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-catch-binding/-/plugin-transform-optional-catch-binding-7.25.9.tgz#10e70d96d52bb1f10c5caaac59ac545ea2ba7ff3" + integrity sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-parameters@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.24.7.tgz#5881f0ae21018400e320fc7eb817e529d1254b68" - integrity sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA== +"@babel/plugin-transform-optional-chaining@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-optional-chaining/-/plugin-transform-optional-chaining-7.25.9.tgz#e142eb899d26ef715435f201ab6e139541eee7dd" + integrity sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-private-methods@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.24.7.tgz#e6318746b2ae70a59d023d5cc1344a2ba7a75f5e" - integrity sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ== +"@babel/plugin-transform-parameters@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.25.9.tgz#b856842205b3e77e18b7a7a1b94958069c7ba257" + integrity sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g== dependencies: - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-private-property-in-object@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.24.7.tgz#4eec6bc701288c1fab5f72e6a4bbc9d67faca061" - integrity sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA== +"@babel/plugin-transform-private-methods@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-methods/-/plugin-transform-private-methods-7.25.9.tgz#847f4139263577526455d7d3223cd8bda51e3b57" + integrity sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-private-property-in-object@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-private-property-in-object/-/plugin-transform-private-property-in-object-7.25.9.tgz#9c8b73e64e6cc3cbb2743633885a7dd2c385fe33" + integrity sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw== + dependencies: + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-property-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.24.7.tgz#f0d2ed8380dfbed949c42d4d790266525d63bbdc" - integrity sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA== +"@babel/plugin-transform-property-literals@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.25.9.tgz#d72d588bd88b0dec8b62e36f6fda91cedfe28e3f" + integrity sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-regenerator@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.24.7.tgz#021562de4534d8b4b1851759fd7af4e05d2c47f8" - integrity sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA== +"@babel/plugin-transform-regenerator@^7.25.9": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.27.0.tgz#822feebef43d6a59a81f696b2512df5b1682db31" + integrity sha512-LX/vCajUJQDqE7Aum/ELUMZAY19+cDpghxrnyt5I1tV6X5PyC86AOoWXWFYFeIvauyeSA6/ktn4tQVn/3ZifsA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.26.5" regenerator-transform "^0.15.2" -"@babel/plugin-transform-reserved-words@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.24.7.tgz#80037fe4fbf031fc1125022178ff3938bb3743a4" - integrity sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ== +"@babel/plugin-transform-regexp-modifiers@^7.26.0": + version "7.26.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regexp-modifiers/-/plugin-transform-regexp-modifiers-7.26.0.tgz#2f5837a5b5cd3842a919d8147e9903cc7455b850" + integrity sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" + +"@babel/plugin-transform-reserved-words@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.25.9.tgz#0398aed2f1f10ba3f78a93db219b27ef417fb9ce" + integrity sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-shorthand-properties@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.24.7.tgz#85448c6b996e122fa9e289746140aaa99da64e73" - integrity sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA== +"@babel/plugin-transform-shorthand-properties@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.25.9.tgz#bb785e6091f99f826a95f9894fc16fde61c163f2" + integrity sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-spread@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.24.7.tgz#e8a38c0fde7882e0fb8f160378f74bd885cc7bb3" - integrity sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng== +"@babel/plugin-transform-spread@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.25.9.tgz#24a35153931b4ba3d13cec4a7748c21ab5514ef9" + integrity sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-skip-transparent-expression-wrappers" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" -"@babel/plugin-transform-sticky-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.24.7.tgz#96ae80d7a7e5251f657b5cf18f1ea6bf926f5feb" - integrity sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g== +"@babel/plugin-transform-sticky-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.25.9.tgz#c7f02b944e986a417817b20ba2c504dfc1453d32" + integrity sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-template-literals@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.24.7.tgz#a05debb4a9072ae8f985bcf77f3f215434c8f8c8" - integrity sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw== +"@babel/plugin-transform-template-literals@^7.26.8": + version "7.26.8" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.26.8.tgz#966b15d153a991172a540a69ad5e1845ced990b5" + integrity sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.26.5" -"@babel/plugin-transform-typeof-symbol@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.24.7.tgz#f074be466580d47d6e6b27473a840c9f9ca08fb0" - integrity sha512-VtR8hDy7YLB7+Pet9IarXjg/zgCMSF+1mNS/EQEiEaUPoFXCVsHG64SIxcaaI2zJgRiv+YmgaQESUfWAdbjzgg== +"@babel/plugin-transform-typeof-symbol@^7.26.7": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.27.0.tgz#044a0890f3ca694207c7826d0c7a65e5ac008aae" + integrity sha512-+LLkxA9rKJpNoGsbLnAgOCdESl73vwYn+V6b+5wHbrE7OGKVDPHIQvbFSzqE6rwqaCw2RE+zdJrlLkcf8YOA0w== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.26.5" -"@babel/plugin-transform-typescript@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.24.7.tgz#b006b3e0094bf0813d505e0c5485679eeaf4a881" - integrity sha512-iLD3UNkgx2n/HrjBesVbYX6j0yqn/sJktvbtKKgcaLIQ4bTTQ8obAypc1VpyHPD2y4Phh9zHOaAt8e/L14wCpw== +"@babel/plugin-transform-typescript@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.27.0.tgz#a29fd3481da85601c7e34091296e9746d2cccba8" + integrity sha512-fRGGjO2UEGPjvEcyAZXRXAS8AfdaQoq7HnxAbJoAoW10B9xOKesmmndJv+Sym2a+9FHWZ9KbyyLCe9s0Sn5jtg== dependencies: - "@babel/helper-annotate-as-pure" "^7.24.7" - "@babel/helper-create-class-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/plugin-syntax-typescript" "^7.24.7" + "@babel/helper-annotate-as-pure" "^7.25.9" + "@babel/helper-create-class-features-plugin" "^7.27.0" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-skip-transparent-expression-wrappers" "^7.25.9" + "@babel/plugin-syntax-typescript" "^7.25.9" -"@babel/plugin-transform-unicode-escapes@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.24.7.tgz#2023a82ced1fb4971630a2e079764502c4148e0e" - integrity sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw== +"@babel/plugin-transform-unicode-escapes@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.25.9.tgz#a75ef3947ce15363fccaa38e2dd9bc70b2788b82" + integrity sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-property-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.24.7.tgz#9073a4cd13b86ea71c3264659590ac086605bbcd" - integrity sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w== +"@babel/plugin-transform-unicode-property-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-property-regex/-/plugin-transform-unicode-property-regex-7.25.9.tgz#a901e96f2c1d071b0d1bb5dc0d3c880ce8f53dd3" + integrity sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.24.7.tgz#dfc3d4a51127108099b19817c0963be6a2adf19f" - integrity sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg== +"@babel/plugin-transform-unicode-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.25.9.tgz#5eae747fe39eacf13a8bd006a4fb0b5d1fa5e9b1" + integrity sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" -"@babel/plugin-transform-unicode-sets-regex@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.24.7.tgz#d40705d67523803a576e29c63cef6e516b858ed9" - integrity sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg== +"@babel/plugin-transform-unicode-sets-regex@^7.25.9": + version "7.25.9" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-sets-regex/-/plugin-transform-unicode-sets-regex-7.25.9.tgz#65114c17b4ffc20fa5b163c63c70c0d25621fabe" + integrity sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ== dependencies: - "@babel/helper-create-regexp-features-plugin" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" + "@babel/helper-create-regexp-features-plugin" "^7.25.9" + "@babel/helper-plugin-utils" "^7.25.9" "@babel/preset-env@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.24.7.tgz#ff067b4e30ba4a72f225f12f123173e77b987f37" - integrity sha512-1YZNsc+y6cTvWlDHidMBsQZrZfEFjRIo/BZCT906PMdzOyXtSLTgqGdrpcuTDCXyd11Am5uQULtDIcCfnTc8fQ== - dependencies: - "@babel/compat-data" "^7.24.7" - "@babel/helper-compilation-targets" "^7.24.7" - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.24.7" - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.24.7" - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.24.7" - "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.24.7" + version "7.26.9" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.26.9.tgz#2ec64e903d0efe743699f77a10bdf7955c2123c3" + integrity sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ== + dependencies: + "@babel/compat-data" "^7.26.8" + "@babel/helper-compilation-targets" "^7.26.5" + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-bugfix-firefox-class-in-computed-class-key" "^7.25.9" + "@babel/plugin-bugfix-safari-class-field-initializer-scope" "^7.25.9" + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression" "^7.25.9" + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining" "^7.25.9" + "@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly" "^7.25.9" "@babel/plugin-proposal-private-property-in-object" "7.21.0-placeholder-for-preset-env.2" - "@babel/plugin-syntax-async-generators" "^7.8.4" - "@babel/plugin-syntax-class-properties" "^7.12.13" - "@babel/plugin-syntax-class-static-block" "^7.14.5" - "@babel/plugin-syntax-dynamic-import" "^7.8.3" - "@babel/plugin-syntax-export-namespace-from" "^7.8.3" - "@babel/plugin-syntax-import-assertions" "^7.24.7" - "@babel/plugin-syntax-import-attributes" "^7.24.7" - "@babel/plugin-syntax-import-meta" "^7.10.4" - "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" - "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.10.4" - "@babel/plugin-syntax-object-rest-spread" "^7.8.3" - "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" - "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-private-property-in-object" "^7.14.5" - "@babel/plugin-syntax-top-level-await" "^7.14.5" + "@babel/plugin-syntax-import-assertions" "^7.26.0" + "@babel/plugin-syntax-import-attributes" "^7.26.0" "@babel/plugin-syntax-unicode-sets-regex" "^7.18.6" - "@babel/plugin-transform-arrow-functions" "^7.24.7" - "@babel/plugin-transform-async-generator-functions" "^7.24.7" - "@babel/plugin-transform-async-to-generator" "^7.24.7" - "@babel/plugin-transform-block-scoped-functions" "^7.24.7" - "@babel/plugin-transform-block-scoping" "^7.24.7" - "@babel/plugin-transform-class-properties" "^7.24.7" - "@babel/plugin-transform-class-static-block" "^7.24.7" - "@babel/plugin-transform-classes" "^7.24.7" - "@babel/plugin-transform-computed-properties" "^7.24.7" - "@babel/plugin-transform-destructuring" "^7.24.7" - "@babel/plugin-transform-dotall-regex" "^7.24.7" - "@babel/plugin-transform-duplicate-keys" "^7.24.7" - "@babel/plugin-transform-dynamic-import" "^7.24.7" - "@babel/plugin-transform-exponentiation-operator" "^7.24.7" - "@babel/plugin-transform-export-namespace-from" "^7.24.7" - "@babel/plugin-transform-for-of" "^7.24.7" - "@babel/plugin-transform-function-name" "^7.24.7" - "@babel/plugin-transform-json-strings" "^7.24.7" - "@babel/plugin-transform-literals" "^7.24.7" - "@babel/plugin-transform-logical-assignment-operators" "^7.24.7" - "@babel/plugin-transform-member-expression-literals" "^7.24.7" - "@babel/plugin-transform-modules-amd" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.7" - "@babel/plugin-transform-modules-systemjs" "^7.24.7" - "@babel/plugin-transform-modules-umd" "^7.24.7" - "@babel/plugin-transform-named-capturing-groups-regex" "^7.24.7" - "@babel/plugin-transform-new-target" "^7.24.7" - "@babel/plugin-transform-nullish-coalescing-operator" "^7.24.7" - "@babel/plugin-transform-numeric-separator" "^7.24.7" - "@babel/plugin-transform-object-rest-spread" "^7.24.7" - "@babel/plugin-transform-object-super" "^7.24.7" - "@babel/plugin-transform-optional-catch-binding" "^7.24.7" - "@babel/plugin-transform-optional-chaining" "^7.24.7" - "@babel/plugin-transform-parameters" "^7.24.7" - "@babel/plugin-transform-private-methods" "^7.24.7" - "@babel/plugin-transform-private-property-in-object" "^7.24.7" - "@babel/plugin-transform-property-literals" "^7.24.7" - "@babel/plugin-transform-regenerator" "^7.24.7" - "@babel/plugin-transform-reserved-words" "^7.24.7" - "@babel/plugin-transform-shorthand-properties" "^7.24.7" - "@babel/plugin-transform-spread" "^7.24.7" - "@babel/plugin-transform-sticky-regex" "^7.24.7" - "@babel/plugin-transform-template-literals" "^7.24.7" - "@babel/plugin-transform-typeof-symbol" "^7.24.7" - "@babel/plugin-transform-unicode-escapes" "^7.24.7" - "@babel/plugin-transform-unicode-property-regex" "^7.24.7" - "@babel/plugin-transform-unicode-regex" "^7.24.7" - "@babel/plugin-transform-unicode-sets-regex" "^7.24.7" + "@babel/plugin-transform-arrow-functions" "^7.25.9" + "@babel/plugin-transform-async-generator-functions" "^7.26.8" + "@babel/plugin-transform-async-to-generator" "^7.25.9" + "@babel/plugin-transform-block-scoped-functions" "^7.26.5" + "@babel/plugin-transform-block-scoping" "^7.25.9" + "@babel/plugin-transform-class-properties" "^7.25.9" + "@babel/plugin-transform-class-static-block" "^7.26.0" + "@babel/plugin-transform-classes" "^7.25.9" + "@babel/plugin-transform-computed-properties" "^7.25.9" + "@babel/plugin-transform-destructuring" "^7.25.9" + "@babel/plugin-transform-dotall-regex" "^7.25.9" + "@babel/plugin-transform-duplicate-keys" "^7.25.9" + "@babel/plugin-transform-duplicate-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-dynamic-import" "^7.25.9" + "@babel/plugin-transform-exponentiation-operator" "^7.26.3" + "@babel/plugin-transform-export-namespace-from" "^7.25.9" + "@babel/plugin-transform-for-of" "^7.26.9" + "@babel/plugin-transform-function-name" "^7.25.9" + "@babel/plugin-transform-json-strings" "^7.25.9" + "@babel/plugin-transform-literals" "^7.25.9" + "@babel/plugin-transform-logical-assignment-operators" "^7.25.9" + "@babel/plugin-transform-member-expression-literals" "^7.25.9" + "@babel/plugin-transform-modules-amd" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.26.3" + "@babel/plugin-transform-modules-systemjs" "^7.25.9" + "@babel/plugin-transform-modules-umd" "^7.25.9" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.25.9" + "@babel/plugin-transform-new-target" "^7.25.9" + "@babel/plugin-transform-nullish-coalescing-operator" "^7.26.6" + "@babel/plugin-transform-numeric-separator" "^7.25.9" + "@babel/plugin-transform-object-rest-spread" "^7.25.9" + "@babel/plugin-transform-object-super" "^7.25.9" + "@babel/plugin-transform-optional-catch-binding" "^7.25.9" + "@babel/plugin-transform-optional-chaining" "^7.25.9" + "@babel/plugin-transform-parameters" "^7.25.9" + "@babel/plugin-transform-private-methods" "^7.25.9" + "@babel/plugin-transform-private-property-in-object" "^7.25.9" + "@babel/plugin-transform-property-literals" "^7.25.9" + "@babel/plugin-transform-regenerator" "^7.25.9" + "@babel/plugin-transform-regexp-modifiers" "^7.26.0" + "@babel/plugin-transform-reserved-words" "^7.25.9" + "@babel/plugin-transform-shorthand-properties" "^7.25.9" + "@babel/plugin-transform-spread" "^7.25.9" + "@babel/plugin-transform-sticky-regex" "^7.25.9" + "@babel/plugin-transform-template-literals" "^7.26.8" + "@babel/plugin-transform-typeof-symbol" "^7.26.7" + "@babel/plugin-transform-unicode-escapes" "^7.25.9" + "@babel/plugin-transform-unicode-property-regex" "^7.25.9" + "@babel/plugin-transform-unicode-regex" "^7.25.9" + "@babel/plugin-transform-unicode-sets-regex" "^7.25.9" "@babel/preset-modules" "0.1.6-no-external-plugins" babel-plugin-polyfill-corejs2 "^0.4.10" - babel-plugin-polyfill-corejs3 "^0.10.4" + babel-plugin-polyfill-corejs3 "^0.11.0" babel-plugin-polyfill-regenerator "^0.6.1" - core-js-compat "^3.31.0" + core-js-compat "^3.40.0" semver "^6.3.1" "@babel/preset-modules@0.1.6-no-external-plugins": @@ -1057,61 +973,52 @@ esutils "^2.0.2" "@babel/preset-typescript@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.24.7.tgz#66cd86ea8f8c014855671d5ea9a737139cbbfef1" - integrity sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.27.0.tgz#4dcb8827225975f4290961b0b089f9c694ca50c7" + integrity sha512-vxaPFfJtHhgeOVXRKuHpHPAOgymmy8V8I65T1q53R7GCZlefKeCaTyDs3zOPHTTbmquvNlQYC5klEvWsBAtrBQ== dependencies: - "@babel/helper-plugin-utils" "^7.24.7" - "@babel/helper-validator-option" "^7.24.7" - "@babel/plugin-syntax-jsx" "^7.24.7" - "@babel/plugin-transform-modules-commonjs" "^7.24.7" - "@babel/plugin-transform-typescript" "^7.24.7" - -"@babel/regjsgen@^0.8.0": - version "0.8.0" - resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" - integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== + "@babel/helper-plugin-utils" "^7.26.5" + "@babel/helper-validator-option" "^7.25.9" + "@babel/plugin-syntax-jsx" "^7.25.9" + "@babel/plugin-transform-modules-commonjs" "^7.26.3" + "@babel/plugin-transform-typescript" "^7.27.0" "@babel/runtime@^7.8.4": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.24.7.tgz#f4f0d5530e8dbdf59b3451b9b3e594b6ba082e12" - integrity sha512-UwgBRMjJP+xv857DCngvqXI3Iq6J4v0wXmwc6sapg+zyhbwmQX67LUEFrkK5tbyJ30jGuG3ZvWpBiB9LCy1kWw== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.27.0.tgz#fbee7cf97c709518ecc1f590984481d5460d4762" + integrity sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw== dependencies: regenerator-runtime "^0.14.0" -"@babel/template@^7.24.7", "@babel/template@^7.3.3": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.24.7.tgz#02efcee317d0609d2c07117cb70ef8fb17ab7315" - integrity sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/types" "^7.24.7" - -"@babel/traverse@^7.24.7": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.24.7.tgz#de2b900163fa741721ba382163fe46a936c40cf5" - integrity sha512-yb65Ed5S/QAcewNPh0nZczy9JdYXkkAbIsEo+P7BE7yO3txAY30Y/oPa3QkQ5It3xVG2kpKMg9MsdxZaO31uKA== - dependencies: - "@babel/code-frame" "^7.24.7" - "@babel/generator" "^7.24.7" - "@babel/helper-environment-visitor" "^7.24.7" - "@babel/helper-function-name" "^7.24.7" - "@babel/helper-hoist-variables" "^7.24.7" - "@babel/helper-split-export-declaration" "^7.24.7" - "@babel/parser" "^7.24.7" - "@babel/types" "^7.24.7" +"@babel/template@^7.25.9", "@babel/template@^7.26.9", "@babel/template@^7.27.0", "@babel/template@^7.3.3": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.27.0.tgz#b253e5406cc1df1c57dcd18f11760c2dbf40c0b4" + integrity sha512-2ncevenBqXI6qRMukPlXwHKHchC7RyMuu4xv5JBXRfOGVcTy1mXCD12qrp7Jsoxll1EV3+9sE4GugBVRjT2jFA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/parser" "^7.27.0" + "@babel/types" "^7.27.0" + +"@babel/traverse@^7.25.9", "@babel/traverse@^7.26.10", "@babel/traverse@^7.26.5", "@babel/traverse@^7.26.8", "@babel/traverse@^7.27.0": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.27.0.tgz#11d7e644779e166c0442f9a07274d02cd91d4a70" + integrity sha512-19lYZFzYVQkkHkl4Cy4WrAVcqBkgvV2YM2TU3xG6DIwO7O3ecbDPfW3yM3bjAGcqcQHi+CCtjMR3dIEHxsd6bA== + dependencies: + "@babel/code-frame" "^7.26.2" + "@babel/generator" "^7.27.0" + "@babel/parser" "^7.27.0" + "@babel/template" "^7.27.0" + "@babel/types" "^7.27.0" debug "^4.3.1" globals "^11.1.0" -"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.24.7", "@babel/types@^7.3.3", "@babel/types@^7.4.4": - version "7.24.7" - resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.24.7.tgz#6027fe12bc1aa724cd32ab113fb7f1988f1f66f2" - integrity sha512-XEFXSlxiG5td2EJRe8vOmRbaXVgfcBlszKujvVmWIK/UpywWljQCfzAv3RQCGujWQ1RD4YYWEAqDXfuJiy8f5Q== +"@babel/types@^7.0.0", "@babel/types@^7.20.7", "@babel/types@^7.25.9", "@babel/types@^7.26.10", "@babel/types@^7.27.0", "@babel/types@^7.3.3", "@babel/types@^7.4.4": + version "7.27.0" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.27.0.tgz#ef9acb6b06c3173f6632d993ecb6d4ae470b4559" + integrity sha512-H45s8fVLYjbhFH62dIJ3WtmJ6RSPt/3DRO0ZcT2SUiYiQyz3BLVb9ADEnLl91m74aQPS3AzzeajZHYOalWe3bg== dependencies: - "@babel/helper-string-parser" "^7.24.7" - "@babel/helper-validator-identifier" "^7.24.7" - to-fast-properties "^2.0.0" + "@babel/helper-string-parser" "^7.25.9" + "@babel/helper-validator-identifier" "^7.25.9" "@bcoe/v8-coverage@^0.2.3": version "0.2.3" @@ -1234,16 +1141,16 @@ integrity sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw== "@eslint-community/eslint-utils@^4.2.0", "@eslint-community/eslint-utils@^4.4.0": - version "4.4.0" - resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz#a23514e8fb9af1269d5f7788aa556798d61c6b59" - integrity sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA== + version "4.6.1" + resolved "https://registry.yarnpkg.com/@eslint-community/eslint-utils/-/eslint-utils-4.6.1.tgz#e4c58fdcf0696e7a5f19c30201ed43123ab15abc" + integrity sha512-KTsJMmobmbrFLe3LDh0PC2FXpcSYJt/MLjlkh/9LEnmKYLSYmT/0EW9JWANjeoemiuZrmogti0tW5Ch+qNUYDw== dependencies: - eslint-visitor-keys "^3.3.0" + eslint-visitor-keys "^3.4.3" "@eslint-community/regexpp@^4.10.0", "@eslint-community/regexpp@^4.6.1": - version "4.11.0" - resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.11.0.tgz#b0ffd0312b4a3fd2d6f77237e7248a5ad3a680ae" - integrity sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A== + version "4.12.1" + resolved "https://registry.yarnpkg.com/@eslint-community/regexpp/-/regexpp-4.12.1.tgz#cfc6cffe39df390a3841cde2abccf92eaa7ae0e0" + integrity sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ== "@eslint/eslintrc@^2.1.4": version "2.1.4" @@ -1260,17 +1167,17 @@ minimatch "^3.1.2" strip-json-comments "^3.1.1" -"@eslint/js@8.57.0": - version "8.57.0" - resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.0.tgz#a5417ae8427873f1dd08b70b3574b453e67b5f7f" - integrity sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g== +"@eslint/js@8.57.1": + version "8.57.1" + resolved "https://registry.yarnpkg.com/@eslint/js/-/js-8.57.1.tgz#de633db3ec2ef6a3c89e2f19038063e8a122e2c2" + integrity sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q== -"@humanwhocodes/config-array@^0.11.14": - version "0.11.14" - resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.11.14.tgz#d78e481a039f7566ecc9660b4ea7fe6b1fec442b" - integrity sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg== +"@humanwhocodes/config-array@^0.13.0": + version "0.13.0" + resolved "https://registry.yarnpkg.com/@humanwhocodes/config-array/-/config-array-0.13.0.tgz#fb907624df3256d04b9aa2df50d7aa97ec648748" + integrity sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw== dependencies: - "@humanwhocodes/object-schema" "^2.0.2" + "@humanwhocodes/object-schema" "^2.0.3" debug "^4.3.1" minimatch "^3.0.5" @@ -1279,7 +1186,7 @@ resolved "https://registry.yarnpkg.com/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz#af5b2691a22b44be847b0ca81641c5fb6ad0172c" integrity sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA== -"@humanwhocodes/object-schema@^2.0.2": +"@humanwhocodes/object-schema@^2.0.3": version "2.0.3" resolved "https://registry.yarnpkg.com/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz#4a2868d75d6d6963e423bcf90b7fd1be343409d3" integrity sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA== @@ -1505,9 +1412,9 @@ chalk "^4.0.0" "@jridgewell/gen-mapping@^0.3.5": - version "0.3.5" - resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz#dcce6aff74bdf6dad1a95802b69b04a2fcb1fb36" - integrity sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg== + version "0.3.8" + resolved "https://registry.yarnpkg.com/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz#4f0e06362e01362f823d348f1872b08f666d8142" + integrity sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA== dependencies: "@jridgewell/set-array" "^1.2.1" "@jridgewell/sourcemap-codec" "^1.4.10" @@ -1524,9 +1431,9 @@ integrity sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A== "@jridgewell/sourcemap-codec@^1.4.10", "@jridgewell/sourcemap-codec@^1.4.14": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== + version "1.5.0" + resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz#3188bcb273a414b0d215fd22a58540b989b9409a" + integrity sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ== "@jridgewell/trace-mapping@^0.3.12", "@jridgewell/trace-mapping@^0.3.18", "@jridgewell/trace-mapping@^0.3.24", "@jridgewell/trace-mapping@^0.3.25": version "0.3.25" @@ -1557,10 +1464,15 @@ "@nodelib/fs.scandir" "2.1.5" fastq "^1.6.0" -"@pkgr/core@^0.1.0": - version "0.1.1" - resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.1.1.tgz#1ec17e2edbec25c8306d424ecfbf13c7de1aaa31" - integrity sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA== +"@pkgr/core@^0.2.3": + version "0.2.4" + resolved "https://registry.yarnpkg.com/@pkgr/core/-/core-0.2.4.tgz#d897170a2b0ba51f78a099edccd968f7b103387c" + integrity sha512-ROFF39F6ZrnzSUEmQQZUar0Jt4xVoP9WnDRdWwF4NNcXs3xBTLgBUDoOwW141y1jP+S8nahIbdxbFC7IShw9Iw== + +"@rtsao/scc@^1.1.0": + version "1.1.0" + resolved "https://registry.yarnpkg.com/@rtsao/scc/-/scc-1.1.0.tgz#927dd2fae9bc3361403ac2c7a00c32ddce9ad7e8" + integrity sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g== "@sinclair/typebox@^0.27.8": version "0.27.8" @@ -1593,9 +1505,9 @@ "@types/babel__traverse" "*" "@types/babel__generator@*": - version "7.6.8" - resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.6.8.tgz#f836c61f48b1346e7d2b0d93c6dacc5b9535d3ab" - integrity sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw== + version "7.27.0" + resolved "https://registry.yarnpkg.com/@types/babel__generator/-/babel__generator-7.27.0.tgz#b5819294c51179957afaec341442f9341e4108a9" + integrity sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg== dependencies: "@babel/types" "^7.0.0" @@ -1608,9 +1520,9 @@ "@babel/types" "^7.0.0" "@types/babel__traverse@*", "@types/babel__traverse@^7.0.6": - version "7.20.6" - resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.6.tgz#8dc9f0ae0f202c08d8d4dab648912c8d6038e3f7" - integrity sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg== + version "7.20.7" + resolved "https://registry.yarnpkg.com/@types/babel__traverse/-/babel__traverse-7.20.7.tgz#968cdc2366ec3da159f61166428ee40f370e56c2" + integrity sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng== dependencies: "@babel/types" "^7.20.7" @@ -1623,9 +1535,9 @@ "@types/node" "*" "@types/chai@^5.0.1": - version "5.0.1" - resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.0.1.tgz#2c3705555cf11f5f59c836a84c44afcfe4e5689d" - integrity sha512-5T8ajsg3M/FOncpLYW7sdOcD6yf4+722sze/tc4KQV0P8Z2rAr3SAuHCIkYmYpt8VbcQlnz8SxlOlPQYefe4cA== + version "5.2.1" + resolved "https://registry.yarnpkg.com/@types/chai/-/chai-5.2.1.tgz#85687a58b27eac736ec0e87e5cb98f21e57a0bb1" + integrity sha512-iu1JLYmGmITRzUgNiLMZD3WCoFzpYtueuyAgHTXqgwSRAMIlFTnZqG6/xenkpUGRJEzSfklUTI4GNSzks/dc0w== dependencies: "@types/deep-eql" "*" @@ -1642,9 +1554,9 @@ integrity sha512-c9h9dVVMigMPc4bwTvC5dxqtqJZwQPePsWjPlpSOnojbor6pGqdk541lfA7AqFQr5pB1BRdq0juY9db81BwyFw== "@types/express-serve-static-core@^4.17.33": - version "4.19.5" - resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.5.tgz#218064e321126fcf9048d1ca25dd2465da55d9c6" - integrity sha512-y6W03tvrACO72aijJ5uF02FRq5cgDR9lUxddQ8vyF+GvmjJQqbzDcJngEjURc+ZsG31VI3hODNZJ2URj86pzmg== + version "4.19.6" + resolved "https://registry.yarnpkg.com/@types/express-serve-static-core/-/express-serve-static-core-4.19.6.tgz#e01324c2a024ff367d92c66f48553ced0ab50267" + integrity sha512-N4LZ2xG7DatVqhCZzOGb1Yi5lMbXSZcmdLDe9EzSndPV2HpWYWzRbaerl2n27irrm94EPpprqa8KpskPT085+A== dependencies: "@types/node" "*" "@types/qs" "*" @@ -1701,9 +1613,9 @@ "@types/istanbul-lib-report" "*" "@types/jest@^29.5.12": - version "29.5.12" - resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.12.tgz#7f7dc6eb4cf246d2474ed78744b05d06ce025544" - integrity sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw== + version "29.5.14" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-29.5.14.tgz#2b910912fa1d6856cadcd0c1f95af7df1d6049e5" + integrity sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ== dependencies: expect "^29.0.0" pretty-format "^29.0.0" @@ -1726,28 +1638,28 @@ integrity sha512-/pyBZWSLD2n0dcHE3hq8s8ZvcETHtEuF+3E7XVt0Ig2nvsVQXdghHVcEkIWjy9A0wKfTn97a/PSDYohKIlnP/w== "@types/mocha@^10.0.9": - version "10.0.9" - resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.9.tgz#101e9da88d2c02e5ac8952982c23b224524d662a" - integrity sha512-sicdRoWtYevwxjOHNMPTl3vSfJM6oyW8o1wXeI7uww6b6xHg8eBznQDNSGBCDJmsE8UMxP05JgZRtsKbTqt//Q== + version "10.0.10" + resolved "https://registry.yarnpkg.com/@types/mocha/-/mocha-10.0.10.tgz#91f62905e8d23cbd66225312f239454a23bebfa0" + integrity sha512-xPyYSz1cMPnJQhl0CLMH68j3gprKZaTjG3s5Vi+fDgx+uhG9NOXwbVt52eFS8ECyXhyKcjDLCBEqBExKuiZb7Q== "@types/node@*": - version "20.14.10" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.14.10.tgz#a1a218290f1b6428682e3af044785e5874db469a" - integrity sha512-MdiXf+nDuMvY0gJKxyfZ7/6UFsETO7mGKF54MVD/ekJS6HdFtpZFBgrh6Pseu64XTb2MLyFPlbW6hj8HYRQNOQ== + version "22.14.1" + resolved "https://registry.yarnpkg.com/@types/node/-/node-22.14.1.tgz#53b54585cec81c21eee3697521e31312d6ca1e6f" + integrity sha512-u0HuPQwe/dHrItgHHpmw3N2fYCR6x4ivMNbPHRkBVP4CvN+kiRrKHWk3i8tXiO/joPwXLMYvF9TTF0eqgHIuOw== dependencies: - undici-types "~5.26.4" + undici-types "~6.21.0" "@types/node@18.x": - version "18.19.39" - resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.39.tgz#c316340a5b4adca3aee9dcbf05de385978590593" - integrity sha512-nPwTRDKUctxw3di5b4TfT3I0sWDiWoPQCZjXhvdkINntwr8lcoVCKsTgnXeRubKIlfnV+eN/HYk6Jb40tbcEAQ== + version "18.19.86" + resolved "https://registry.yarnpkg.com/@types/node/-/node-18.19.86.tgz#a7e1785289c343155578b9d84a0e3e924deb948b" + integrity sha512-fifKayi175wLyKyc5qUfyENhQ1dCNI1UNjp653d8kuYcPQN5JhX3dGuP/XmvPTg/xRBn1VTLpbmi+H/Mr7tLfQ== dependencies: undici-types "~5.26.4" "@types/qs@*": - version "6.9.15" - resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.15.tgz#adde8a060ec9c305a82de1babc1056e73bd64dce" - integrity sha512-uXHQKES6DQKKCLh441Xv/dwxOq1TVS3JPUMlEqoEglvlhR6Mxnlew/Xq/LRVHpLyk7iK3zODe1qYHIMltO7XGg== + version "6.9.18" + resolved "https://registry.yarnpkg.com/@types/qs/-/qs-6.9.18.tgz#877292caa91f7c1b213032b34626505b746624c2" + integrity sha512-kK7dgTYDyGqS+e2Q4aK9X3D7q234CIZ1Bv0q/7Z5IwRDoADNU81xXJK/YVyLbLTZCoIwUoDoffFeF+p/eIklAA== "@types/range-parser@*": version "1.2.7" @@ -1777,9 +1689,16 @@ integrity sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw== "@types/vscode@^1.80.0", "@types/vscode@^1.90.0": - version "1.91.0" - resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.91.0.tgz#badaf9dfca14b08f1ad32fe197558d8d1702c3c9" - integrity sha512-PgPr+bUODjG3y+ozWUCyzttqR9EHny9sPAfJagddQjDwdtf66y2sDKJMnFZRuzBA2YtBGASqJGPil8VDUPvO6A== + version "1.99.1" + resolved "https://registry.yarnpkg.com/@types/vscode/-/vscode-1.99.1.tgz#bde6e2d9ccbe0493fded98ad639bf2671b8ec9ee" + integrity sha512-cQlqxHZ040ta6ovZXnXRxs3fJiTmlurkIWOfZVcLSZPcm9J4ikFpXuB7gihofGn5ng+kDVma5EmJIclfk0trPQ== + +"@types/ws@^7.4.7": + version "7.4.7" + resolved "https://registry.yarnpkg.com/@types/ws/-/ws-7.4.7.tgz#f7c390a36f7a0679aa69de2d501319f4f8d9b702" + integrity sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww== + dependencies: + "@types/node" "*" "@types/yargs-parser@*": version "21.0.3" @@ -1787,68 +1706,68 @@ integrity sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ== "@types/yargs@^17.0.8": - version "17.0.32" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.32.tgz#030774723a2f7faafebf645f4e5a48371dca6229" - integrity sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog== + version "17.0.33" + resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-17.0.33.tgz#8c32303da83eec050a84b3c7ae7b9f922d13e32d" + integrity sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA== dependencies: "@types/yargs-parser" "*" "@typescript-eslint/eslint-plugin@^7.11.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.15.0.tgz#8eaf396ac2992d2b8f874b68eb3fcd6b179cb7f3" - integrity sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA== + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.18.0.tgz#b16d3cf3ee76bf572fdf511e79c248bdec619ea3" + integrity sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw== dependencies: "@eslint-community/regexpp" "^4.10.0" - "@typescript-eslint/scope-manager" "7.15.0" - "@typescript-eslint/type-utils" "7.15.0" - "@typescript-eslint/utils" "7.15.0" - "@typescript-eslint/visitor-keys" "7.15.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/type-utils" "7.18.0" + "@typescript-eslint/utils" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" graphemer "^1.4.0" ignore "^5.3.1" natural-compare "^1.4.0" ts-api-utils "^1.3.0" "@typescript-eslint/parser@^7.11.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.15.0.tgz#f4a536e5fc6a1c05c82c4d263a2bfad2da235c80" - integrity sha512-k9fYuQNnypLFcqORNClRykkGOMOj+pV6V91R4GO/l1FDGwpqmSwoOQrOHo3cGaH63e+D3ZiCAOsuS/D2c99j/A== - dependencies: - "@typescript-eslint/scope-manager" "7.15.0" - "@typescript-eslint/types" "7.15.0" - "@typescript-eslint/typescript-estree" "7.15.0" - "@typescript-eslint/visitor-keys" "7.15.0" + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-7.18.0.tgz#83928d0f1b7f4afa974098c64b5ce6f9051f96a0" + integrity sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg== + dependencies: + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" -"@typescript-eslint/scope-manager@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.15.0.tgz#201b34b0720be8b1447df17b963941bf044999b2" - integrity sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw== +"@typescript-eslint/scope-manager@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz#c928e7a9fc2c0b3ed92ab3112c614d6bd9951c83" + integrity sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA== dependencies: - "@typescript-eslint/types" "7.15.0" - "@typescript-eslint/visitor-keys" "7.15.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" -"@typescript-eslint/type-utils@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.15.0.tgz#5b83c904c6de91802fb399305a50a56d10472c39" - integrity sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg== +"@typescript-eslint/type-utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz#2165ffaee00b1fbbdd2d40aa85232dab6998f53b" + integrity sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA== dependencies: - "@typescript-eslint/typescript-estree" "7.15.0" - "@typescript-eslint/utils" "7.15.0" + "@typescript-eslint/typescript-estree" "7.18.0" + "@typescript-eslint/utils" "7.18.0" debug "^4.3.4" ts-api-utils "^1.3.0" -"@typescript-eslint/types@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.15.0.tgz#fb894373a6e3882cbb37671ffddce44f934f62fc" - integrity sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw== +"@typescript-eslint/types@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-7.18.0.tgz#b90a57ccdea71797ffffa0321e744f379ec838c9" + integrity sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ== -"@typescript-eslint/typescript-estree@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.15.0.tgz#e323bfa3966e1485b638ce751f219fc1f31eba37" - integrity sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ== +"@typescript-eslint/typescript-estree@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz#b5868d486c51ce8f312309ba79bdb9f331b37931" + integrity sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA== dependencies: - "@typescript-eslint/types" "7.15.0" - "@typescript-eslint/visitor-keys" "7.15.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/visitor-keys" "7.18.0" debug "^4.3.4" globby "^11.1.0" is-glob "^4.0.3" @@ -1856,38 +1775,38 @@ semver "^7.6.0" ts-api-utils "^1.3.0" -"@typescript-eslint/utils@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.15.0.tgz#9e6253c4599b6e7da2fb64ba3f549c73eb8c1960" - integrity sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA== +"@typescript-eslint/utils@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-7.18.0.tgz#bca01cde77f95fc6a8d5b0dbcbfb3d6ca4be451f" + integrity sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw== dependencies: "@eslint-community/eslint-utils" "^4.4.0" - "@typescript-eslint/scope-manager" "7.15.0" - "@typescript-eslint/types" "7.15.0" - "@typescript-eslint/typescript-estree" "7.15.0" + "@typescript-eslint/scope-manager" "7.18.0" + "@typescript-eslint/types" "7.18.0" + "@typescript-eslint/typescript-estree" "7.18.0" -"@typescript-eslint/visitor-keys@7.15.0": - version "7.15.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.15.0.tgz#1da0726201a859343fe6a05742a7c1792fff5b66" - integrity sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw== +"@typescript-eslint/visitor-keys@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz#0564629b6124d67607378d0f0332a0495b25e7d7" + integrity sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg== dependencies: - "@typescript-eslint/types" "7.15.0" + "@typescript-eslint/types" "7.18.0" eslint-visitor-keys "^3.4.3" "@ungap/structured-clone@^1.2.0": - version "1.2.0" - resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" - integrity sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ== + version "1.3.0" + resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.3.0.tgz#d06bbb384ebcf6c505fde1c3d0ed4ddffe0aaff8" + integrity sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g== "@vscode/test-electron@^2.4.1": - version "2.4.1" - resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-2.4.1.tgz#5c2760640bf692efbdaa18bafcd35fb519688941" - integrity sha512-Gc6EdaLANdktQ1t+zozoBVRynfIsMKMc94Svu1QreOBC8y76x4tvaK32TljrLi1LI2+PK58sDVbL7ALdqf3VRQ== + version "2.5.2" + resolved "https://registry.yarnpkg.com/@vscode/test-electron/-/test-electron-2.5.2.tgz#f7d4078e8230ce9c94322f2a29cc16c17954085d" + integrity sha512-8ukpxv4wYe0iWMRQU18jhzJOHkeGKbnw7xWRX3Zw1WJA4cEKbHcmmLPdPrPtL6rhDcrlCZN+xKRpv09n4gRHYg== dependencies: http-proxy-agent "^7.0.2" https-proxy-agent "^7.0.5" jszip "^3.10.1" - ora "^7.0.1" + ora "^8.1.0" semver "^7.6.2" "@vscode/vsce-sign-alpine-arm64@2.0.2": @@ -1936,9 +1855,9 @@ integrity sha512-pAiRN6qSAhDM5SVOIxgx+2xnoVUePHbRNC7OD2aOR3WltTKxxF25OfpK8h8UQ7A0BuRkSgREbB59DBlFk4iAeg== "@vscode/vsce-sign@^2.0.0": - version "2.0.4" - resolved "https://registry.yarnpkg.com/@vscode/vsce-sign/-/vsce-sign-2.0.4.tgz#b4bf155d16f2a4badc069df850dc86f756124842" - integrity sha512-0uL32egStKYfy60IqnynAChMTbL0oqpqk0Ew0YHiIb+fayuGZWADuIPHWUcY1GCnAA+VgchOPDMxnc2R3XGWEA== + version "2.0.5" + resolved "https://registry.yarnpkg.com/@vscode/vsce-sign/-/vsce-sign-2.0.5.tgz#8850036476dc0d4e080d9c2d8325e3e97eff5193" + integrity sha512-GfYWrsT/vypTMDMgWDm75iDmAOMe7F71sZECJ+Ws6/xyIfmB3ELVnVN+LwMFAvmXY+e6eWhR2EzNGF/zAhWY3Q== optionalDependencies: "@vscode/vsce-sign-alpine-arm64" "2.0.2" "@vscode/vsce-sign-alpine-x64" "2.0.2" @@ -1951,9 +1870,9 @@ "@vscode/vsce-sign-win32-x64" "2.0.2" "@vscode/vsce@^2.30.0": - version "2.30.0" - resolved "https://registry.yarnpkg.com/@vscode/vsce/-/vsce-2.30.0.tgz#7a0c16b20ef529fa291fe9d3c7fe51a2a613f773" - integrity sha512-MBYpXdCY1SCdc2u/y11kmJuSODKFyZRpeRTQq5p4rSg05QSjSy5pz6h/BGLNdSahgXfKRBATEkjAcJFdJuDz8Q== + version "2.32.0" + resolved "https://registry.yarnpkg.com/@vscode/vsce/-/vsce-2.32.0.tgz#fc90fc28dc82614a8ab537de591e084b46ad2070" + integrity sha512-3EFJfsgrSftIqt3EtdRcAygy/OJ3hstyI1cDmIgkU9CFZW5C+3djr6mfosndCUqcVYuyjmxOK1xmFp/Bq7+NIg== dependencies: "@azure/identity" "^4.1.0" "@vscode/vsce-sign" "^2.0.0" @@ -1996,16 +1915,14 @@ acorn-jsx@^5.3.2: integrity sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ== acorn@^8.9.0: - version "8.12.1" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.12.1.tgz#71616bdccbe25e27a54439e0046e89ca76df2248" - integrity sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg== + version "8.14.1" + resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.14.1.tgz#721d5dc10f7d5b5609a891773d47731796935dfb" + integrity sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg== -agent-base@^7.0.2, agent-base@^7.1.0: - version "7.1.1" - resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.1.tgz#bdbded7dfb096b751a2a087eeeb9664725b2e317" - integrity sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA== - dependencies: - debug "^4.3.4" +agent-base@^7.1.0, agent-base@^7.1.2: + version "7.1.3" + resolved "https://registry.yarnpkg.com/agent-base/-/agent-base-7.1.3.tgz#29435eb821bc4194633a5b89e5bc4703bafc25a1" + integrity sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw== ajv@^6.12.4: version "6.12.6" @@ -2083,20 +2000,20 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -array-buffer-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.1.tgz#1e5583ec16763540a27ae52eed99ff899223568f" - integrity sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg== +array-buffer-byte-length@^1.0.1, array-buffer-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.2.tgz#384d12a37295aec3769ab022ad323a18a51ccf8b" + integrity sha512-LHE+8BuR7RYGDKvnrmcuSq3tDcKv9OFEXQt/HpbZhY7V6h0zlUXutnAD82GiFx9rdieCMjkvtcsPqBwgUl1Iiw== dependencies: - call-bind "^1.0.5" - is-array-buffer "^3.0.4" + call-bound "^1.0.3" + is-array-buffer "^3.0.5" array-flatten@1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/array-flatten/-/array-flatten-1.1.1.tgz#9a5f699051b1e7073328f2a008968b64ea2955d2" integrity sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg== -array-includes@^3.1.7: +array-includes@^3.1.8: version "3.1.8" resolved "https://registry.yarnpkg.com/array-includes/-/array-includes-3.1.8.tgz#5e370cbe172fdd5dd6530c1d4aadda25281ba97d" integrity sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ== @@ -2113,57 +2030,62 @@ array-union@^2.1.0: resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== -array.prototype.findlastindex@^1.2.3: - version "1.2.5" - resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.5.tgz#8c35a755c72908719453f87145ca011e39334d0d" - integrity sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ== +array.prototype.findlastindex@^1.2.5: + version "1.2.6" + resolved "https://registry.yarnpkg.com/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.6.tgz#cfa1065c81dcb64e34557c9b81d012f6a421c564" + integrity sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.4" define-properties "^1.2.1" - es-abstract "^1.23.2" + es-abstract "^1.23.9" es-errors "^1.3.0" - es-object-atoms "^1.0.0" - es-shim-unscopables "^1.0.2" + es-object-atoms "^1.1.1" + es-shim-unscopables "^1.1.0" array.prototype.flat@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz#1476217df8cff17d72ee8f3ba06738db5b387d18" - integrity sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA== + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz#534aaf9e6e8dd79fb6b9a9917f839ef1ec63afe5" + integrity sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" array.prototype.flatmap@^1.3.2: - version "1.3.2" - resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz#c9a7c6831db8e719d6ce639190146c24bbd3e527" - integrity sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ== + version "1.3.3" + resolved "https://registry.yarnpkg.com/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz#712cc792ae70370ae40586264629e33aab5dd38b" + integrity sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - es-shim-unscopables "^1.0.0" + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.5" + es-shim-unscopables "^1.0.2" -arraybuffer.prototype.slice@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz#097972f4255e41bc3425e37dc3f6421cf9aefde6" - integrity sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A== +arraybuffer.prototype.slice@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz#9d760d84dbdd06d0cbf92c8849615a1a7ab3183c" + integrity sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ== dependencies: array-buffer-byte-length "^1.0.1" - call-bind "^1.0.5" + call-bind "^1.0.8" define-properties "^1.2.1" - es-abstract "^1.22.3" - es-errors "^1.2.1" - get-intrinsic "^1.2.3" + es-abstract "^1.23.5" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" is-array-buffer "^3.0.4" - is-shared-array-buffer "^1.0.2" assertion-error@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/assertion-error/-/assertion-error-1.1.0.tgz#e60b6b0e8f301bd97e5375215bda406c85118c0b" integrity sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== +async-function@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/async-function/-/async-function-1.0.0.tgz#509c9fca60eaf85034c6829838188e4e4c8ffb2b" + integrity sha512-hsU18Ae8CDTR6Kgu9DYf0EbCr/a5iGL0rytQDobUcdpYOKokk8LEjVphnXkDkgpi0wYVsqrXuP0bZxJaTqdgoA== + asynckit@^0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" @@ -2177,9 +2099,9 @@ available-typed-arrays@^1.0.7: possible-typed-array-names "^1.0.0" axios@^1.7.2: - version "1.7.2" - resolved "https://registry.yarnpkg.com/axios/-/axios-1.7.2.tgz#b625db8a7051fbea61c35a3cbb3a1daa7b9c7621" - integrity sha512-2A8QhOMrbomlDuiLeK9XibIBzuHeRcqqNOHp0Cyp5EoJ1IFDh+XZH3A6BkXtv0K4gFGCI0Y4BM7B1wOEi0Rmgw== + version "1.8.4" + resolved "https://registry.yarnpkg.com/axios/-/axios-1.8.4.tgz#78990bb4bc63d2cae072952d374835950a82f447" + integrity sha512-eBSYY4Y68NNlHbHBMdeDmKNtDgXWhQsJcGqzO3iLUM0GraQFSS9cVgPX5I9b3lbdFKyYoAEGAZF1DwhTaljNAw== dependencies: follow-redirects "^1.15.6" form-data "^4.0.0" @@ -2228,46 +2150,49 @@ babel-plugin-jest-hoist@^29.6.3: "@types/babel__traverse" "^7.0.6" babel-plugin-polyfill-corejs2@^0.4.10: - version "0.4.11" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.11.tgz#30320dfe3ffe1a336c15afdcdafd6fd615b25e33" - integrity sha512-sMEJ27L0gRHShOh5G54uAAPaiCOygY/5ratXuiyb2G46FmlSpc9eFCzYVyDiPxfNbwzA7mYahmjQc5q+CZQ09Q== + version "0.4.13" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs2/-/babel-plugin-polyfill-corejs2-0.4.13.tgz#7d445f0e0607ebc8fb6b01d7e8fb02069b91dd8b" + integrity sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g== dependencies: "@babel/compat-data" "^7.22.6" - "@babel/helper-define-polyfill-provider" "^0.6.2" + "@babel/helper-define-polyfill-provider" "^0.6.4" semver "^6.3.1" -babel-plugin-polyfill-corejs3@^0.10.4: - version "0.10.4" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.10.4.tgz#789ac82405ad664c20476d0233b485281deb9c77" - integrity sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg== +babel-plugin-polyfill-corejs3@^0.11.0: + version "0.11.1" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-corejs3/-/babel-plugin-polyfill-corejs3-0.11.1.tgz#4e4e182f1bb37c7ba62e2af81d8dd09df31344f6" + integrity sha512-yGCqvBT4rwMczo28xkH/noxJ6MZ4nJfkVYdoDaC/utLtWrXxv27HVrzAeSbqR8SxDsp46n0YF47EbHoixy6rXQ== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.1" - core-js-compat "^3.36.1" + "@babel/helper-define-polyfill-provider" "^0.6.3" + core-js-compat "^3.40.0" babel-plugin-polyfill-regenerator@^0.6.1: - version "0.6.2" - resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.2.tgz#addc47e240edd1da1058ebda03021f382bba785e" - integrity sha512-2R25rQZWP63nGwaAswvDazbPXfrM3HwVoBXK6HcqeKrSrL/JqcC/rDcf95l4r7LXLyxDXc8uQDa064GubtCABg== + version "0.6.4" + resolved "https://registry.yarnpkg.com/babel-plugin-polyfill-regenerator/-/babel-plugin-polyfill-regenerator-0.6.4.tgz#428c615d3c177292a22b4f93ed99e358d7906a9b" + integrity sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw== dependencies: - "@babel/helper-define-polyfill-provider" "^0.6.2" + "@babel/helper-define-polyfill-provider" "^0.6.4" babel-preset-current-node-syntax@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.0.1.tgz#b4399239b89b2a011f9ddbe3e4f401fc40cff73b" - integrity sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ== + version "1.1.0" + resolved "https://registry.yarnpkg.com/babel-preset-current-node-syntax/-/babel-preset-current-node-syntax-1.1.0.tgz#9a929eafece419612ef4ae4f60b1862ebad8ef30" + integrity sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw== dependencies: "@babel/plugin-syntax-async-generators" "^7.8.4" "@babel/plugin-syntax-bigint" "^7.8.3" - "@babel/plugin-syntax-class-properties" "^7.8.3" - "@babel/plugin-syntax-import-meta" "^7.8.3" + "@babel/plugin-syntax-class-properties" "^7.12.13" + "@babel/plugin-syntax-class-static-block" "^7.14.5" + "@babel/plugin-syntax-import-attributes" "^7.24.7" + "@babel/plugin-syntax-import-meta" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.3" - "@babel/plugin-syntax-logical-assignment-operators" "^7.8.3" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.3" - "@babel/plugin-syntax-numeric-separator" "^7.8.3" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" "@babel/plugin-syntax-object-rest-spread" "^7.8.3" "@babel/plugin-syntax-optional-catch-binding" "^7.8.3" "@babel/plugin-syntax-optional-chaining" "^7.8.3" - "@babel/plugin-syntax-top-level-await" "^7.8.3" + "@babel/plugin-syntax-private-property-in-object" "^7.14.5" + "@babel/plugin-syntax-top-level-await" "^7.14.5" babel-preset-jest@^29.6.3: version "29.6.3" @@ -2301,19 +2226,10 @@ bl@^4.0.3: inherits "^2.0.4" readable-stream "^3.4.0" -bl@^5.0.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/bl/-/bl-5.1.0.tgz#183715f678c7188ecef9fe475d90209400624273" - integrity sha512-tv1ZJHLfTDnXE6tMHv73YgSJaWR2AFuPwMntBe7XL/GBFHnT0CLnsHMogfk5+GzCDC5ZWarSCYaIGATZt9dNsQ== - dependencies: - buffer "^6.0.3" - inherits "^2.0.4" - readable-stream "^3.4.0" - -body-parser@1.20.2: - version "1.20.2" - resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.2.tgz#6feb0e21c4724d06de7ff38da36dad4f57a747fd" - integrity sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA== +body-parser@1.20.3: + version "1.20.3" + resolved "https://registry.yarnpkg.com/body-parser/-/body-parser-1.20.3.tgz#1953431221c6fb5cd63c4b36d53fab0928e548c6" + integrity sha512-7rAxByjUMqQ3/bHJy7D6OGXvx/MMc4IqBn/X0fcM1QUcAItpZrBEYhWGem+tzXH90c+G01ypMcYJBO9Y30203g== dependencies: bytes "3.1.2" content-type "~1.0.5" @@ -2323,7 +2239,7 @@ body-parser@1.20.2: http-errors "2.0.0" iconv-lite "0.4.24" on-finished "2.4.1" - qs "6.11.0" + qs "6.13.0" raw-body "2.5.2" type-is "~1.6.18" unpipe "1.0.0" @@ -2360,15 +2276,15 @@ browser-stdout@^1.3.1: resolved "https://registry.yarnpkg.com/browser-stdout/-/browser-stdout-1.3.1.tgz#baa559ee14ced73452229bad7326467c61fabd60" integrity sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw== -browserslist@^4.22.2, browserslist@^4.23.0: - version "4.23.1" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.23.1.tgz#ce4af0534b3d37db5c1a4ca98b9080f985041e96" - integrity sha512-TUfofFo/KsK/bWZ9TWQ5O26tsWW4Uhmt8IYklbnUa70udB6P2wA7w7o4PY4muaEPBQaAX+CEnmmIA41NVHtPVw== +browserslist@^4.24.0, browserslist@^4.24.4: + version "4.24.4" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.24.4.tgz#c6b2865a3f08bcb860a0e827389003b9fe686e4b" + integrity sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A== dependencies: - caniuse-lite "^1.0.30001629" - electron-to-chromium "^1.4.796" - node-releases "^2.0.14" - update-browserslist-db "^1.0.16" + caniuse-lite "^1.0.30001688" + electron-to-chromium "^1.5.73" + node-releases "^2.0.19" + update-browserslist-db "^1.1.1" bser@2.1.1: version "2.1.1" @@ -2400,29 +2316,43 @@ buffer@^5.5.0: base64-js "^1.3.1" ieee754 "^1.1.13" -buffer@^6.0.3: - version "6.0.3" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-6.0.3.tgz#2ace578459cc8fbe2a70aaa8f52ee63b6a74c6c6" - integrity sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA== +bundle-name@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/bundle-name/-/bundle-name-4.1.0.tgz#f3b96b34160d6431a19d7688135af7cfb8797889" + integrity sha512-tjwM5exMg6BGRI+kNmTntNsvdZS1X8BFYS6tnJ2hdH0kVxM6/eVZ2xy+FqStSWvYmtfFMDLIxurorHwDKfDz5Q== dependencies: - base64-js "^1.3.1" - ieee754 "^1.2.1" + run-applescript "^7.0.0" bytes@3.1.2: version "3.1.2" resolved "https://registry.yarnpkg.com/bytes/-/bytes-3.1.2.tgz#8b0beeb98605adf1b128fa4386403c009e0221a5" integrity sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg== -call-bind@^1.0.2, call-bind@^1.0.5, call-bind@^1.0.6, call-bind@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.7.tgz#06016599c40c56498c18769d2730be242b6fa3b9" - integrity sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w== +call-bind-apply-helpers@^1.0.0, call-bind-apply-helpers@^1.0.1, call-bind-apply-helpers@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz#4b5428c222be985d79c3d82657479dbe0b59b2d6" + integrity sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ== dependencies: - es-define-property "^1.0.0" es-errors "^1.3.0" function-bind "^1.1.2" + +call-bind@^1.0.7, call-bind@^1.0.8: + version "1.0.8" + resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.8.tgz#0736a9660f537e3388826f440d5ec45f744eaa4c" + integrity sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww== + dependencies: + call-bind-apply-helpers "^1.0.0" + es-define-property "^1.0.0" get-intrinsic "^1.2.4" - set-function-length "^1.2.1" + set-function-length "^1.2.2" + +call-bound@^1.0.2, call-bound@^1.0.3, call-bound@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/call-bound/-/call-bound-1.0.4.tgz#238de935d2a2a692928c538c7ccfa91067fd062a" + integrity sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg== + dependencies: + call-bind-apply-helpers "^1.0.2" + get-intrinsic "^1.3.0" callsites@^3.0.0: version "3.1.0" @@ -2439,10 +2369,10 @@ camelcase@^6.0.0, camelcase@^6.2.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.3.0.tgz#5685b95eb209ac9c0c177467778c9c84df58ba9a" integrity sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA== -caniuse-lite@^1.0.30001629: - version "1.0.30001640" - resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001640.tgz#32c467d4bf1f1a0faa63fc793c2ba81169e7652f" - integrity sha512-lA4VMpW0PSUrFnkmVuEKBUovSWKhj7puyCg8StBChgu298N1AtuF1sKWEvfDuimSEDbhlb/KqPKC3fs1HbuQUA== +caniuse-lite@^1.0.30001688: + version "1.0.30001715" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001715.tgz#bd325a37ad366e3fe90827d74062807a34fbaeb2" + integrity sha512-7ptkFGMm2OAOgvZpwgA4yjQ5SQbrNVGdRjzH0pBdy1Fasvcr+KAeECmbCAECzTuDuoX0FCY8KzUxjf9+9kfZEw== chai@^4.4.0: version "4.5.0" @@ -2474,10 +2404,10 @@ chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: ansi-styles "^4.1.0" supports-color "^7.1.0" -chalk@^5.0.0, chalk@^5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.3.0.tgz#67c20a7ebef70e7f3970a01f90fa210cb6860385" - integrity sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w== +chalk@^5.3.0: + version "5.4.1" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-5.4.1.tgz#1b48bf0963ec158dce2aacf69c093ae2dd2092d8" + integrity sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w== change-case@^5.4.4: version "5.4.4" @@ -2509,17 +2439,21 @@ cheerio-select@^2.1.0: domutils "^3.0.1" cheerio@^1.0.0-rc.9: - version "1.0.0-rc.12" - resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0-rc.12.tgz#788bf7466506b1c6bf5fae51d24a2c4d62e47683" - integrity sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q== + version "1.0.0" + resolved "https://registry.yarnpkg.com/cheerio/-/cheerio-1.0.0.tgz#1ede4895a82f26e8af71009f961a9b8cb60d6a81" + integrity sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww== dependencies: cheerio-select "^2.1.0" dom-serializer "^2.0.0" domhandler "^5.0.3" - domutils "^3.0.1" - htmlparser2 "^8.0.1" - parse5 "^7.0.0" + domutils "^3.1.0" + encoding-sniffer "^0.2.0" + htmlparser2 "^9.1.0" + parse5 "^7.1.2" parse5-htmlparser2-tree-adapter "^7.0.0" + parse5-parser-stream "^7.1.2" + undici "^6.19.5" + whatwg-mimetype "^4.0.0" chokidar@^3.5.3: version "3.6.0" @@ -2547,18 +2481,18 @@ ci-info@^3.2.0: integrity sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ== cjs-module-lexer@^1.0.0: - version "1.3.1" - resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.3.1.tgz#c485341ae8fd999ca4ee5af2d7a1c9ae01e0099c" - integrity sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q== + version "1.4.3" + resolved "https://registry.yarnpkg.com/cjs-module-lexer/-/cjs-module-lexer-1.4.3.tgz#0f79731eb8cfe1ec72acd4066efac9d61991b00d" + integrity sha512-9z8TZaGM1pfswYeXrUpzPrkx8UnWYdhJclsiYMm6x/w5+nN+8Tf/LnAgfLGQCm59qAOxU8WwHEq2vNwF6i4j+Q== -cli-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-4.0.0.tgz#3cecfe3734bf4fe02a8361cbdc0f6fe28c6a57ea" - integrity sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg== +cli-cursor@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-5.0.0.tgz#24a4831ecf5a6b01ddeb32fb71a4b2088b0dce38" + integrity sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw== dependencies: - restore-cursor "^4.0.0" + restore-cursor "^5.0.0" -cli-spinners@^2.9.0: +cli-spinners@^2.9.2: version "2.9.2" resolved "https://registry.yarnpkg.com/cli-spinners/-/cli-spinners-2.9.2.tgz#1773a8f4b9c4d6ac31563df53b3fc1d79462fe41" integrity sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg== @@ -2587,9 +2521,9 @@ co@^4.6.0: integrity sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ== cockatiel@^3.1.2: - version "3.1.3" - resolved "https://registry.yarnpkg.com/cockatiel/-/cockatiel-3.1.3.tgz#bb1774a498a17e739dd994d56610dc6538b02858" - integrity sha512-xC759TpZ69d7HhfDp8m2WkRwEUiCkxY8Ee2OQH/3H6zmy2D/5Sm+zSTbPRa+V2QyjDtpMvjOIAOVjA2gp6N1kQ== + version "3.2.1" + resolved "https://registry.yarnpkg.com/cockatiel/-/cockatiel-3.2.1.tgz#575f937bc4040a20ae27352a6d07c9c5a741981f" + integrity sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q== collect-v8-coverage@^1.0.0: version "1.0.2" @@ -2664,17 +2598,17 @@ cookie-signature@1.0.6: resolved "https://registry.yarnpkg.com/cookie-signature/-/cookie-signature-1.0.6.tgz#e303a882b342cc3ee8ca513a79999734dab3ae2c" integrity sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ== -cookie@0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.6.0.tgz#2798b04b071b0ecbff0dbb62a505a8efa4e19051" - integrity sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw== +cookie@0.7.1: + version "0.7.1" + resolved "https://registry.yarnpkg.com/cookie/-/cookie-0.7.1.tgz#2f73c42142d5d5cf71310a74fc4ae61670e5dbc9" + integrity sha512-6DnInpx7SJ2AK3+CTUE/ZM0vWTUboZCegxhC2xiIydHR9jNuTAASBrfEpHhiGOZw/nX51bHt6YQl8jsGo4y/0w== -core-js-compat@^3.31.0, core-js-compat@^3.36.1: - version "3.37.1" - resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.37.1.tgz#c844310c7852f4bdf49b8d339730b97e17ff09ee" - integrity sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg== +core-js-compat@^3.40.0: + version "3.41.0" + resolved "https://registry.yarnpkg.com/core-js-compat/-/core-js-compat-3.41.0.tgz#4cdfce95f39a8f27759b667cf693d96e5dda3d17" + integrity sha512-RFsU9LySVue9RTwdDVX/T0e2Y6jRYWXERKElIjpuEOEnxaXffI0X7RUwVzfYLfzuLXSNJDYoRYUAmRUcyln20A== dependencies: - browserslist "^4.23.0" + browserslist "^4.24.4" core-util-is@~1.0.0: version "1.0.3" @@ -2702,9 +2636,9 @@ cross-env@^7.0.3: cross-spawn "^7.0.1" cross-spawn@^6.0.5: - version "6.0.5" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" - integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== + version "6.0.6" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.6.tgz#30d0efa0712ddb7eb5a76e1e8721bffafa6b5d57" + integrity sha512-VqCUuhcd1iB+dsv8gxPttb5iZh/D0iubSP21g36KXdEuf6I5JiioesUVjpCdHV9MZRUfVFlvwtIUyPfxo5trtw== dependencies: nice-try "^1.0.4" path-key "^2.0.1" @@ -2712,7 +2646,7 @@ cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0, cross-spawn@^7.0.1: +cross-spawn@^7.0.1, cross-spawn@^7.0.2, cross-spawn@^7.0.3, cross-spawn@^7.0.6: version "7.0.6" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.6.tgz#8a58fe78f00dcd70c370451759dfbfaf03e8ee9f" integrity sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA== @@ -2721,15 +2655,6 @@ cross-spawn@^7.0.0, cross-spawn@^7.0.1: shebang-command "^2.0.0" which "^2.0.1" -cross-spawn@^7.0.2, cross-spawn@^7.0.3: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - css-select@^5.1.0: version "5.1.0" resolved "https://registry.yarnpkg.com/css-select/-/css-select-5.1.0.tgz#b8ebd6554c3637ccc76688804ad3f6a6fdaea8a6" @@ -2746,30 +2671,30 @@ css-what@^6.1.0: resolved "https://registry.yarnpkg.com/css-what/-/css-what-6.1.0.tgz#fb5effcf76f1ddea2c81bdfaa4de44e79bac70f4" integrity sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw== -data-view-buffer@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.1.tgz#8ea6326efec17a2e42620696e671d7d5a8bc66b2" - integrity sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA== +data-view-buffer@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-buffer/-/data-view-buffer-1.0.2.tgz#211a03ba95ecaf7798a8c7198d79536211f88570" + integrity sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ== dependencies: - call-bind "^1.0.6" + call-bound "^1.0.3" es-errors "^1.3.0" - is-data-view "^1.0.1" + is-data-view "^1.0.2" -data-view-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.1.tgz#90721ca95ff280677eb793749fce1011347669e2" - integrity sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ== +data-view-byte-length@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz#9e80f7ca52453ce3e93d25a35318767ea7704735" + integrity sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ== dependencies: - call-bind "^1.0.7" + call-bound "^1.0.3" es-errors "^1.3.0" - is-data-view "^1.0.1" + is-data-view "^1.0.2" -data-view-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.0.tgz#5e0bbfb4828ed2d1b9b400cd8a7d119bca0ff18a" - integrity sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA== +data-view-byte-offset@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/data-view-byte-offset/-/data-view-byte-offset-1.0.1.tgz#068307f9b71ab76dbbe10291389e020856606191" + integrity sha512-BS8PfmtDGnrgYdOonGZQdLZslWIeCGFP9tpan0hi1Co2Zr2NKADsvGYA8XxuG/4UWgJ6Cjtv+YJnB6MM69QGlQ== dependencies: - call-bind "^1.0.6" + call-bound "^1.0.2" es-errors "^1.3.0" is-data-view "^1.0.1" @@ -2780,12 +2705,12 @@ debug@2.6.9: dependencies: ms "2.0.0" -debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: - version "4.3.5" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.5.tgz#e83444eceb9fedd4a1da56d671ae2446a01a6e1e" - integrity sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg== +debug@4, debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4, debug@^4.3.5: + version "4.4.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.4.0.tgz#2b3f2aea2ffeb776477460267377dc8710faba8a" + integrity sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA== dependencies: - ms "2.1.2" + ms "^2.1.3" debug@^3.2.7: version "3.2.7" @@ -2794,13 +2719,6 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.3.5: - version "4.3.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.7.tgz#87945b4151a011d76d95a198d7111c865c360a52" - integrity sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ== - dependencies: - ms "^2.1.3" - decamelize@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-4.0.0.tgz#aa472d7bf660eb15f3494efd531cab7f2a709837" @@ -2840,6 +2758,19 @@ deepmerge@^4.2.2: resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-4.3.1.tgz#44b5f2147cd3b00d4b56137685966f26fd25dd4a" integrity sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A== +default-browser-id@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/default-browser-id/-/default-browser-id-5.0.0.tgz#a1d98bf960c15082d8a3fa69e83150ccccc3af26" + integrity sha512-A6p/pu/6fyBcA1TRz/GqWYPViplrftcW2gZC9q79ngNCKAeR/X3gcEdXQHl4KNXV+3wgIJ1CPkJQ3IHM6lcsyA== + +default-browser@^5.2.1: + version "5.2.1" + resolved "https://registry.yarnpkg.com/default-browser/-/default-browser-5.2.1.tgz#7b7ba61204ff3e425b556869ae6d3e9d9f1712cf" + integrity sha512-WY/3TUME0x3KPYdRRxEJJvXRHV4PyPoUsxtZa78lwItwRQRHhd2U9xOscaT/YTf8uCXIAjeJOFBVEh/7FtD8Xg== + dependencies: + bundle-name "^4.1.0" + default-browser-id "^5.0.0" + define-data-property@^1.0.1, define-data-property@^1.1.4: version "1.1.4" resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.4.tgz#894dc141bb7d3060ae4366f6a0107e68fbe48c5e" @@ -2849,12 +2780,12 @@ define-data-property@^1.0.1, define-data-property@^1.1.4: es-errors "^1.3.0" gopd "^1.0.1" -define-lazy-prop@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-2.0.0.tgz#3f7ae421129bcaaac9bc74905c98a0009ec9ee7f" - integrity sha512-Ds09qNh8yw3khSjiJjiUInaGX9xlqZDY7JVryGxdxV7NPeuqQfplOpQ66yJFZut3jLa5zOwkXw1g9EI2uKh4Og== +define-lazy-prop@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/define-lazy-prop/-/define-lazy-prop-3.0.0.tgz#dbb19adfb746d7fc6d734a06b72f4a00d021255f" + integrity sha512-N+MeXYoqr3pOgn8xfyRPREN7gHakLYjhsHhWGT3fWAiL4IkAt0iDw14QiiEm2bE30c5XX5q0FtAA3CK5f9/BUg== -define-properties@^1.2.0, define-properties@^1.2.1: +define-properties@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== @@ -2879,9 +2810,9 @@ destroy@1.2.0: integrity sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg== detect-libc@^2.0.0: - version "2.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.3.tgz#f0cd503b40f9939b894697d19ad50895e30cf700" - integrity sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw== + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-2.0.4.tgz#f04715b8ba815e53b4d8109655b6508a6865a7e8" + integrity sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA== detect-newline@^3.0.0: version "3.1.0" @@ -2940,15 +2871,24 @@ domhandler@^5.0.2, domhandler@^5.0.3: dependencies: domelementtype "^2.3.0" -domutils@^3.0.1: - version "3.1.0" - resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.1.0.tgz#c47f551278d3dc4b0b1ab8cbb42d751a6f0d824e" - integrity sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA== +domutils@^3.0.1, domutils@^3.1.0: + version "3.2.2" + resolved "https://registry.yarnpkg.com/domutils/-/domutils-3.2.2.tgz#edbfe2b668b0c1d97c24baf0f1062b132221bc78" + integrity sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw== dependencies: dom-serializer "^2.0.0" domelementtype "^2.3.0" domhandler "^5.0.3" +dunder-proto@^1.0.0, dunder-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/dunder-proto/-/dunder-proto-1.0.1.tgz#d7ae667e1dc83482f8b70fd0f6eefc50da30f58a" + integrity sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A== + dependencies: + call-bind-apply-helpers "^1.0.1" + es-errors "^1.3.0" + gopd "^1.2.0" + eastasianwidth@^0.2.0: version "0.2.0" resolved "https://registry.yarnpkg.com/eastasianwidth/-/eastasianwidth-0.2.0.tgz#696ce2ec0aa0e6ea93a397ffcf24aa7840c827cb" @@ -2966,17 +2906,17 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow== -electron-to-chromium@^1.4.796: - version "1.4.818" - resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.4.818.tgz#7762c8bfd15a07c3833b7f5deed990e9e5a4c24f" - integrity sha512-eGvIk2V0dGImV9gWLq8fDfTTsCAeMDwZqEPMr+jMInxZdnp9Us8UpovYpRCf9NQ7VOFgrN2doNSgvISbsbNpxA== +electron-to-chromium@^1.5.73: + version "1.5.140" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.5.140.tgz#91d9279fe72963f22c5784cc7f3461b5fed34786" + integrity sha512-o82Rj+ONp4Ip7Cl1r7lrqx/pXhbp/lh9DpKcMNscFJdh8ebyRofnc7Sh01B4jx403RI0oqTBvlZ7OBIZLMr2+Q== emittery@^0.13.1: version "0.13.1" resolved "https://registry.yarnpkg.com/emittery/-/emittery-0.13.1.tgz#c04b8c3457490e0847ae51fced3af52d338e3dad" integrity sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ== -emoji-regex@^10.2.1: +emoji-regex@^10.3.0: version "10.4.0" resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-10.4.0.tgz#03553afea80b3975749cfcb36f776ca268e413d4" integrity sha512-EC+0oUMY1Rqm4O6LLrgjtYDvcVYTy7chDnM4Q7030tP4Kwj3u/pR6gP9ygnp2CJMK5Gq+9Q2oqmrFJAz01DXjw== @@ -2996,6 +2936,19 @@ encodeurl@~1.0.2: resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" integrity sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w== +encodeurl@~2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-2.0.0.tgz#7b8ea898077d7e409d3ac45474ea38eaf0857a58" + integrity sha512-Q0n9HRi4m6JuGIV1eFlmvJB7ZEVxu93IrMyiMsGC0lrMJMWzRgx6WGquyfQgZVb31vhGgXnfmPNNXmxnOkRBrg== + +encoding-sniffer@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/encoding-sniffer/-/encoding-sniffer-0.2.0.tgz#799569d66d443babe82af18c9f403498365ef1d5" + integrity sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg== + dependencies: + iconv-lite "^0.6.3" + whatwg-encoding "^3.1.1" + end-of-stream@^1.1.0, end-of-stream@^1.4.1: version "1.4.4" resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" @@ -3003,7 +2956,7 @@ end-of-stream@^1.1.0, end-of-stream@^1.4.1: dependencies: once "^1.4.0" -entities@^4.2.0, entities@^4.4.0: +entities@^4.2.0, entities@^4.5.0: version "4.5.0" resolved "https://registry.yarnpkg.com/entities/-/entities-4.5.0.tgz#5d268ea5e7113ec74c4d033b79ea5a35a488fb48" integrity sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw== @@ -3020,101 +2973,105 @@ error-ex@^1.3.1: dependencies: is-arrayish "^0.2.1" -es-abstract@^1.22.1, es-abstract@^1.22.3, es-abstract@^1.23.0, es-abstract@^1.23.2: - version "1.23.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.3.tgz#8f0c5a35cd215312573c5a27c87dfd6c881a0aa0" - integrity sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A== +es-abstract@^1.23.2, es-abstract@^1.23.5, es-abstract@^1.23.9: + version "1.23.9" + resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.23.9.tgz#5b45994b7de78dada5c1bebf1379646b32b9d606" + integrity sha512-py07lI0wjxAC/DcfK1S6G7iANonniZwTISvdPzk9hzeH0IZIshbuuFxLIU96OyF89Yb9hiqWn8M/bY83KY5vzA== dependencies: - array-buffer-byte-length "^1.0.1" - arraybuffer.prototype.slice "^1.0.3" + array-buffer-byte-length "^1.0.2" + arraybuffer.prototype.slice "^1.0.4" available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - data-view-buffer "^1.0.1" - data-view-byte-length "^1.0.1" - data-view-byte-offset "^1.0.0" - es-define-property "^1.0.0" + call-bind "^1.0.8" + call-bound "^1.0.3" + data-view-buffer "^1.0.2" + data-view-byte-length "^1.0.2" + data-view-byte-offset "^1.0.1" + es-define-property "^1.0.1" es-errors "^1.3.0" es-object-atoms "^1.0.0" - es-set-tostringtag "^2.0.3" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.4" - get-symbol-description "^1.0.2" - globalthis "^1.0.3" - gopd "^1.0.1" + es-set-tostringtag "^2.1.0" + es-to-primitive "^1.3.0" + function.prototype.name "^1.1.8" + get-intrinsic "^1.2.7" + get-proto "^1.0.0" + get-symbol-description "^1.1.0" + globalthis "^1.0.4" + gopd "^1.2.0" has-property-descriptors "^1.0.2" - has-proto "^1.0.3" - has-symbols "^1.0.3" + has-proto "^1.2.0" + has-symbols "^1.1.0" hasown "^2.0.2" - internal-slot "^1.0.7" - is-array-buffer "^3.0.4" + internal-slot "^1.1.0" + is-array-buffer "^3.0.5" is-callable "^1.2.7" - is-data-view "^1.0.1" - is-negative-zero "^2.0.3" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.3" - is-string "^1.0.7" - is-typed-array "^1.1.13" - is-weakref "^1.0.2" - object-inspect "^1.13.1" + is-data-view "^1.0.2" + is-regex "^1.2.1" + is-shared-array-buffer "^1.0.4" + is-string "^1.1.1" + is-typed-array "^1.1.15" + is-weakref "^1.1.0" + math-intrinsics "^1.1.0" + object-inspect "^1.13.3" object-keys "^1.1.1" - object.assign "^4.1.5" - regexp.prototype.flags "^1.5.2" - safe-array-concat "^1.1.2" - safe-regex-test "^1.0.3" - string.prototype.trim "^1.2.9" - string.prototype.trimend "^1.0.8" + object.assign "^4.1.7" + own-keys "^1.0.1" + regexp.prototype.flags "^1.5.3" + safe-array-concat "^1.1.3" + safe-push-apply "^1.0.0" + safe-regex-test "^1.1.0" + set-proto "^1.0.0" + string.prototype.trim "^1.2.10" + string.prototype.trimend "^1.0.9" string.prototype.trimstart "^1.0.8" - typed-array-buffer "^1.0.2" - typed-array-byte-length "^1.0.1" - typed-array-byte-offset "^1.0.2" - typed-array-length "^1.0.6" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.15" - -es-define-property@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.0.tgz#c7faefbdff8b2696cf5f46921edfb77cc4ba3845" - integrity sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ== - dependencies: - get-intrinsic "^1.2.4" + typed-array-buffer "^1.0.3" + typed-array-byte-length "^1.0.3" + typed-array-byte-offset "^1.0.4" + typed-array-length "^1.0.7" + unbox-primitive "^1.1.0" + which-typed-array "^1.1.18" + +es-define-property@^1.0.0, es-define-property@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/es-define-property/-/es-define-property-1.0.1.tgz#983eb2f9a6724e9303f61addf011c72e09e0b0fa" + integrity sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g== -es-errors@^1.2.1, es-errors@^1.3.0: +es-errors@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/es-errors/-/es-errors-1.3.0.tgz#05f75a25dab98e4fb1dcd5e1472c0546d5057c8f" integrity sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw== -es-object-atoms@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.0.0.tgz#ddb55cd47ac2e240701260bc2a8e31ecb643d941" - integrity sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw== +es-object-atoms@^1.0.0, es-object-atoms@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/es-object-atoms/-/es-object-atoms-1.1.1.tgz#1c4f2c4837327597ce69d2ca190a7fdd172338c1" + integrity sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA== dependencies: es-errors "^1.3.0" -es-set-tostringtag@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz#8bb60f0a440c2e4281962428438d58545af39777" - integrity sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ== +es-set-tostringtag@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz#f31dbbe0c183b00a6d26eb6325c810c0fd18bd4d" + integrity sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA== dependencies: - get-intrinsic "^1.2.4" + es-errors "^1.3.0" + get-intrinsic "^1.2.6" has-tostringtag "^1.0.2" - hasown "^2.0.1" + hasown "^2.0.2" -es-shim-unscopables@^1.0.0, es-shim-unscopables@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz#1f6942e71ecc7835ed1c8a83006d8771a63a3763" - integrity sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw== +es-shim-unscopables@^1.0.2, es-shim-unscopables@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.1.0.tgz#438df35520dac5d105f3943d927549ea3b00f4b5" + integrity sha512-d9T8ucsEhh8Bi1woXCf+TIKDIROLG5WCkxg8geBCbvk22kzwC5G2OnXVMO6FUsvQlgUUXQ2itephWDLqDzbeCw== dependencies: - hasown "^2.0.0" + hasown "^2.0.2" -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== +es-to-primitive@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.3.0.tgz#96c89c82cc49fd8794a24835ba3e1ff87f214e18" + integrity sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g== dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" + is-callable "^1.2.7" + is-date-object "^1.0.5" + is-symbol "^1.0.4" esbuild@^0.21.4: version "0.21.5" @@ -3145,10 +3102,10 @@ esbuild@^0.21.4: "@esbuild/win32-ia32" "0.21.5" "@esbuild/win32-x64" "0.21.5" -escalade@^3.1.1, escalade@^3.1.2: - version "3.1.2" - resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.2.tgz#54076e9ab29ea5bf3d8f1ed62acffbb88272df27" - integrity sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA== +escalade@^3.1.1, escalade@^3.2.0: + version "3.2.0" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.2.0.tgz#011a3f69856ba189dffa7dc8fcce99d2a87903e5" + integrity sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA== escape-html@~1.0.3: version "1.0.3" @@ -3184,43 +3141,45 @@ eslint-import-resolver-node@^0.3.9: is-core-module "^2.13.0" resolve "^1.22.4" -eslint-module-utils@^2.8.0: - version "2.8.1" - resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz#52f2404300c3bd33deece9d7372fb337cc1d7c34" - integrity sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q== +eslint-module-utils@^2.12.0: + version "2.12.0" + resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.12.0.tgz#fe4cfb948d61f49203d7b08871982b65b9af0b0b" + integrity sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg== dependencies: debug "^3.2.7" eslint-plugin-import@^2.29.1: - version "2.29.1" - resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz#d45b37b5ef5901d639c15270d74d46d161150643" - integrity sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw== + version "2.31.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-import/-/eslint-plugin-import-2.31.0.tgz#310ce7e720ca1d9c0bb3f69adfd1c6bdd7d9e0e7" + integrity sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A== dependencies: - array-includes "^3.1.7" - array.prototype.findlastindex "^1.2.3" + "@rtsao/scc" "^1.1.0" + array-includes "^3.1.8" + array.prototype.findlastindex "^1.2.5" array.prototype.flat "^1.3.2" array.prototype.flatmap "^1.3.2" debug "^3.2.7" doctrine "^2.1.0" eslint-import-resolver-node "^0.3.9" - eslint-module-utils "^2.8.0" - hasown "^2.0.0" - is-core-module "^2.13.1" + eslint-module-utils "^2.12.0" + hasown "^2.0.2" + is-core-module "^2.15.1" is-glob "^4.0.3" minimatch "^3.1.2" - object.fromentries "^2.0.7" - object.groupby "^1.0.1" - object.values "^1.1.7" + object.fromentries "^2.0.8" + object.groupby "^1.0.3" + object.values "^1.2.0" semver "^6.3.1" + string.prototype.trimend "^1.0.8" tsconfig-paths "^3.15.0" eslint-plugin-prettier@^5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.1.3.tgz#17cfade9e732cef32b5f5be53bd4e07afd8e67e1" - integrity sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw== + version "5.2.6" + resolved "https://registry.yarnpkg.com/eslint-plugin-prettier/-/eslint-plugin-prettier-5.2.6.tgz#be39e3bb23bb3eeb7e7df0927cdb46e4d7945096" + integrity sha512-mUcf7QG2Tjk7H055Jk0lGBjbgDnfrvqjhXh9t2xLMSCjZVcw9Rb1V6sVNXO0th3jgeO7zllWPTNRil3JW94TnQ== dependencies: prettier-linter-helpers "^1.0.0" - synckit "^0.8.6" + synckit "^0.11.0" eslint-plugin-unused-imports@^3.2.0: version "3.2.0" @@ -3242,21 +3201,21 @@ eslint-scope@^7.2.2: esrecurse "^4.3.0" estraverse "^5.2.0" -eslint-visitor-keys@^3.3.0, eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: +eslint-visitor-keys@^3.4.1, eslint-visitor-keys@^3.4.3: version "3.4.3" resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== eslint@^8.57.0: - version "8.57.0" - resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.0.tgz#c786a6fd0e0b68941aaf624596fb987089195668" - integrity sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ== + version "8.57.1" + resolved "https://registry.yarnpkg.com/eslint/-/eslint-8.57.1.tgz#7df109654aba7e3bbe5c8eae533c5e461d3c6ca9" + integrity sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA== dependencies: "@eslint-community/eslint-utils" "^4.2.0" "@eslint-community/regexpp" "^4.6.1" "@eslint/eslintrc" "^2.1.4" - "@eslint/js" "8.57.0" - "@humanwhocodes/config-array" "^0.11.14" + "@eslint/js" "8.57.1" + "@humanwhocodes/config-array" "^0.13.0" "@humanwhocodes/module-importer" "^1.0.1" "@nodelib/fs.walk" "^1.2.8" "@ungap/structured-clone" "^1.2.0" @@ -3306,9 +3265,9 @@ esprima@^4.0.0: integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== esquery@^1.4.2: - version "1.5.0" - resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.5.0.tgz#6ce17738de8577694edd7361c57182ac8cb0db0b" - integrity sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg== + version "1.6.0" + resolved "https://registry.yarnpkg.com/esquery/-/esquery-1.6.0.tgz#91419234f804d852a82dceec3e16cdc22cf9dae7" + integrity sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg== dependencies: estraverse "^5.1.0" @@ -3334,11 +3293,6 @@ etag@~1.8.1: resolved "https://registry.yarnpkg.com/etag/-/etag-1.8.1.tgz#41ae2eeb65efa62268aebfea83ac7d79299b0887" integrity sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg== -events@^3.0.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/events/-/events-3.3.0.tgz#31a95ad0a924e2d2c419a813aeb2c4e878ea7400" - integrity sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q== - execa@^5.0.0: version "5.1.1" resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd" @@ -3376,36 +3330,36 @@ expect@^29.0.0, expect@^29.7.0: jest-util "^29.7.0" express@^4.17.3: - version "4.19.2" - resolved "https://registry.yarnpkg.com/express/-/express-4.19.2.tgz#e25437827a3aa7f2a827bc8171bbbb664a356465" - integrity sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q== + version "4.21.2" + resolved "https://registry.yarnpkg.com/express/-/express-4.21.2.tgz#cf250e48362174ead6cea4a566abef0162c1ec32" + integrity sha512-28HqgMZAmih1Czt9ny7qr6ek2qddF4FclbMzwhCREB6OFfH+rXAnuNCwo1/wFvrtbgsQDb4kSbX9de9lFbrXnA== dependencies: accepts "~1.3.8" array-flatten "1.1.1" - body-parser "1.20.2" + body-parser "1.20.3" content-disposition "0.5.4" content-type "~1.0.4" - cookie "0.6.0" + cookie "0.7.1" cookie-signature "1.0.6" debug "2.6.9" depd "2.0.0" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" etag "~1.8.1" - finalhandler "1.2.0" + finalhandler "1.3.1" fresh "0.5.2" http-errors "2.0.0" - merge-descriptors "1.0.1" + merge-descriptors "1.0.3" methods "~1.1.2" on-finished "2.4.1" parseurl "~1.3.3" - path-to-regexp "0.1.7" + path-to-regexp "0.1.12" proxy-addr "~2.0.7" - qs "6.11.0" + qs "6.13.0" range-parser "~1.2.1" safe-buffer "5.2.1" - send "0.18.0" - serve-static "1.15.0" + send "0.19.0" + serve-static "1.16.2" setprototypeof "1.2.0" statuses "2.0.1" type-is "~1.6.18" @@ -3423,15 +3377,15 @@ fast-diff@^1.1.2: integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + version "3.3.3" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.3.tgz#d06d585ce8dba90a16b0505c543c3ccfb3aeb818" + integrity sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg== dependencies: "@nodelib/fs.stat" "^2.0.2" "@nodelib/fs.walk" "^1.2.3" glob-parent "^5.1.2" merge2 "^1.3.0" - micromatch "^4.0.4" + micromatch "^4.0.8" fast-json-stable-stringify@^2.0.0, fast-json-stable-stringify@^2.1.0: version "2.1.0" @@ -3444,9 +3398,9 @@ fast-levenshtein@^2.0.6: integrity sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw== fastq@^1.6.0: - version "1.17.1" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.17.1.tgz#2a523f07a4e7b1e81a42b91b8bf2254107753b47" - integrity sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w== + version "1.19.1" + resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.19.1.tgz#d50eaba803c8846a883c16492821ebcd2cda55f5" + integrity sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ== dependencies: reusify "^1.0.4" @@ -3478,13 +3432,13 @@ fill-range@^7.1.1: dependencies: to-regex-range "^5.0.1" -finalhandler@1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.2.0.tgz#7d23fe5731b207b4640e4fcd00aec1f9207a7b32" - integrity sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg== +finalhandler@1.3.1: + version "1.3.1" + resolved "https://registry.yarnpkg.com/finalhandler/-/finalhandler-1.3.1.tgz#0c575f1d1d324ddd1da35ad7ece3df7d19088019" + integrity sha512-6BN9trH7bp3qvnrRyzsBz+g3lZxTNZTbVO2EV1CS0WIcDbawYVdYvGflME/9QP0h0pYlCDBCTjYa9nZzMDpyxQ== dependencies: debug "2.6.9" - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" on-finished "2.4.1" parseurl "~1.3.3" @@ -3527,37 +3481,38 @@ flat@^5.0.2: integrity sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ== flatted@^3.2.9: - version "3.3.1" - resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.1.tgz#21db470729a6734d4997002f439cb308987f567a" - integrity sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw== + version "3.3.3" + resolved "https://registry.yarnpkg.com/flatted/-/flatted-3.3.3.tgz#67c8fad95454a7c7abebf74bb78ee74a44023358" + integrity sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg== follow-redirects@^1.15.6: - version "1.15.6" - resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.6.tgz#7f815c0cda4249c74ff09e95ef97c23b5fd0399b" - integrity sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA== + version "1.15.9" + resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.15.9.tgz#a604fa10e443bf98ca94228d9eebcc2e8a2c8ee1" + integrity sha512-gew4GsXizNgdoRyqmyfMHyAmXsZDk6mHkSxZFCzW9gwlbtOW44CDtYavM+y+72qD/Vq2l550kMF52DT8fOLJqQ== -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== +for-each@^0.3.3, for-each@^0.3.5: + version "0.3.5" + resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.5.tgz#d650688027826920feeb0af747ee7b9421a41d47" + integrity sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg== dependencies: - is-callable "^1.1.3" + is-callable "^1.2.7" foreground-child@^3.1.0: - version "3.3.0" - resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.0.tgz#0ac8644c06e431439f8561db8ecf29a7b5519c77" - integrity sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg== + version "3.3.1" + resolved "https://registry.yarnpkg.com/foreground-child/-/foreground-child-3.3.1.tgz#32e8e9ed1b68a3497befb9ac2b6adf92a638576f" + integrity sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw== dependencies: - cross-spawn "^7.0.0" + cross-spawn "^7.0.6" signal-exit "^4.0.1" form-data@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.0.tgz#93919daeaf361ee529584b9b31664dc12c9fa452" - integrity sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww== + version "4.0.2" + resolved "https://registry.yarnpkg.com/form-data/-/form-data-4.0.2.tgz#35cabbdd30c3ce73deb2c42d3c8d3ed9ca51794c" + integrity sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w== dependencies: asynckit "^0.4.0" combined-stream "^1.0.8" + es-set-tostringtag "^2.1.0" mime-types "^2.1.12" forwarded@0.2.0: @@ -3576,9 +3531,9 @@ fs-constants@^1.0.0: integrity sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow== fs-extra@^11.2.0: - version "11.2.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.2.0.tgz#e70e17dfad64232287d01929399e0ea7c86b0e5b" - integrity sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw== + version "11.3.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.3.0.tgz#0daced136bbaf65a555a326719af931adc7a314d" + integrity sha512-Z4XaCL6dUDHfP/jT25jJKMmtxvuwbkrD1vNSMFlo9lNLY2c5FHYSQgHPRZUjAB26TpDEoW9HCOgplrdbaPV/ew== dependencies: graceful-fs "^4.2.0" jsonfile "^6.0.1" @@ -3599,15 +3554,17 @@ function-bind@^1.1.2: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== +function.prototype.name@^1.1.6, function.prototype.name@^1.1.8: + version "1.1.8" + resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.8.tgz#e68e1df7b259a5c949eeef95cdbde53edffabb78" + integrity sha512-e5iwyodOHhbMr/yNrc7fDYG4qlbIvI5gajyzPnb5TCwyhjApznQh1BMFou9b30SevY43gCJKXycoCBjMbsuW0Q== dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + define-properties "^1.2.1" functions-have-names "^1.2.3" + hasown "^2.0.2" + is-callable "^1.2.7" functions-have-names@^1.2.3: version "1.2.3" @@ -3615,9 +3572,9 @@ functions-have-names@^1.2.3: integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== fuzzysort@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/fuzzysort/-/fuzzysort-3.0.2.tgz#22c84fb8776ad3646d9ac9bae500ee12370c770e" - integrity sha512-ZyahVgxvckB1Qosn7YGWLDJJp2XlyaQ2WmZeI+d0AzW0AMqVYnz5N89G6KAKa6m/LOtv+kzJn4lhDF/yVg11Cg== + version "3.1.0" + resolved "https://registry.yarnpkg.com/fuzzysort/-/fuzzysort-3.1.0.tgz#4d7832d8fa48ad381753eaa7a7aae9927bdc10a8" + integrity sha512-sR9BNCjBg6LNgwvxlBd0sBABvQitkLzoVY9MYYROQVX/FvfJ4Mai9LsGhDgd8qYdds0bY77VzYd5iuB+v5rwQQ== gensync@^1.0.0-beta.2: version "1.0.0-beta.2" @@ -3629,21 +3586,31 @@ get-caller-file@^2.0.5: resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e" integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg== +get-east-asian-width@^1.0.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-east-asian-width/-/get-east-asian-width-1.3.0.tgz#21b4071ee58ed04ee0db653371b55b4299875389" + integrity sha512-vpeMIQKxczTD/0s2CdEWHcb0eeJe6TFjxb+J5xgX7hScxqrGuyjmv4c1D4A/gelKfyox0gJJwIHF+fLjeaM8kQ== + get-func-name@^2.0.1, get-func-name@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/get-func-name/-/get-func-name-2.0.2.tgz#0d7cf20cd13fda808669ffa88f4ffc7a3943fc41" integrity sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ== -get-intrinsic@^1.1.3, get-intrinsic@^1.2.1, get-intrinsic@^1.2.3, get-intrinsic@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.4.tgz#e385f5a4b5227d449c3eabbad05494ef0abbeadd" - integrity sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ== +get-intrinsic@^1.2.4, get-intrinsic@^1.2.5, get-intrinsic@^1.2.6, get-intrinsic@^1.2.7, get-intrinsic@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.3.0.tgz#743f0e3b6964a93a5491ed1bffaae054d7f98d01" + integrity sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ== dependencies: + call-bind-apply-helpers "^1.0.2" + es-define-property "^1.0.1" es-errors "^1.3.0" + es-object-atoms "^1.1.1" function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" + get-proto "^1.0.1" + gopd "^1.2.0" + has-symbols "^1.1.0" + hasown "^2.0.2" + math-intrinsics "^1.1.0" get-package-type@^0.1.0: version "0.1.0" @@ -3655,19 +3622,27 @@ get-port@^6.1.2: resolved "https://registry.yarnpkg.com/get-port/-/get-port-6.1.2.tgz#c1228abb67ba0e17fb346da33b15187833b9c08a" integrity sha512-BrGGraKm2uPqurfGVj/z97/zv8dPleC6x9JBNRTrDNtCkkRF4rPwrQXFgL7+I+q8QSdU4ntLQX2D7KIxSy8nGw== +get-proto@^1.0.0, get-proto@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/get-proto/-/get-proto-1.0.1.tgz#150b3f2743869ef3e851ec0c49d15b1d14d00ee1" + integrity sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g== + dependencies: + dunder-proto "^1.0.1" + es-object-atoms "^1.0.0" + get-stream@^6.0.0: version "6.0.1" resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7" integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg== -get-symbol-description@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.2.tgz#533744d5aa20aca4e079c8e5daf7fd44202821f5" - integrity sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg== +get-symbol-description@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.1.0.tgz#7bdd54e0befe8ffc9f3b4e203220d9f1e881b6ee" + integrity sha512-w9UMqWwJxHNOvoNzSJ2oPF5wvYcvP7jUvYzhp67yEhTi17ZDBBC1z9pTdGuzjD+EFIqLSYRweZjqfiPzQ06Ebg== dependencies: - call-bind "^1.0.5" + call-bound "^1.0.3" es-errors "^1.3.0" - get-intrinsic "^1.2.4" + get-intrinsic "^1.2.6" github-from-package@0.0.0: version "0.0.0" @@ -3689,9 +3664,9 @@ glob-parent@^6.0.2: is-glob "^4.0.3" glob@^11.0.0: - version "11.0.0" - resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.0.tgz#6031df0d7b65eaa1ccb9b29b5ced16cea658e77e" - integrity sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g== + version "11.0.1" + resolved "https://registry.yarnpkg.com/glob/-/glob-11.0.1.tgz#1c3aef9a59d680e611b53dcd24bb8639cef064d9" + integrity sha512-zrQDm8XPnYEKawJScsnM0QzobJxlT/kHOOlRTio8IH/GrmxRE5fjllkzdaHclIuNjUQTJYH2xHNIGfdpJkDJUw== dependencies: foreground-child "^3.1.0" jackspeak "^4.0.1" @@ -3735,7 +3710,7 @@ globals@^13.19.0: dependencies: type-fest "^0.20.2" -globalthis@^1.0.3: +globalthis@^1.0.4: version "1.0.4" resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.4.tgz#7430ed3a975d97bfb59bcce41f5cabbafa651236" integrity sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ== @@ -3755,12 +3730,10 @@ globby@^11.1.0: merge2 "^1.4.1" slash "^3.0.0" -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" +gopd@^1.0.1, gopd@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.2.0.tgz#89f56b8217bdbc8802bd299df6d7f1081d7e51a1" + integrity sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg== graceful-fs@^4.1.2, graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.9: version "4.2.11" @@ -3772,10 +3745,10 @@ graphemer@^1.4.0: resolved "https://registry.yarnpkg.com/graphemer/-/graphemer-1.4.0.tgz#fb2f1d55e0e3a1849aeffc90c4fa0dd53a0e66c6" integrity sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag== -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== +has-bigints@^1.0.2: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.1.0.tgz#28607e965ac967e03cd2a2c70a2636a1edad49fe" + integrity sha512-R3pbpkcIqv2Pm3dUwgjclDRVmWpTJW2DcMzcIhEXEx1oh/CEMObMm3KLmRJOdvhM7o4uQBnwr8pzRK2sJWIqfg== has-flag@^3.0.0: version "3.0.0" @@ -3794,24 +3767,26 @@ has-property-descriptors@^1.0.0, has-property-descriptors@^1.0.2: dependencies: es-define-property "^1.0.0" -has-proto@^1.0.1, has-proto@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.3.tgz#b31ddfe9b0e6e9914536a6ab286426d0214f77fd" - integrity sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q== +has-proto@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.2.0.tgz#5de5a6eabd95fdffd9818b43055e8065e39fe9d5" + integrity sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ== + dependencies: + dunder-proto "^1.0.0" -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== +has-symbols@^1.0.3, has-symbols@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.1.0.tgz#fc9c6a783a084951d0b971fe1018de813707a338" + integrity sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ== -has-tostringtag@^1.0.0, has-tostringtag@^1.0.2: +has-tostringtag@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.2.tgz#2cdc42d40bef2e5b4eeab7c01a73c54ce7ab5abc" integrity sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw== dependencies: has-symbols "^1.0.3" -hasown@^2.0.0, hasown@^2.0.1, hasown@^2.0.2: +hasown@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.2.tgz#003eaf91be7adc372e84ec59dc37252cedb80003" integrity sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ== @@ -3840,15 +3815,15 @@ html-escaper@^2.0.0: resolved "https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453" integrity sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== -htmlparser2@^8.0.1: - version "8.0.2" - resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-8.0.2.tgz#f002151705b383e62433b5cf466f5b716edaec21" - integrity sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA== +htmlparser2@^9.1.0: + version "9.1.0" + resolved "https://registry.yarnpkg.com/htmlparser2/-/htmlparser2-9.1.0.tgz#cdb498d8a75a51f739b61d3f718136c369bc8c23" + integrity sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ== dependencies: domelementtype "^2.3.0" domhandler "^5.0.3" - domutils "^3.0.1" - entities "^4.4.0" + domutils "^3.1.0" + entities "^4.5.0" http-errors@2.0.0: version "2.0.0" @@ -3870,11 +3845,11 @@ http-proxy-agent@^7.0.0, http-proxy-agent@^7.0.2: debug "^4.3.4" https-proxy-agent@^7.0.0, https-proxy-agent@^7.0.5: - version "7.0.5" - resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz#9e8b5013873299e11fab6fd548405da2d6c602b2" - integrity sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw== + version "7.0.6" + resolved "https://registry.yarnpkg.com/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz#da8dfeac7da130b05c2ba4b59c9b6cd66611a6b9" + integrity sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw== dependencies: - agent-base "^7.0.2" + agent-base "^7.1.2" debug "4" human-signals@^2.1.0: @@ -3889,15 +3864,22 @@ iconv-lite@0.4.24: dependencies: safer-buffer ">= 2.1.2 < 3" -ieee754@^1.1.13, ieee754@^1.2.1: +iconv-lite@0.6.3, iconv-lite@^0.6.3: + version "0.6.3" + resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.6.3.tgz#a52f80bf38da1952eb5c681790719871a1a72501" + integrity sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw== + dependencies: + safer-buffer ">= 2.1.2 < 3.0.0" + +ieee754@^1.1.13: version "1.2.1" resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== ignore@^5.2.0, ignore@^5.3.1: - version "5.3.1" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.1.tgz#5073e554cd42c5b33b394375f538b8593e34d4ef" - integrity sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw== + version "5.3.2" + resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.2.tgz#3cd40e729f3643fd87cb04e50bf0eb722bc596f5" + integrity sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g== immediate@~3.0.5: version "3.0.6" @@ -3905,17 +3887,17 @@ immediate@~3.0.5: integrity sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ== import-fresh@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b" - integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw== + version "3.3.1" + resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.1.tgz#9cecb56503c0ada1f2741dbbd6546e4b13b57ccf" + integrity sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ== dependencies: parent-module "^1.0.0" resolve-from "^4.0.0" import-local@^3.0.2: - version "3.1.0" - resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.1.0.tgz#b4479df8a5fd44f6cdce24070675676063c95cb4" - integrity sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg== + version "3.2.0" + resolved "https://registry.yarnpkg.com/import-local/-/import-local-3.2.0.tgz#c3d5c745798c02a6f8b897726aba5100186ee260" + integrity sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA== dependencies: pkg-dir "^4.2.0" resolve-cwd "^3.0.0" @@ -3943,39 +3925,51 @@ ini@~1.3.0: resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c" integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew== -internal-slot@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.7.tgz#c06dcca3ed874249881007b0a5523b172a190802" - integrity sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g== +internal-slot@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.1.0.tgz#1eac91762947d2f7056bc838d93e13b2e9604961" + integrity sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw== dependencies: es-errors "^1.3.0" - hasown "^2.0.0" - side-channel "^1.0.4" + hasown "^2.0.2" + side-channel "^1.1.0" ipaddr.js@1.9.1: version "1.9.1" resolved "https://registry.yarnpkg.com/ipaddr.js/-/ipaddr.js-1.9.1.tgz#bff38543eeb8984825079ff3a2a8e6cbd46781b3" integrity sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g== -is-array-buffer@^3.0.4: - version "3.0.4" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.4.tgz#7a1f92b3d61edd2bc65d24f130530ea93d7fae98" - integrity sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw== +is-array-buffer@^3.0.4, is-array-buffer@^3.0.5: + version "3.0.5" + resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.5.tgz#65742e1e687bd2cc666253068fd8707fe4d44280" + integrity sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A== dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" + call-bind "^1.0.8" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" is-arrayish@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg== -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== +is-async-function@^2.0.0: + version "2.1.1" + resolved "https://registry.yarnpkg.com/is-async-function/-/is-async-function-2.1.1.tgz#3e69018c8e04e73b738793d020bfe884b9fd3523" + integrity sha512-9dgM/cZBnNvjzaMYHVoxxfPj2QXt22Ev7SuuPrs+xav0ukGB0S6d4ydZdEiM48kLx5kDV+QBPrpVnFyefL8kkQ== + dependencies: + async-function "^1.0.0" + call-bound "^1.0.3" + get-proto "^1.0.1" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + +is-bigint@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.1.0.tgz#dda7a3445df57a42583db4228682eba7c4170672" + integrity sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ== dependencies: - has-bigints "^1.0.1" + has-bigints "^1.0.2" is-binary-path@~2.1.0: version "2.1.0" @@ -3984,50 +3978,60 @@ is-binary-path@~2.1.0: dependencies: binary-extensions "^2.0.0" -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== +is-boolean-object@^1.2.1: + version "1.2.2" + resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.2.2.tgz#7067f47709809a393c71ff5bb3e135d8a9215d9e" + integrity sha512-wa56o2/ElJMYqjCjGkXri7it5FbebW5usLw/nPmCMs5DeZ7eziSYZhSmPRn0txqeW4LnAmQQU7FgqLpsEFKM4A== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: +is-callable@^1.2.7: version "1.2.7" resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== -is-core-module@^2.13.0, is-core-module@^2.13.1: - version "2.14.0" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.14.0.tgz#43b8ef9f46a6a08888db67b1ffd4ec9e3dfd59d1" - integrity sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A== +is-core-module@^2.13.0, is-core-module@^2.15.1, is-core-module@^2.16.0: + version "2.16.1" + resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.16.1.tgz#2a98801a849f43e2add644fbb6bc6229b19a4ef4" + integrity sha512-UfoeMA6fIJ8wTYFEUjelnaGI67v6+N7qXJEvQuIGa99l4xsCruSYOVSQ0uPANn4dAzm8lkYPaKLrrijLq7x23w== dependencies: hasown "^2.0.2" -is-data-view@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.1.tgz#4b4d3a511b70f3dc26d42c03ca9ca515d847759f" - integrity sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w== +is-data-view@^1.0.1, is-data-view@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/is-data-view/-/is-data-view-1.0.2.tgz#bae0a41b9688986c2188dda6657e56b8f9e63b8e" + integrity sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw== dependencies: + call-bound "^1.0.2" + get-intrinsic "^1.2.6" is-typed-array "^1.1.13" -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== +is-date-object@^1.0.5, is-date-object@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.1.0.tgz#ad85541996fc7aa8b2729701d27b7319f95d82f7" + integrity sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + has-tostringtag "^1.0.2" -is-docker@^2.0.0, is-docker@^2.1.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.2.1.tgz#33eeabe23cfe86f14bde4408a02c0cfb853acdaa" - integrity sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ== +is-docker@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-3.0.0.tgz#90093aa3106277d8a77a5910dbae71747e15a200" + integrity sha512-eljcgEDlEns/7AXFosB5K/2nCM4P7FQPkGc/DWLy5rmFEWvZayGrik1d9/QIY5nJ4f9YsVvBkA6kJpHn9rISdQ== is-extglob@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== +is-finalizationregistry@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz#eefdcdc6c94ddd0674d9c85887bf93f944a97c90" + integrity sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg== + dependencies: + call-bound "^1.0.3" + is-fullwidth-code-point@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" @@ -4038,6 +4042,16 @@ is-generator-fn@^2.0.0: resolved "https://registry.yarnpkg.com/is-generator-fn/-/is-generator-fn-2.1.0.tgz#7d140adc389aaf3011a8f2a2a4cfa6faadffb118" integrity sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ== +is-generator-function@^1.0.10: + version "1.1.0" + resolved "https://registry.yarnpkg.com/is-generator-function/-/is-generator-function-1.1.0.tgz#bf3eeda931201394f57b5dba2800f91a238309ca" + integrity sha512-nPUB5km40q9e8UfN/Zc24eLlzdSf9OfKByBw9CIdw4H1giPMeA0OIJvbchsCu4npfI2QcMVBsGEBHKZ7wLTWmQ== + dependencies: + call-bound "^1.0.3" + get-proto "^1.0.0" + has-tostringtag "^1.0.2" + safe-regex-test "^1.1.0" + is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" @@ -4045,22 +4059,30 @@ is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3, is-glob@~4.0.1: dependencies: is-extglob "^2.1.1" +is-inside-container@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/is-inside-container/-/is-inside-container-1.0.0.tgz#e81fba699662eb31dbdaf26766a61d4814717ea4" + integrity sha512-KIYLCCJghfHZxqjYBE7rEy0OBuTd5xCHS7tHVgvCLkx7StIoaxwNW3hCALgEUjFfeRk+MG/Qxmp/vtETEF3tRA== + dependencies: + is-docker "^3.0.0" + is-interactive@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-interactive/-/is-interactive-2.0.0.tgz#40c57614593826da1100ade6059778d597f16e90" integrity sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ== -is-negative-zero@^2.0.3: +is-map@^2.0.3: version "2.0.3" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.3.tgz#ced903a027aca6381b777a5743069d7376a49747" - integrity sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw== + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.3.tgz#ede96b7fe1e270b3c4465e3a465658764926d62e" + integrity sha512-1Qed0/Hr2m+YqxnM09CjA2d/i6YZNfF6R2oRAOj36eUdS6qIV/huPJNSEpKbupewFs+ZsJlxsjjPbc0/afW6Lw== -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== +is-number-object@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.1.1.tgz#144b21e95a1bc148205dcc2814a9134ec41b2541" + integrity sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" is-number@^7.0.0: version "7.0.0" @@ -4077,70 +4099,98 @@ is-plain-obj@^2.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-2.1.0.tgz#45e42e37fccf1f40da8e5f76ee21515840c09287" integrity sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA== -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== +is-regex@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.2.1.tgz#76d70a3ed10ef9be48eb577887d74205bf0cad22" + integrity sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g== dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" + call-bound "^1.0.2" + gopd "^1.2.0" + has-tostringtag "^1.0.2" + hasown "^2.0.2" -is-shared-array-buffer@^1.0.2, is-shared-array-buffer@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz#1237f1cba059cdb62431d378dcc37d9680181688" - integrity sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg== +is-set@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.3.tgz#8ab209ea424608141372ded6e0cb200ef1d9d01d" + integrity sha512-iPAjerrse27/ygGLxw+EBR9agv9Y6uLeYVJMu+QNCoouJ1/1ri0mGrcWpfCqFZuzzx3WjtwxG098X+n4OuRkPg== + +is-shared-array-buffer@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.4.tgz#9b67844bd9b7f246ba0708c3a93e34269c774f6f" + integrity sha512-ISWac8drv4ZGfwKl5slpHG9OwPNty4jOWPRIhBpxOoD+hqITiwuipOQ2bNthAzwA3B4fIjO4Nln74N0S9byq8A== dependencies: - call-bind "^1.0.7" + call-bound "^1.0.3" is-stream@^2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== +is-string@^1.0.7, is-string@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.1.1.tgz#92ea3f3d5c5b6e039ca8677e5ac8d07ea773cbb9" + integrity sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA== dependencies: - has-tostringtag "^1.0.0" + call-bound "^1.0.3" + has-tostringtag "^1.0.2" -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== +is-symbol@^1.0.4, is-symbol@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.1.1.tgz#f47761279f532e2b05a7024a7506dbbedacd0634" + integrity sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w== dependencies: - has-symbols "^1.0.2" + call-bound "^1.0.2" + has-symbols "^1.1.0" + safe-regex-test "^1.1.0" -is-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.13.tgz#d6c5ca56df62334959322d7d7dd1cca50debe229" - integrity sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw== +is-typed-array@^1.1.13, is-typed-array@^1.1.14, is-typed-array@^1.1.15: + version "1.1.15" + resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.15.tgz#4bfb4a45b61cee83a5a46fba778e4e8d59c0ce0b" + integrity sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ== dependencies: - which-typed-array "^1.1.14" + which-typed-array "^1.1.16" is-unicode-supported@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== -is-unicode-supported@^1.1.0, is-unicode-supported@^1.3.0: +is-unicode-supported@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz#d824984b616c292a2e198207d4a609983842f714" integrity sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ== -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== +is-unicode-supported@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-2.1.0.tgz#09f0ab0de6d3744d48d265ebb98f65d11f2a9b3a" + integrity sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ== + +is-weakmap@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.2.tgz#bf72615d649dfe5f699079c54b83e47d1ae19cfd" + integrity sha512-K5pXYOm9wqY1RgjpL3YTkF39tni1XajUIkawTLUo9EZEVUFga5gSQJF8nNS7ZwJQ02y+1YCNYcMh+HIf1ZqE+w== + +is-weakref@^1.0.2, is-weakref@^1.1.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.1.1.tgz#eea430182be8d64174bd96bffbc46f21bf3f9293" + integrity sha512-6i9mGWSlqzNMEqpCp93KwRS1uUOodk2OJ6b+sq7ZPDSy2WuI5NFIxp/254TytR8ftefexkWn5xNiHUNpPOfSew== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" -is-wsl@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-2.2.0.tgz#74a4c76e77ca9fd3f932f290c17ea326cd157271" - integrity sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww== +is-weakset@^2.0.3: + version "2.0.4" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.4.tgz#c9f5deb0bc1906c6d6f1027f284ddf459249daca" + integrity sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ== dependencies: - is-docker "^2.0.0" + call-bound "^1.0.3" + get-intrinsic "^1.2.6" + +is-wsl@^3.1.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-3.1.0.tgz#e1c657e39c10090afcbedec61720f6b924c3cbd2" + integrity sha512-UcVfVfaK4Sc4m7X3dUSoHoozQGBEFeDC+zVo06t98xe8CzHSZZBekNXH+tu0NalHolcJ/QAGqS46Hef7QXBIMw== + dependencies: + is-inside-container "^1.0.0" isarray@^2.0.5: version "2.0.5" @@ -4211,9 +4261,9 @@ istanbul-reports@^3.1.3: istanbul-lib-report "^3.0.0" jackspeak@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.0.2.tgz#11f9468a3730c6ff6f56823a820d7e3be9bef015" - integrity sha512-bZsjR/iRjl1Nk1UkjGpAzLNfQtzuijhn2g+pbZb98HQ1Gk8vM9hfbxeMBP+M2/UUdwj0RqGG3mlvk2MsAqwvEw== + version "4.1.0" + resolved "https://registry.yarnpkg.com/jackspeak/-/jackspeak-4.1.0.tgz#c489c079f2b636dc4cbe9b0312a13ff1282e561b" + integrity sha512-9DDdhb5j6cpeitCbvLO7n7J4IxnbM6hoF6O1g4HQ5TfhvvKN8ywDM7668ZhMHRqVmxqhps/F6syWK2KcPxYlkw== dependencies: "@isaacs/cliui" "^8.0.2" @@ -4595,15 +4645,15 @@ js-yaml@^4.1.0: dependencies: argparse "^2.0.1" -jsesc@^2.5.1: - version "2.5.2" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" - integrity sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA== +jsesc@^3.0.2: + version "3.1.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.1.0.tgz#74d335a234f67ed19907fdadfac7ccf9d409825d" + integrity sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA== -jsesc@~0.5.0: - version "0.5.0" - resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-0.5.0.tgz#e7dee66e35d6fc16f710fe91d5cf69f70f08911d" - integrity sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA== +jsesc@~3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-3.0.2.tgz#bb8b09a6597ba426425f2e4a07245c3d00b9343e" + integrity sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g== json-buffer@3.0.1: version "3.0.1" @@ -4691,15 +4741,6 @@ jwa@^1.4.1: ecdsa-sig-formatter "1.0.11" safe-buffer "^5.0.1" -jwa@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jwa/-/jwa-2.0.0.tgz#a7e9c3f29dae94027ebcaf49975c9345593410fc" - integrity sha512-jrZ2Qx916EA+fq9cEAeCROWPTfCwi1IVHqT2tapuqLEVVDKFDENFw1oL+MwrTvH6msKxsd1YTDVw6uKEcsrLEA== - dependencies: - buffer-equal-constant-time "1.0.1" - ecdsa-sig-formatter "1.0.11" - safe-buffer "^5.0.1" - jws@^3.2.2: version "3.2.2" resolved "https://registry.yarnpkg.com/jws/-/jws-3.2.2.tgz#001099f3639468c9414000e99995fa52fb478304" @@ -4708,14 +4749,6 @@ jws@^3.2.2: jwa "^1.4.1" safe-buffer "^5.0.1" -jws@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jws/-/jws-4.0.0.tgz#2d4e8cf6a318ffaa12615e9dec7e86e6c97310f4" - integrity sha512-KDncfTmOZoOMTFG4mBlG0qUIOlc03fmzH+ru6RgYVZhPkyiy/92Owlt/8UEN+a4TXR1FQetfIpJE8ApdvdVxTg== - dependencies: - jwa "^2.0.0" - safe-buffer "^5.0.1" - keytar@^7.7.0: version "7.9.0" resolved "https://registry.yarnpkg.com/keytar/-/keytar-7.9.0.tgz#4c6225708f51b50cbf77c5aae81721964c2918cb" @@ -4845,13 +4878,13 @@ log-symbols@^4.1.0: chalk "^4.1.0" is-unicode-supported "^0.1.0" -log-symbols@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-5.1.0.tgz#a20e3b9a5f53fac6aeb8e2bb22c07cf2c8f16d93" - integrity sha512-l0x2DvrW294C9uDCoQe1VSU4gf529FkSZ6leBl4TiqZH/e+0R7hSfHQBNut2mNygDgHwvYHfFLn6Oxb3VWj2rA== +log-symbols@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-6.0.0.tgz#bb95e5f05322651cac30c0feb6404f9f2a8a9439" + integrity sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw== dependencies: - chalk "^5.0.0" - is-unicode-supported "^1.1.0" + chalk "^5.3.0" + is-unicode-supported "^1.3.0" loupe@^2.3.6: version "2.3.7" @@ -4861,9 +4894,9 @@ loupe@^2.3.6: get-func-name "^2.0.1" lru-cache@^11.0.0: - version "11.0.2" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.0.2.tgz#fbd8e7cf8211f5e7e5d91905c415a3f55755ca39" - integrity sha512-123qHRfJBmo2jXDbo/a5YOQrJoHF/GNQTLzQ5+IdK5pWpceK17yRc6ozlWd25FxvGKQbIUs91fDFkXmDHTKcyA== + version "11.1.0" + resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-11.1.0.tgz#afafb060607108132dbc1cf8ae661afb69486117" + integrity sha512-QIXZUBJUx+2zHUdQujWejBkcD9+cs94tLn0+YL8UrCh+D5sCXZ4c7LaEH48pNwRY3MLDgqUFyhlCyjJPf1WP0A== lru-cache@^5.1.1: version "5.1.1" @@ -4904,6 +4937,11 @@ markdown-it@^12.3.2: mdurl "^1.0.1" uc.micro "^1.0.5" +math-intrinsics@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/math-intrinsics/-/math-intrinsics-1.1.0.tgz#a0dd74be81e2aa5c2f27e65ce283605ee4e2b7f9" + integrity sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g== + mdurl@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/mdurl/-/mdurl-1.0.1.tgz#fe85b2ec75a59037f2adfec100fd6c601761152e" @@ -4919,10 +4957,10 @@ memorystream@^0.3.1: resolved "https://registry.yarnpkg.com/memorystream/-/memorystream-0.3.1.tgz#86d7090b30ce455d63fbae12dda51a47ddcaf9b2" integrity sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw== -merge-descriptors@1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" - integrity sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w== +merge-descriptors@1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.3.tgz#d80319a65f3c7935351e5cfdac8f9318504dbed5" + integrity sha512-gaNvAS7TZ897/rVaZ0nMtAyxNyi/pdbjbAwUpFQpN70GqnVfOiXpeUUMKRBmzXaSQ8DdTX4/0ms62r2K+hE6mQ== merge-stream@^2.0.0: version "2.0.0" @@ -4939,10 +4977,10 @@ methods@~1.1.2: resolved "https://registry.yarnpkg.com/methods/-/methods-1.1.2.tgz#5529a4d67654134edcc5266656835b0f851afcee" integrity sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w== -micromatch@^4.0.4: - version "4.0.7" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.7.tgz#33e8190d9fe474a9895525f5618eee136d46c2e5" - integrity sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q== +micromatch@^4.0.4, micromatch@^4.0.8: + version "4.0.8" + resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202" + integrity sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA== dependencies: braces "^3.0.3" picomatch "^2.3.1" @@ -4969,6 +5007,11 @@ mimic-fn@^2.1.0: resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== +mimic-function@^5.0.0: + version "5.0.1" + resolved "https://registry.yarnpkg.com/mimic-function/-/mimic-function-5.0.1.tgz#acbe2b3349f99b9deaca7fb70e48b83e94e67076" + integrity sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA== + mimic-response@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-3.1.0.tgz#2d1d59af9c1b129815accc2c46a022a5ce1fa3c9" @@ -5061,11 +5104,6 @@ ms@2.0.0: resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" integrity sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A== -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - ms@2.1.3, ms@^2.1.1, ms@^2.1.3: version "2.1.3" resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" @@ -5076,10 +5114,10 @@ mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -napi-build-utils@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-1.0.2.tgz#b1fddc0b2c46e380a0b7a76f984dd47c41a13806" - integrity sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg== +napi-build-utils@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/napi-build-utils/-/napi-build-utils-2.0.0.tgz#13c22c0187fcfccce1461844136372a47ddc027e" + integrity sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA== natural-compare@^1.4.0: version "1.4.0" @@ -5097,9 +5135,9 @@ nice-try@^1.0.4: integrity sha512-1nh45deeb5olNY7eX82BkPO7SSxR5SSYJiPTrTdFUVYwAl8CKMA5N9PjTYkHiRjisVcxcQ1HXdLhx2qxxJzLNQ== node-abi@^3.3.0: - version "3.65.0" - resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.65.0.tgz#ca92d559388e1e9cab1680a18c1a18757cdac9d3" - integrity sha512-ThjYBfoDNr08AWx6hGaRbfPwxKV9kVzAzOzlLKbk2CuqXE2xnCh+cbAGnwM3t8Lq4v9rUB7VfondlkBckcJrVA== + version "3.74.0" + resolved "https://registry.yarnpkg.com/node-abi/-/node-abi-3.74.0.tgz#5bfb4424264eaeb91432d2adb9da23c63a301ed0" + integrity sha512-c5XK0MjkGBrQPGYG24GBADZud0NCbznxNx0ZkS+ebUTrmV1qTDxPxSL8zEAPURXSbLRWVexxmP4986BziahL5w== dependencies: semver "^7.3.5" @@ -5113,10 +5151,10 @@ node-int64@^0.4.0: resolved "https://registry.yarnpkg.com/node-int64/-/node-int64-0.4.0.tgz#87a9065cdb355d3182d8f94ce11188b825c68a3b" integrity sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw== -node-releases@^2.0.14: - version "2.0.14" - resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.14.tgz#2ffb053bceb8b2be8495ece1ab6ce600c4461b0b" - integrity sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw== +node-releases@^2.0.19: + version "2.0.19" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-2.0.19.tgz#9e445a52950951ec4d177d843af370b411caf314" + integrity sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw== normalize-package-data@^2.3.2: version "2.5.0" @@ -5162,27 +5200,29 @@ nth-check@^2.0.1: dependencies: boolbase "^1.0.0" -object-inspect@^1.13.1: - version "1.13.2" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.2.tgz#dea0088467fb991e67af4058147a24824a3043ff" - integrity sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g== +object-inspect@^1.13.3: + version "1.13.4" + resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.4.tgz#8375265e21bc20d0fa582c22e1b13485d6e00213" + integrity sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew== object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== -object.assign@^4.1.5: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== +object.assign@^4.1.7: + version "4.1.7" + resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.7.tgz#8c14ca1a424c6a561b0bb2a22f66f5049a945d3d" + integrity sha512-nK28WOo+QIjBkDduTINE4JkF/UJJKyf2EJxvJKfblDpyg0Q+pkOHNTL0Qwy6NP6FhE/EnzV73BxxqcJaXY9anw== dependencies: - call-bind "^1.0.5" + call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" - has-symbols "^1.0.3" + es-object-atoms "^1.0.0" + has-symbols "^1.1.0" object-keys "^1.1.1" -object.fromentries@^2.0.7: +object.fromentries@^2.0.8: version "2.0.8" resolved "https://registry.yarnpkg.com/object.fromentries/-/object.fromentries-2.0.8.tgz#f7195d8a9b97bd95cbc1999ea939ecd1a2b00c65" integrity sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ== @@ -5192,7 +5232,7 @@ object.fromentries@^2.0.7: es-abstract "^1.23.2" es-object-atoms "^1.0.0" -object.groupby@^1.0.1: +object.groupby@^1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/object.groupby/-/object.groupby-1.0.3.tgz#9b125c36238129f6f7b61954a1e7176148d5002e" integrity sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ== @@ -5201,12 +5241,13 @@ object.groupby@^1.0.1: define-properties "^1.2.1" es-abstract "^1.23.2" -object.values@^1.1.7: - version "1.2.0" - resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.0.tgz#65405a9d92cee68ac2d303002e0b8470a4d9ab1b" - integrity sha512-yBYjY9QX2hnRmZHAjG/f13MzmBzxzYgQhFrke06TTyKY5zSTEqkOeukBzIdVA3j3ulu8Qa3MbVFShV7T2RmGtQ== +object.values@^1.2.0: + version "1.2.1" + resolved "https://registry.yarnpkg.com/object.values/-/object.values-1.2.1.tgz#deed520a50809ff7f75a7cfd4bc64c7a038c6216" + integrity sha512-gXah6aZrcUxjWg2zR2MwouP2eHlCBzdV4pygudehaKXSGW4v2AsRQUK+lwwXhii6KFZcunEnmSUoYp5CXibxtA== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.3" define-properties "^1.2.1" es-object-atoms "^1.0.0" @@ -5224,21 +5265,29 @@ once@^1.3.0, once@^1.3.1, once@^1.4.0: dependencies: wrappy "1" -onetime@^5.1.0, onetime@^5.1.2: +onetime@^5.1.2: version "5.1.2" resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== dependencies: mimic-fn "^2.1.0" -open@^8.0.0: - version "8.4.2" - resolved "https://registry.yarnpkg.com/open/-/open-8.4.2.tgz#5b5ffe2a8f793dcd2aad73e550cb87b59cb084f9" - integrity sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ== +onetime@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-7.0.0.tgz#9f16c92d8c9ef5120e3acd9dd9957cceecc1ab60" + integrity sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ== dependencies: - define-lazy-prop "^2.0.0" - is-docker "^2.1.1" - is-wsl "^2.2.0" + mimic-function "^5.0.0" + +open@^10.1.0: + version "10.1.1" + resolved "https://registry.yarnpkg.com/open/-/open-10.1.1.tgz#5fd814699e47ae3e1a09962d39f4f4441cae6c22" + integrity sha512-zy1wx4+P3PfhXSEPJNtZmJXfhkkIaxU1VauWIrDZw1O7uJRDRJtKr9n3Ic4NgbA16KyOxOXO2ng9gYwCdXuSXA== + dependencies: + default-browser "^5.2.1" + define-lazy-prop "^3.0.0" + is-inside-container "^1.0.0" + is-wsl "^3.1.0" optionator@^0.9.3: version "0.9.4" @@ -5252,21 +5301,30 @@ optionator@^0.9.3: type-check "^0.4.0" word-wrap "^1.2.5" -ora@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/ora/-/ora-7.0.1.tgz#cdd530ecd865fe39e451a0e7697865669cb11930" - integrity sha512-0TUxTiFJWv+JnjWm4o9yvuskpEJLXTcng8MJuKd+SzAzp2o+OP3HWqNhB4OdJRt1Vsd9/mR0oyaEYlOnL7XIRw== +ora@^8.1.0: + version "8.2.0" + resolved "https://registry.yarnpkg.com/ora/-/ora-8.2.0.tgz#8fbbb7151afe33b540dd153f171ffa8bd38e9861" + integrity sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw== dependencies: chalk "^5.3.0" - cli-cursor "^4.0.0" - cli-spinners "^2.9.0" + cli-cursor "^5.0.0" + cli-spinners "^2.9.2" is-interactive "^2.0.0" - is-unicode-supported "^1.3.0" - log-symbols "^5.1.0" - stdin-discarder "^0.1.0" - string-width "^6.1.0" + is-unicode-supported "^2.0.0" + log-symbols "^6.0.0" + stdin-discarder "^0.2.2" + string-width "^7.2.0" strip-ansi "^7.1.0" +own-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/own-keys/-/own-keys-1.0.1.tgz#e4006910a2bf913585289676eebd6f390cf51358" + integrity sha512-qFOyK5PjiWZd+QQIh+1jhdb9LpxTF0qs7Pm8o5QHYZ0M3vKqSqzsZaEB6oWlxZ+q2sJBMI/Ktgd2N5ZwQoRHfg== + dependencies: + get-intrinsic "^1.2.6" + object-keys "^1.1.1" + safe-push-apply "^1.0.0" + p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" @@ -5343,19 +5401,26 @@ parse-semver@^1.1.1: semver "^5.1.0" parse5-htmlparser2-tree-adapter@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz#23c2cc233bcf09bb7beba8b8a69d46b08c62c2f1" - integrity sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g== + version "7.1.0" + resolved "https://registry.yarnpkg.com/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.1.0.tgz#b5a806548ed893a43e24ccb42fbb78069311e81b" + integrity sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g== dependencies: - domhandler "^5.0.2" + domhandler "^5.0.3" parse5 "^7.0.0" -parse5@^7.0.0, parse5@^7.1.2: +parse5-parser-stream@^7.1.2: version "7.1.2" - resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.1.2.tgz#0736bebbfd77793823240a23b7fc5e010b7f8e32" - integrity sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw== + resolved "https://registry.yarnpkg.com/parse5-parser-stream/-/parse5-parser-stream-7.1.2.tgz#d7c20eadc37968d272e2c02660fff92dd27e60e1" + integrity sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow== dependencies: - entities "^4.4.0" + parse5 "^7.0.0" + +parse5@^7.0.0, parse5@^7.1.2: + version "7.2.1" + resolved "https://registry.yarnpkg.com/parse5/-/parse5-7.2.1.tgz#8928f55915e6125f430cc44309765bf17556a33a" + integrity sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ== + dependencies: + entities "^4.5.0" parseurl@~1.3.3: version "1.3.3" @@ -5395,10 +5460,10 @@ path-scurry@^2.0.0: lru-cache "^11.0.0" minipass "^7.1.2" -path-to-regexp@0.1.7: - version "0.1.7" - resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.7.tgz#df604178005f522f15eb4490e7247a1bfaa67f8c" - integrity sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ== +path-to-regexp@0.1.12: + version "0.1.12" + resolved "https://registry.yarnpkg.com/path-to-regexp/-/path-to-regexp-0.1.12.tgz#d5e1a12e478a976d432ef3c58d534b9923164bb7" + integrity sha512-RA1GjUVMnvYFxuqovrEqZoxxW5NUZqbwKtYz/Tt7nXerk0LbLblQmrsgdeOxV5SFHf0UDggjS/bSeOZwt1pmEQ== path-type@^3.0.0: version "3.0.0" @@ -5422,10 +5487,10 @@ pend@~1.2.0: resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== -picocolors@^1.0.0, picocolors@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.1.tgz#a8ad579b571952f0e5d25892de5445bcfe25aaa1" - integrity sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew== +picocolors@^1.0.0, picocolors@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.1.1.tgz#3d321af3eab939b083c8f929a1d12cda81c26b6b" + integrity sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA== picomatch@^2.0.4, picomatch@^2.2.1, picomatch@^2.2.3, picomatch@^2.3.1: version "2.3.1" @@ -5443,9 +5508,9 @@ pify@^3.0.0: integrity sha512-C3FsVNH1udSEX48gGX1xfvwTWfsYWj5U+8/uK15BGzIGrKoUpghX8hWZwa/OFnakBiiVNmBvemTJR5mcy7iPcg== pirates@^4.0.4: - version "4.0.6" - resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.6.tgz#3018ae32ecfcff6c29ba2267cbf21166ac1f36b9" - integrity sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg== + version "4.0.7" + resolved "https://registry.yarnpkg.com/pirates/-/pirates-4.0.7.tgz#643b4a18c4257c8a65104b73f3049ce9a0a15e22" + integrity sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA== pkg-dir@^4.2.0: version "4.2.0" @@ -5455,21 +5520,21 @@ pkg-dir@^4.2.0: find-up "^4.0.0" possible-typed-array-names@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz#89bb63c6fada2c3e90adc4a647beeeb39cc7bf8f" - integrity sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q== + version "1.1.0" + resolved "https://registry.yarnpkg.com/possible-typed-array-names/-/possible-typed-array-names-1.1.0.tgz#93e3582bc0e5426586d9d07b79ee40fc841de4ae" + integrity sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg== prebuild-install@^7.0.1: - version "7.1.2" - resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.2.tgz#a5fd9986f5a6251fbc47e1e5c65de71e68c0a056" - integrity sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ== + version "7.1.3" + resolved "https://registry.yarnpkg.com/prebuild-install/-/prebuild-install-7.1.3.tgz#d630abad2b147443f20a212917beae68b8092eec" + integrity sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug== dependencies: detect-libc "^2.0.0" expand-template "^2.0.3" github-from-package "0.0.0" minimist "^1.2.3" mkdirp-classic "^0.5.3" - napi-build-utils "^1.0.1" + napi-build-utils "^2.0.0" node-abi "^3.3.0" pump "^3.0.0" rc "^1.2.7" @@ -5490,9 +5555,9 @@ prettier-linter-helpers@^1.0.0: fast-diff "^1.1.2" prettier@^3.3.2: - version "3.3.2" - resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.3.2.tgz#03ff86dc7c835f2d2559ee76876a3914cec4a90a" - integrity sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA== + version "3.5.3" + resolved "https://registry.yarnpkg.com/prettier/-/prettier-3.5.3.tgz#4fc2ce0d657e7a02e602549f053b239cb7dfe1b5" + integrity sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw== pretty-format@^29.0.0, pretty-format@^29.7.0: version "29.7.0" @@ -5530,9 +5595,9 @@ proxy-from-env@^1.1.0: integrity sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg== pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + version "3.0.2" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.2.tgz#836f3edd6bc2ee599256c924ffe0d88573ddcbf8" + integrity sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw== dependencies: end-of-stream "^1.1.0" once "^1.3.1" @@ -5547,19 +5612,19 @@ pure-rand@^6.0.0: resolved "https://registry.yarnpkg.com/pure-rand/-/pure-rand-6.1.0.tgz#d173cf23258231976ccbdb05247c9787957604f2" integrity sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA== -qs@6.11.0: - version "6.11.0" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.11.0.tgz#fd0d963446f7a65e1367e01abd85429453f0c37a" - integrity sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q== +qs@6.13.0: + version "6.13.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.13.0.tgz#6ca3bd58439f7e245655798997787b0d88a51906" + integrity sha512-+38qI9SOr8tfZ4QmJNplMUxqjbe7LKvvZgWdExBOmd+egZTtjLB67Gu0HRX3u/XOq7UU2Nx6nsjvS16Z9uwfpg== dependencies: - side-channel "^1.0.4" + side-channel "^1.0.6" qs@^6.9.1: - version "6.12.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.12.2.tgz#5443b587f3bf73ac68968de491e5b25bafe04478" - integrity sha512-x+NLUpx9SYrcwXtX7ob1gnkSems4i/mGZX5SlYxwIau6RrUSODO89TR/XDGGpn5RPWSYIB+aSfuSlV5+CmbTBg== + version "6.14.0" + resolved "https://registry.yarnpkg.com/qs/-/qs-6.14.0.tgz#c63fa40680d2c5c941412a0e899c89af60c0a930" + integrity sha512-YWWTjgABSKcvs/nWBi9PycY/JiPJqOD4JA6o9Sej2AtvSGarXxKC3OQSk4pAarbdQlKAh5D4FCQkJNkW+GAn3w== dependencies: - side-channel "^1.0.6" + side-channel "^1.1.0" queue-microtask@^1.2.2: version "1.2.3" @@ -5648,10 +5713,24 @@ readdirp@~3.6.0: dependencies: picomatch "^2.2.1" -regenerate-unicode-properties@^10.1.0: - version "10.1.1" - resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.1.1.tgz#6b0e05489d9076b04c436f318d9b067bba459480" - integrity sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q== +reflect.getprototypeof@^1.0.6, reflect.getprototypeof@^1.0.9: + version "1.0.10" + resolved "https://registry.yarnpkg.com/reflect.getprototypeof/-/reflect.getprototypeof-1.0.10.tgz#c629219e78a3316d8b604c765ef68996964e7bf9" + integrity sha512-00o4I+DVrefhv+nX0ulyi3biSHCPDe+yLv5o/p6d/UVlirijB8E16FtfwSAi4g3tcqrQ4lRAqQSoFEZJehYEcw== + dependencies: + call-bind "^1.0.8" + define-properties "^1.2.1" + es-abstract "^1.23.9" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + get-intrinsic "^1.2.7" + get-proto "^1.0.1" + which-builtin-type "^1.2.1" + +regenerate-unicode-properties@^10.2.0: + version "10.2.0" + resolved "https://registry.yarnpkg.com/regenerate-unicode-properties/-/regenerate-unicode-properties-10.2.0.tgz#626e39df8c372338ea9b8028d1f99dc3fd9c3db0" + integrity sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA== dependencies: regenerate "^1.4.2" @@ -5672,34 +5751,41 @@ regenerator-transform@^0.15.2: dependencies: "@babel/runtime" "^7.8.4" -regexp.prototype.flags@^1.5.2: - version "1.5.2" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.2.tgz#138f644a3350f981a858c44f6bb1a61ff59be334" - integrity sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw== +regexp.prototype.flags@^1.5.3: + version "1.5.4" + resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.4.tgz#1ad6c62d44a259007e55b3970e00f746efbcaa19" + integrity sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA== dependencies: - call-bind "^1.0.6" + call-bind "^1.0.8" define-properties "^1.2.1" es-errors "^1.3.0" - set-function-name "^2.0.1" + get-proto "^1.0.1" + gopd "^1.2.0" + set-function-name "^2.0.2" -regexpu-core@^5.3.1: - version "5.3.2" - resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-5.3.2.tgz#11a2b06884f3527aec3e93dbbf4a3b958a95546b" - integrity sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ== +regexpu-core@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-6.2.0.tgz#0e5190d79e542bf294955dccabae04d3c7d53826" + integrity sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA== dependencies: - "@babel/regjsgen" "^0.8.0" regenerate "^1.4.2" - regenerate-unicode-properties "^10.1.0" - regjsparser "^0.9.1" + regenerate-unicode-properties "^10.2.0" + regjsgen "^0.8.0" + regjsparser "^0.12.0" unicode-match-property-ecmascript "^2.0.0" unicode-match-property-value-ecmascript "^2.1.0" -regjsparser@^0.9.1: - version "0.9.1" - resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.9.1.tgz#272d05aa10c7c1f67095b1ff0addae8442fc5709" - integrity sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ== +regjsgen@^0.8.0: + version "0.8.0" + resolved "https://registry.yarnpkg.com/regjsgen/-/regjsgen-0.8.0.tgz#df23ff26e0c5b300a6470cad160a9d090c3a37ab" + integrity sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q== + +regjsparser@^0.12.0: + version "0.12.0" + resolved "https://registry.yarnpkg.com/regjsparser/-/regjsparser-0.12.0.tgz#0e846df6c6530586429377de56e0475583b088dc" + integrity sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ== dependencies: - jsesc "~0.5.0" + jsesc "~3.0.2" require-directory@^2.1.1: version "2.1.1" @@ -5724,31 +5810,31 @@ resolve-from@^5.0.0: integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw== resolve.exports@^2.0.0: - version "2.0.2" - resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.2.tgz#f8c934b8e6a13f539e38b7098e2e36134f01e800" - integrity sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg== + version "2.0.3" + resolved "https://registry.yarnpkg.com/resolve.exports/-/resolve.exports-2.0.3.tgz#41955e6f1b4013b7586f873749a635dea07ebe3f" + integrity sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A== resolve@^1.10.0, resolve@^1.14.2, resolve@^1.20.0, resolve@^1.22.4: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== + version "1.22.10" + resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.10.tgz#b663e83ffb09bbf2386944736baae803029b8b39" + integrity sha512-NPRy+/ncIMeDlTAsuqwKIiferiawhefFJtkNSW0qZJEqMEb+qBt/77B/jGeeek+F0uOeN05CDa6HXbbIgtVX4w== dependencies: - is-core-module "^2.13.0" + is-core-module "^2.16.0" path-parse "^1.0.7" supports-preserve-symlinks-flag "^1.0.0" -restore-cursor@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-4.0.0.tgz#519560a4318975096def6e609d44100edaa4ccb9" - integrity sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg== +restore-cursor@^5.0.0: + version "5.1.0" + resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-5.1.0.tgz#0766d95699efacb14150993f55baf0953ea1ebe7" + integrity sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA== dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" + onetime "^7.0.0" + signal-exit "^4.1.0" reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== + version "1.1.0" + resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.1.0.tgz#0fe13b9522e1473f51b558ee796e08f11f9b489f" + integrity sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw== rimraf@^3.0.2: version "3.0.2" @@ -5757,6 +5843,11 @@ rimraf@^3.0.2: dependencies: glob "^7.1.3" +run-applescript@^7.0.0: + version "7.0.0" + resolved "https://registry.yarnpkg.com/run-applescript/-/run-applescript-7.0.0.tgz#e5a553c2bffd620e169d276c1cd8f1b64778fbeb" + integrity sha512-9by4Ij99JUr/MCFBUkDKLWK3G9HVXmabKz9U5MlIAIuvuzkiOicRYs8XJLxX+xahD+mLiiCYDqF9dKAgtzKP1A== + run-parallel@^1.1.9: version "1.2.0" resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" @@ -5764,14 +5855,15 @@ run-parallel@^1.1.9: dependencies: queue-microtask "^1.2.2" -safe-array-concat@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.2.tgz#81d77ee0c4e8b863635227c721278dd524c20edb" - integrity sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q== +safe-array-concat@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.1.3.tgz#c9e54ec4f603b0bbb8e7e5007a5ee7aecd1538c3" + integrity sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q== dependencies: - call-bind "^1.0.7" - get-intrinsic "^1.2.4" - has-symbols "^1.0.3" + call-bind "^1.0.8" + call-bound "^1.0.2" + get-intrinsic "^1.2.6" + has-symbols "^1.1.0" isarray "^2.0.5" safe-buffer@5.2.1, safe-buffer@^5.0.1, safe-buffer@^5.1.0, safe-buffer@~5.2.0: @@ -5784,16 +5876,24 @@ safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-regex-test@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.3.tgz#a5b4c0f06e0ab50ea2c395c14d8371232924c377" - integrity sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw== +safe-push-apply@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/safe-push-apply/-/safe-push-apply-1.0.0.tgz#01850e981c1602d398c85081f360e4e6d03d27f5" + integrity sha512-iKE9w/Z7xCzUMIZqdBsp6pEQvwuEebH4vdpjcDWnyzaI6yl6O9FHvVpmGelvEHNsoY6wGblkxR6Zty/h00WiSA== dependencies: - call-bind "^1.0.6" es-errors "^1.3.0" - is-regex "^1.1.4" + isarray "^2.0.5" -"safer-buffer@>= 2.1.2 < 3": +safe-regex-test@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.1.0.tgz#7f87dfb67a3150782eaaf18583ff5d1711ac10c1" + integrity sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + is-regex "^1.2.1" + +"safer-buffer@>= 2.1.2 < 3", "safer-buffer@>= 2.1.2 < 3.0.0": version "2.1.2" resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== @@ -5813,20 +5913,15 @@ semver@^6.3.0, semver@^6.3.1: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.1.tgz#556d2ef8689146e46dcea4bfdd095f3434dffcb4" integrity sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA== -semver@^7.3.5, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0: - version "7.6.2" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.2.tgz#1e3b34759f896e8f14d6134732ce798aeb0c6e13" - integrity sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w== - -semver@^7.6.2: - version "7.6.3" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.3.tgz#980f7b5550bc175fb4dc09403085627f9eb33143" - integrity sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A== +semver@^7.3.5, semver@^7.5.2, semver@^7.5.3, semver@^7.5.4, semver@^7.6.0, semver@^7.6.2: + version "7.7.1" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.7.1.tgz#abd5098d82b18c6c81f6074ff2647fd3e7220c9f" + integrity sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA== -send@0.18.0: - version "0.18.0" - resolved "https://registry.yarnpkg.com/send/-/send-0.18.0.tgz#670167cc654b05f5aa4a767f9113bb371bc706be" - integrity sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg== +send@0.19.0: + version "0.19.0" + resolved "https://registry.yarnpkg.com/send/-/send-0.19.0.tgz#bbc5a388c8ea6c048967049dbeac0e4a3f09d7f8" + integrity sha512-dW41u5VfLXu8SJh5bwRmyYUbAoSB3c9uQh6L8h/KtsFREPWpbX1lrljJo186Jc4nmci/sGUZ9a0a0J2zgfq2hw== dependencies: debug "2.6.9" depd "2.0.0" @@ -5849,17 +5944,17 @@ serialize-javascript@^6.0.2: dependencies: randombytes "^2.1.0" -serve-static@1.15.0: - version "1.15.0" - resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.15.0.tgz#faaef08cffe0a1a62f60cad0c4e513cff0ac9540" - integrity sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g== +serve-static@1.16.2: + version "1.16.2" + resolved "https://registry.yarnpkg.com/serve-static/-/serve-static-1.16.2.tgz#b6a5343da47f6bdd2673848bf45754941e803296" + integrity sha512-VqpjJZKadQB/PEbEwvFdO43Ax5dFBZ2UECszz8bQ7pi7wt//PWe1P6MN7eCnjsatYtBT6EuiClbjSWP2WrIoTw== dependencies: - encodeurl "~1.0.2" + encodeurl "~2.0.0" escape-html "~1.0.3" parseurl "~1.3.3" - send "0.18.0" + send "0.19.0" -set-function-length@^1.2.1: +set-function-length@^1.2.2: version "1.2.2" resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.2.2.tgz#aac72314198eaed975cf77b2c3b6b880695e5449" integrity sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg== @@ -5871,7 +5966,7 @@ set-function-length@^1.2.1: gopd "^1.0.1" has-property-descriptors "^1.0.2" -set-function-name@^2.0.1: +set-function-name@^2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.2.tgz#16a705c5a0dc2f5e638ca96d8a8cd4e1c2b90985" integrity sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ== @@ -5881,6 +5976,15 @@ set-function-name@^2.0.1: functions-have-names "^1.2.3" has-property-descriptors "^1.0.2" +set-proto@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/set-proto/-/set-proto-1.0.0.tgz#0760dbcff30b2d7e801fd6e19983e56da337565e" + integrity sha512-RJRdvCo6IAnPdsvP/7m6bsQqNnn1FCBX5ZNtFL98MmFF/4xAIJTIg1YbHW5DC2W5SKZanrC6i4HsJqlajw/dZw== + dependencies: + dunder-proto "^1.0.1" + es-errors "^1.3.0" + es-object-atoms "^1.0.0" + setimmediate@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/setimmediate/-/setimmediate-1.0.5.tgz#290cbb232e306942d7d7ea9b83732ab7856f8285" @@ -5916,26 +6020,56 @@ shebang-regex@^3.0.0: integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== shell-quote@^1.6.1: - version "1.8.1" - resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.1.tgz#6dbf4db75515ad5bac63b4f1894c3a154c766680" - integrity sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA== + version "1.8.2" + resolved "https://registry.yarnpkg.com/shell-quote/-/shell-quote-1.8.2.tgz#d2d83e057959d53ec261311e9e9b8f51dcb2934a" + integrity sha512-AzqKpGKjrj7EM6rKVQEPpB288oCfnrEIuyoT9cyF4nmGa7V8Zk6f7RRqYisX8X9m+Q7bd632aZW4ky7EhbQztA== -side-channel@^1.0.4, side-channel@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.6.tgz#abd25fb7cd24baf45466406b1096b7831c9215f2" - integrity sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA== +side-channel-list@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/side-channel-list/-/side-channel-list-1.0.0.tgz#10cb5984263115d3b7a0e336591e290a830af8ad" + integrity sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA== dependencies: - call-bind "^1.0.7" es-errors "^1.3.0" - get-intrinsic "^1.2.4" - object-inspect "^1.13.1" + object-inspect "^1.13.3" + +side-channel-map@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/side-channel-map/-/side-channel-map-1.0.1.tgz#d6bb6b37902c6fef5174e5f533fab4c732a26f42" + integrity sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + +side-channel-weakmap@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz#11dda19d5368e40ce9ec2bdc1fb0ecbc0790ecea" + integrity sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A== + dependencies: + call-bound "^1.0.2" + es-errors "^1.3.0" + get-intrinsic "^1.2.5" + object-inspect "^1.13.3" + side-channel-map "^1.0.1" + +side-channel@^1.0.6, side-channel@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.1.0.tgz#c3fcff9c4da932784873335ec9765fa94ff66bc9" + integrity sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw== + dependencies: + es-errors "^1.3.0" + object-inspect "^1.13.3" + side-channel-list "^1.0.0" + side-channel-map "^1.0.1" + side-channel-weakmap "^1.0.2" -signal-exit@^3.0.2, signal-exit@^3.0.3, signal-exit@^3.0.7: +signal-exit@^3.0.3, signal-exit@^3.0.7: version "3.0.7" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== -signal-exit@^4.0.1: +signal-exit@^4.0.1, signal-exit@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-4.1.0.tgz#952188c1cbd546070e2dd20d0f41c0ae0530cb04" integrity sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw== @@ -5999,9 +6133,9 @@ spdx-expression-parse@^3.0.0: spdx-license-ids "^3.0.0" spdx-license-ids@^3.0.0: - version "3.0.18" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz#22aa922dcf2f2885a6494a261f2d8b75345d0326" - integrity sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ== + version "3.0.21" + resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.21.tgz#6d6e980c9df2b6fc905343a3b2d702a6239536c3" + integrity sha512-Bvg/8F5XephndSK3JffaRqdT+gyhfqIPwDHpX80tJrF8QQRYMo8sNMeaZ2Dp5+jhwKnUmIOyFFQfHRkjJm5nXg== sprintf-js@~1.0.2: version "1.0.3" @@ -6020,17 +6154,10 @@ statuses@2.0.1: resolved "https://registry.yarnpkg.com/statuses/-/statuses-2.0.1.tgz#55cb000ccf1d48728bd23c685a063998cf1a1b63" integrity sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== -stdin-discarder@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.1.0.tgz#22b3e400393a8e28ebf53f9958f3880622efde21" - integrity sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ== - dependencies: - bl "^5.0.0" - -stoppable@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/stoppable/-/stoppable-1.1.0.tgz#32da568e83ea488b08e4d7ea2c3bcc9d75015d5b" - integrity sha512-KXDYZ9dszj6bzvnEMRYvxgeTHU74QBFL54XKtP3nyMuJ81CFYtABZ3bAzL2EdFUaEwJOBOgENyFj3R7oTzDyyw== +stdin-discarder@^0.2.2: + version "0.2.2" + resolved "https://registry.yarnpkg.com/stdin-discarder/-/stdin-discarder-0.2.2.tgz#390037f44c4ae1a1ae535c5fe38dc3aba8d997be" + integrity sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ== string-length@^4.0.1: version "4.0.2" @@ -6067,14 +6194,14 @@ string-width@^5.0.1, string-width@^5.1.2: emoji-regex "^9.2.2" strip-ansi "^7.0.1" -string-width@^6.1.0: - version "6.1.0" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-6.1.0.tgz#96488d6ed23f9ad5d82d13522af9e4c4c3fd7518" - integrity sha512-k01swCJAgQmuADB0YIc+7TuatfNvTBVOoaUWJjTB9R4VJzR5vNWzf5t42ESVZFPS8xTySF7CAdV4t/aaIm3UnQ== +string-width@^7.2.0: + version "7.2.0" + resolved "https://registry.yarnpkg.com/string-width/-/string-width-7.2.0.tgz#b5bb8e2165ce275d4d43476dd2700ad9091db6dc" + integrity sha512-tsaTIkKW9b4N+AEj+SVA+WhJzV7/zMhcSu78mLKWSk7cXMOSHsBKFWUs0fWwq8QyK3MgJBQRX6Gbi4kYbdvGkQ== dependencies: - eastasianwidth "^0.2.0" - emoji-regex "^10.2.1" - strip-ansi "^7.0.1" + emoji-regex "^10.3.0" + get-east-asian-width "^1.0.0" + strip-ansi "^7.1.0" string.prototype.padend@^3.0.0: version "3.1.6" @@ -6086,22 +6213,26 @@ string.prototype.padend@^3.0.0: es-abstract "^1.23.2" es-object-atoms "^1.0.0" -string.prototype.trim@^1.2.9: - version "1.2.9" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz#b6fa326d72d2c78b6df02f7759c73f8f6274faa4" - integrity sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw== +string.prototype.trim@^1.2.10: + version "1.2.10" + resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz#40b2dd5ee94c959b4dcfb1d65ce72e90da480c81" + integrity sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.2" + define-data-property "^1.1.4" define-properties "^1.2.1" - es-abstract "^1.23.0" + es-abstract "^1.23.5" es-object-atoms "^1.0.0" + has-property-descriptors "^1.0.2" -string.prototype.trimend@^1.0.8: - version "1.0.8" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz#3651b8513719e8a9f48de7f2f77640b26652b229" - integrity sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ== +string.prototype.trimend@^1.0.8, string.prototype.trimend@^1.0.9: + version "1.0.9" + resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz#62e2731272cd285041b36596054e9f66569b6942" + integrity sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" + call-bound "^1.0.2" define-properties "^1.2.1" es-object-atoms "^1.0.0" @@ -6200,18 +6331,18 @@ supports-preserve-symlinks-flag@^1.0.0: resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== -synckit@^0.8.6: - version "0.8.8" - resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.8.8.tgz#fe7fe446518e3d3d49f5e429f443cf08b6edfcd7" - integrity sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ== +synckit@^0.11.0: + version "0.11.4" + resolved "https://registry.yarnpkg.com/synckit/-/synckit-0.11.4.tgz#48972326b59723fc15b8d159803cf8302b545d59" + integrity sha512-Q/XQKRaJiLiFIBNN+mndW7S/RHxvwzuZS6ZwmRzUBqJBv/5QIKCEwkBC8GBf8EQJKYnaFs0wOZbKTXBPj8L9oQ== dependencies: - "@pkgr/core" "^0.1.0" - tslib "^2.6.2" + "@pkgr/core" "^0.2.3" + tslib "^2.8.1" tar-fs@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.1.tgz#489a15ab85f1f0befabb370b7de4f9eb5cbe8784" - integrity sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng== + version "2.1.2" + resolved "https://registry.yarnpkg.com/tar-fs/-/tar-fs-2.1.2.tgz#425f154f3404cb16cb8ff6e671d45ab2ed9596c5" + integrity sha512-EsaAXwxmx8UB7FRKqeozqEPop69DXcmYwTQwXvyAPF352HJsPdkVhvTaDPYqfNgruveJIJy3TA2l+2zj8LJIJA== dependencies: chownr "^1.1.1" mkdirp-classic "^0.5.2" @@ -6253,11 +6384,6 @@ tmpl@1.0.5: resolved "https://registry.yarnpkg.com/tmpl/-/tmpl-1.0.5.tgz#8683e0b902bb9c20c4f726e3c0b69f36518c07cc" integrity sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw== -to-fast-properties@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" - integrity sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog== - to-regex-range@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" @@ -6271,9 +6397,9 @@ toidentifier@1.0.1: integrity sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA== ts-api-utils@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.3.0.tgz#4b490e27129f1e8e686b45cc4ab63714dc60eea1" - integrity sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ== + version "1.4.3" + resolved "https://registry.yarnpkg.com/ts-api-utils/-/ts-api-utils-1.4.3.tgz#bfc2215fe6528fecab2b0fba570a2e8a4263b064" + integrity sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw== tsconfig-paths@^3.15.0: version "3.15.0" @@ -6285,10 +6411,10 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" -tslib@^2.2.0, tslib@^2.6.2: - version "2.6.3" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.3.tgz#0438f810ad7a9edcde7a241c3d80db693c8cbfe0" - integrity sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ== +tslib@^2.2.0, tslib@^2.6.2, tslib@^2.8.1: + version "2.8.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.8.1.tgz#612efe4ed235d567e8aba5f2a5fab70280ade83f" + integrity sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w== tunnel-agent@^0.6.0: version "0.6.0" @@ -6337,49 +6463,50 @@ type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" -typed-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz#1867c5d83b20fcb5ccf32649e5e2fc7424474ff3" - integrity sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ== +typed-array-buffer@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.3.tgz#a72395450a4869ec033fd549371b47af3a2ee536" + integrity sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw== dependencies: - call-bind "^1.0.7" + call-bound "^1.0.3" es-errors "^1.3.0" - is-typed-array "^1.1.13" + is-typed-array "^1.1.14" -typed-array-byte-length@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz#d92972d3cff99a3fa2e765a28fcdc0f1d89dec67" - integrity sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw== +typed-array-byte-length@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.3.tgz#8407a04f7d78684f3d252aa1a143d2b77b4160ce" + integrity sha512-BaXgOuIxz8n8pIq3e7Atg/7s+DpiYrxn4vdot3w9KbnBhcRQq6o3xemQdIfynqSeXeDrF32x+WvfzmOjPiY9lg== dependencies: - call-bind "^1.0.7" + call-bind "^1.0.8" for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.14" -typed-array-byte-offset@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz#f9ec1acb9259f395093e4567eb3c28a580d02063" - integrity sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA== +typed-array-byte-offset@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.4.tgz#ae3698b8ec91a8ab945016108aef00d5bff12355" + integrity sha512-bTlAFB/FBYMcuX81gbL4OcpH5PmlFHqlCCpAl8AlEzMz5k53oNDvN8p1PNOWLEmI2x4orp3raOFB51tv9X+MFQ== dependencies: available-typed-arrays "^1.0.7" - call-bind "^1.0.7" + call-bind "^1.0.8" for-each "^0.3.3" - gopd "^1.0.1" - has-proto "^1.0.3" - is-typed-array "^1.1.13" + gopd "^1.2.0" + has-proto "^1.2.0" + is-typed-array "^1.1.15" + reflect.getprototypeof "^1.0.9" -typed-array-length@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.6.tgz#57155207c76e64a3457482dfdc1c9d1d3c4c73a3" - integrity sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g== +typed-array-length@^1.0.7: + version "1.0.7" + resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.7.tgz#ee4deff984b64be1e118b0de8c9c877d5ce73d3d" + integrity sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg== dependencies: call-bind "^1.0.7" for-each "^0.3.3" gopd "^1.0.1" - has-proto "^1.0.3" is-typed-array "^1.1.13" possible-typed-array-names "^1.0.0" + reflect.getprototypeof "^1.0.6" typed-rest-client@^1.8.4: version "1.8.11" @@ -6390,40 +6517,50 @@ typed-rest-client@^1.8.4: tunnel "0.0.6" underscore "^1.12.1" -typescript@~5.4.5: - version "5.4.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.4.5.tgz#42ccef2c571fdbd0f6718b1d1f5e6e5ef006f611" - integrity sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ== +typescript@~5.5.4: + version "5.5.4" + resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.5.4.tgz#d9852d6c82bad2d2eda4fd74a5762a8f5909e9ba" + integrity sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q== uc.micro@^1.0.1, uc.micro@^1.0.5: version "1.0.6" resolved "https://registry.yarnpkg.com/uc.micro/-/uc.micro-1.0.6.tgz#9c411a802a409a91fc6cf74081baba34b24499ac" integrity sha512-8Y75pvTYkLJW2hWQHXxoqRgV7qb9B+9vFEtidML+7koHUFapnVJAZ6cKs+Qjz5Aw3aZWHMC6u0wJE3At+nSGwA== -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== +unbox-primitive@^1.1.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.1.0.tgz#8d9d2c9edeea8460c7f35033a88867944934d1e2" + integrity sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw== dependencies: - call-bind "^1.0.2" + call-bound "^1.0.3" has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" + has-symbols "^1.1.0" + which-boxed-primitive "^1.1.1" underscore@^1.12.1: - version "1.13.6" - resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.6.tgz#04786a1f589dc6c09f761fc5f45b89e935136441" - integrity sha512-+A5Sja4HP1M08MaXya7p5LvjuM7K6q/2EaC0+iovj/wOcMsTzMvDFbasi/oSapiwOlt252IqsKqPjCl7huKS0A== + version "1.13.7" + resolved "https://registry.yarnpkg.com/underscore/-/underscore-1.13.7.tgz#970e33963af9a7dda228f17ebe8399e5fbe63a10" + integrity sha512-GMXzWtsc57XAtguZgaQViUOzs0KTkk8ojr3/xAxXLITqf/3EMwxC0inyETfDFjH/Krbhuep0HNbbjI9i/q3F3g== undici-types@~5.26.4: version "5.26.5" resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-5.26.5.tgz#bcd539893d00b56e964fd2657a4866b221a65617" integrity sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== +undici-types@~6.21.0: + version "6.21.0" + resolved "https://registry.yarnpkg.com/undici-types/-/undici-types-6.21.0.tgz#691d00af3909be93a7faa13be61b3a5b50ef12cb" + integrity sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ== + +undici@^6.19.5: + version "6.21.2" + resolved "https://registry.yarnpkg.com/undici/-/undici-6.21.2.tgz#49c5884e8f9039c65a89ee9018ef3c8e2f1f4928" + integrity sha512-uROZWze0R0itiAKVPsYhFov9LxrPMHLMEQFszeI2gCN6bnIIZ8twzBCJcN2LJrBBLfrP0t1FW0g+JmKVl8Vk1g== + unicode-canonical-property-names-ecmascript@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.0.tgz#301acdc525631670d39f6146e0e77ff6bbdebddc" - integrity sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ== + version "2.0.1" + resolved "https://registry.yarnpkg.com/unicode-canonical-property-names-ecmascript/-/unicode-canonical-property-names-ecmascript-2.0.1.tgz#cb3173fe47ca743e228216e4a3ddc4c84d628cc2" + integrity sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg== unicode-match-property-ecmascript@^2.0.0: version "2.0.0" @@ -6434,9 +6571,9 @@ unicode-match-property-ecmascript@^2.0.0: unicode-property-aliases-ecmascript "^2.0.0" unicode-match-property-value-ecmascript@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.1.0.tgz#cb5fffdcd16a05124f5a4b0bf7c3770208acbbe0" - integrity sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA== + version "2.2.0" + resolved "https://registry.yarnpkg.com/unicode-match-property-value-ecmascript/-/unicode-match-property-value-ecmascript-2.2.0.tgz#a0401aee72714598f739b68b104e4fe3a0cb3c71" + integrity sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg== unicode-property-aliases-ecmascript@^2.0.0: version "2.1.0" @@ -6453,13 +6590,13 @@ unpipe@1.0.0, unpipe@~1.0.0: resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec" integrity sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ== -update-browserslist-db@^1.0.16: - version "1.1.0" - resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz#7ca61c0d8650766090728046e416a8cde682859e" - integrity sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ== +update-browserslist-db@^1.1.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz#348377dd245216f9e7060ff50b15a1b740b75420" + integrity sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw== dependencies: - escalade "^3.1.2" - picocolors "^1.0.1" + escalade "^3.2.0" + picocolors "^1.1.1" uri-js@^4.2.2: version "4.4.1" @@ -6517,26 +6654,69 @@ walker@^1.0.8: dependencies: makeerror "1.0.12" -which-boxed-primitive@^1.0.2: +whatwg-encoding@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/whatwg-encoding/-/whatwg-encoding-3.1.1.tgz#d0f4ef769905d426e1688f3e34381a99b60b76e5" + integrity sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ== + dependencies: + iconv-lite "0.6.3" + +whatwg-mimetype@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/whatwg-mimetype/-/whatwg-mimetype-4.0.0.tgz#bc1bf94a985dc50388d54a9258ac405c3ca2fc0a" + integrity sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg== + +which-boxed-primitive@^1.1.0, which-boxed-primitive@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz#d76ec27df7fa165f18d5808374a5fe23c29b176e" + integrity sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA== + dependencies: + is-bigint "^1.1.0" + is-boolean-object "^1.2.1" + is-number-object "^1.1.1" + is-string "^1.1.1" + is-symbol "^1.1.1" + +which-builtin-type@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/which-builtin-type/-/which-builtin-type-1.2.1.tgz#89183da1b4907ab089a6b02029cc5d8d6574270e" + integrity sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q== + dependencies: + call-bound "^1.0.2" + function.prototype.name "^1.1.6" + has-tostringtag "^1.0.2" + is-async-function "^2.0.0" + is-date-object "^1.1.0" + is-finalizationregistry "^1.1.0" + is-generator-function "^1.0.10" + is-regex "^1.2.1" + is-weakref "^1.0.2" + isarray "^2.0.5" + which-boxed-primitive "^1.1.0" + which-collection "^1.0.2" + which-typed-array "^1.1.16" + +which-collection@^1.0.2: version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.2.tgz#627ef76243920a107e7ce8e96191debe4b16c2a0" + integrity sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw== dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" + is-map "^2.0.3" + is-set "^2.0.3" + is-weakmap "^2.0.2" + is-weakset "^2.0.3" -which-typed-array@^1.1.14, which-typed-array@^1.1.15: - version "1.1.15" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.15.tgz#264859e9b11a649b388bfaaf4f767df1f779b38d" - integrity sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA== +which-typed-array@^1.1.16, which-typed-array@^1.1.18: + version "1.1.19" + resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.19.tgz#df03842e870b6b88e117524a4b364b6fc689f956" + integrity sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw== dependencies: available-typed-arrays "^1.0.7" - call-bind "^1.0.7" - for-each "^0.3.3" - gopd "^1.0.1" + call-bind "^1.0.8" + call-bound "^1.0.4" + for-each "^0.3.5" + get-proto "^1.0.1" + gopd "^1.2.0" has-tostringtag "^1.0.2" which@^1.2.9: @@ -6603,6 +6783,11 @@ write-file-atomic@^4.0.2: imurmurhash "^0.1.4" signal-exit "^3.0.7" +ws@^7.5.10: + version "7.5.10" + resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.10.tgz#58b5c20dc281633f6c19113f39b349bd8bd558d9" + integrity sha512-+dbF1tHwZpXcbOJdVOkzLDxZP1ailvSxM6ZweXTegylPny803bFhA+vqBYw4s31NSAk4S2Qz+AKXK9a4wkdjcQ== + xml2js@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/xml2js/-/xml2js-0.5.0.tgz#d9440631fbb2ed800203fad106f2724f62c493b7" @@ -6696,3 +6881,8 @@ yocto-queue@^0.1.0: version "0.1.0" resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b" integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q== + +zod@^3.24.2: + version "3.25.63" + resolved "https://registry.yarnpkg.com/zod/-/zod-3.25.63.tgz#5eac66b56aa9f5e1cd3604dd541b819110474efa" + integrity sha512-3ttCkqhtpncYXfP0f6dsyabbYV/nEUW+Xlu89jiXbTBifUfjaSqXOG6JnQPLtqt87n7KAmnMqcjay6c0Wq0Vbw==