diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c57a3b386..e8bd50442 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -4,7 +4,6 @@ on: push: branches: [main, release/**] pull_request: - branches: [main, release/**] workflow_dispatch: # Least-privilege default: CI only needs to read the repository. @@ -58,6 +57,44 @@ jobs: - name: Tests run: pnpm exec jest --selectProjects ${{ matrix.project }} --runInBand + e2e: + name: Test (web e2e) + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v7 + with: + persist-credentials: false + - uses: pnpm/action-setup@v6.0.9 + with: + version: 10 + - name: Set up Node + uses: actions/setup-node@v7 + with: + node-version: '24' + cache: 'pnpm' + - name: Install Packages + run: pnpm run ci:install + - name: Install Chromium + run: pnpm exec playwright install --with-deps chromium + - name: Tests + run: pnpm run test:e2e:web + - name: Upload Playwright HTML report + if: always() + uses: actions/upload-artifact@v4 + with: + name: playwright-report-web + path: lana/playwright-report/web + if-no-files-found: ignore + retention-days: 14 + - name: Upload Playwright test results + if: always() + uses: actions/upload-artifact@v4 + with: + name: playwright-test-results-web + path: lana/test-results/web + if-no-files-found: ignore + retention-days: 14 + build: name: Verify VSCode Package Build runs-on: ubuntu-latest diff --git a/.gitignore b/.gitignore index 663a2663c..e9623cf6b 100644 --- a/.gitignore +++ b/.gitignore @@ -9,3 +9,6 @@ build/ out/ coverage/ *.tsbuildinfo +/.vscode-test-web +/lana/test-results +/lana/playwright-report diff --git a/.vscode/launch.json b/.vscode/launch.json index 007891bb6..1de64e263 100644 --- a/.vscode/launch.json +++ b/.vscode/launch.json @@ -9,7 +9,7 @@ "name": "Run Extension", "type": "extensionHost", "request": "launch", - "args": ["--extensionDevelopmentPath=${workspaceFolder}/lana", "--disable-extensions"], + "args": ["--extensionDevelopmentPath=${workspaceFolder}/lana"], "outFiles": ["${workspaceFolder}/lana/out/**/*.js"], "localRoot": "${workspaceFolder}/lana" }, @@ -21,8 +21,7 @@ "type": "extensionHost", "request": "launch", "args": [ - "--extensionDevelopmentPath=${workspaceFolder}/${input:worktree}/lana", - "--disable-extensions" + "--extensionDevelopmentPath=${workspaceFolder}/${input:worktree}/lana" ], "outFiles": ["${workspaceFolder}/${input:worktree}/lana/out/**/*.js"], "localRoot": "${workspaceFolder}/${input:worktree}/lana" diff --git a/DEVELOPING.md b/DEVELOPING.md index cdba1057e..5a9d2852d 100644 --- a/DEVELOPING.md +++ b/DEVELOPING.md @@ -123,8 +123,7 @@ pnpm install 2. Package the extension: ```zsh -cd lana -vsce package --no-dependencies +pnpm --filter lana run build:vsix ``` This command will create a `.vsix` file that you can distribute or install locally. diff --git a/eslint.config.mjs b/eslint.config.mjs index 3b58c42cb..4d79900c7 100644 --- a/eslint.config.mjs +++ b/eslint.config.mjs @@ -15,6 +15,8 @@ export default defineConfig( '**/out/', '**/coverage/', '**/.docusaurus/', + '**/.vscode-test-web/', + '**/playwright-report/', // only TypeScript is linted; without this, `eslint .` selects js/mjs/cjs // by default and scans them with no rules '**/*.js', diff --git a/jest.config.js b/jest.config.js index 82d65196a..434bb33ba 100644 --- a/jest.config.js +++ b/jest.config.js @@ -18,7 +18,11 @@ const defaultConfig = { }, ], }, - testPathIgnorePatterns: ['/node_modules/', '/out/'], + testPathIgnorePatterns: [ + '/node_modules/', + '/out/', + '/test/playwright/', + ], testMatch: ['**/?(*.)+(spec|test).ts'], extensionsToTreatAsEsm: ['.ts', '.tsx'], }; diff --git a/lana/package.json b/lana/package.json index 68ff4ef02..860ab1a69 100644 --- a/lana/package.json +++ b/lana/package.json @@ -29,8 +29,8 @@ "profiling", "soql" ], - "type": "module", "main": "out/Main.js", + "browser": "out/web/Main.web.js", "icon": "./certinia-icon-color.png", "galleryBanner": { "color": "#000000", @@ -52,9 +52,19 @@ "categories": [ "Other" ], + "extensionDependencies": [ + "salesforce.salesforcedx-vscode-services" + ], + "capabilities": { + "virtualWorkspaces": true, + "untrustedWorkspaces": { + "supported": true + } + }, "activationEvents": [ "onLanguage:apexlog", - "onStartupFinished" + "onStartupFinished", + "onFileSystem:memfs" ], "contributes": { "commands": [ @@ -94,8 +104,7 @@ "menus": { "commandPalette": [ { - "command": "lana.showLogAnalysis", - "when": "resourceLangId == apexlog || lana.isApexLog" + "command": "lana.showLogAnalysis" } ], "editor/context": [ @@ -378,17 +387,21 @@ ] }, "scripts": { - "vscode:prepublish": "pnpm -w run build && pnpm -w run copy:package-docs" + "build:vsix": "vsce package --no-dependencies", + "vscode:prepublish": "pnpm -w run build && pnpm -w run copy:package-docs", + "vscode:bundle": "pnpm -w run build" }, "dependencies": { "@apexdevtools/apex-parser": "5.1.0", - "@salesforce/apex-node": "^9.0.0", - "@salesforce/core": "^9.1.0" + "@salesforce/vscode-services": "^67.12.0", + "effect": "^3.22.0", + "vscode-uri": "^3.1.0" }, "devDependencies": { "@types/jest": "^30.0.0", "@types/node": "~22.20.1", "@types/vscode": "~1.102.0", + "@vscode/vsce": "^3.9.2", "typescript": "npm:@typescript/typescript6@^6.0.2" } } diff --git a/lana/src/Main.ts b/lana/src/Main.ts index 8222bef92..35b5f50ce 100644 --- a/lana/src/Main.ts +++ b/lana/src/Main.ts @@ -5,13 +5,16 @@ import type { ExtensionContext } from 'vscode'; import { Context } from './Context.js'; import { Display } from './display/Display.js'; +import { disposeServices, initServices } from './services/servicesRuntime.js'; export let context: Context | null = null; -export function activate(extensionContext: ExtensionContext) { +export async function activate(extensionContext: ExtensionContext) { + await initServices(); context = new Context(extensionContext, new Display()); } -export function deactivate() { +export async function deactivate() { context = null; + await disposeServices(); } diff --git a/lana/src/Main.web.ts b/lana/src/Main.web.ts new file mode 100644 index 000000000..effc1281d --- /dev/null +++ b/lana/src/Main.web.ts @@ -0,0 +1,5 @@ +/* + * Copyright (c) 2026 Certinia Inc. All rights reserved. + */ + +export { activate, context, deactivate } from './Main.js'; diff --git a/lana/src/__tests__/helpers/test-builders.ts b/lana/src/__tests__/helpers/test-builders.ts index d6e3476ba..8c17cd991 100644 --- a/lana/src/__tests__/helpers/test-builders.ts +++ b/lana/src/__tests__/helpers/test-builders.ts @@ -179,6 +179,7 @@ export interface MockContext { context: MockExtensionContext; display: MockDisplay; workspaces: { uri: { fsPath: string }; name: string }[]; + workspaceManager?: unknown; } /** diff --git a/lana/src/__tests__/mocks/vscode.ts b/lana/src/__tests__/mocks/vscode.ts index bcbe9432e..a0c6c401a 100644 --- a/lana/src/__tests__/mocks/vscode.ts +++ b/lana/src/__tests__/mocks/vscode.ts @@ -12,6 +12,7 @@ // a drift from `@types/vscode` surfaces as ONE error at the factory, not at // every call site. import type { EndOfLine, TextDocument } from 'vscode'; +import { URI, Utils } from 'vscode-uri'; // Track subscriptions for cleanup const subscriptions: { dispose: jest.Mock }[] = []; @@ -110,34 +111,11 @@ export const ViewColumn = { } as const; export type ViewColumn = (typeof ViewColumn)[keyof typeof ViewColumn]; -// Mock Uri class +// Delegate URI semantics to vscode-uri so virtual URI tests match VS Code. export const Uri = { - file: jest.fn((path: string) => ({ - scheme: 'file', - authority: '', - path, - fsPath: path, - query: '', - fragment: '', - with: jest.fn(), - toString: jest.fn(() => `file://${path}`), - toJSON: jest.fn(() => ({ scheme: 'file', path, fsPath: path })), - })), - parse: jest.fn((value: string) => ({ - scheme: value.startsWith('file://') ? 'file' : 'unknown', - authority: '', - path: value.replace('file://', ''), - fsPath: value.replace('file://', ''), - query: '', - fragment: '', - with: jest.fn(), - toString: jest.fn(() => value), - })), - joinPath: jest.fn((base, ...pathSegments) => ({ - ...base, - path: [base.path, ...pathSegments].join('/'), - fsPath: [base.fsPath, ...pathSegments].join('/'), - })), + file: (path: string) => URI.file(path), + parse: (value: string) => URI.parse(value), + joinPath: (base: URI, ...pathSegments: string[]) => Utils.joinPath(base, ...pathSegments), }; // Mock RelativePattern (constructor used for glob searches) @@ -300,6 +278,10 @@ export const workspace = { }, }; +export const extensions = { + getExtension: jest.fn(), +}; + // Mock window export const window = { showInformationMessage: jest.fn().mockResolvedValue(undefined), @@ -342,6 +324,10 @@ export const window = { replace: jest.fn(), })), createWebviewPanel: jest.fn(), + tabGroups: { + activeTabGroup: { activeTab: undefined }, + onDidChangeTabs: jest.fn(() => ({ dispose: jest.fn() })), + }, activeTextEditor: undefined as unknown, visibleTextEditors: [], onDidChangeActiveTextEditor: jest.fn(() => ({ dispose: jest.fn() })), @@ -558,6 +544,7 @@ export default { ThemeColor, ConfigurationTarget, workspace, + extensions, window, commands, languages, diff --git a/lana/src/cache/LogEventCache.ts b/lana/src/cache/LogEventCache.ts index 896ecedd6..5412da1e0 100644 --- a/lana/src/cache/LogEventCache.ts +++ b/lana/src/cache/LogEventCache.ts @@ -1,12 +1,12 @@ /* * Copyright (c) 2026 Certinia Inc. All rights reserved. */ -import { readFile } from 'fs/promises'; import { workspace } from 'vscode'; import { parse, type ApexLog, type LogEvent } from 'apex-log-parser'; import type { Context } from '../Context.js'; +import { readFile } from '../services/salesforceServices.js'; export interface EventSearchResult { event: LogEvent; @@ -17,17 +17,17 @@ export class LogEventCache { private static readonly MAX_CACHE_SIZE = 10; private static cache = new Map(); - static async getApexLog(filePath: string): Promise { - const cached = LogEventCache.cache.get(filePath); + static async getApexLog(uriString: string): Promise { + const cached = LogEventCache.cache.get(uriString); if (cached) { // Move to end (most recently used) - LogEventCache.cache.delete(filePath); - LogEventCache.cache.set(filePath, cached); + LogEventCache.cache.delete(uriString); + LogEventCache.cache.set(uriString, cached); return cached; } try { - const content = await readFile(filePath, 'utf-8'); + const content = await readFile(uriString); const apexLog = parse(content); // Evict oldest if at capacity @@ -38,7 +38,7 @@ export class LogEventCache { } } - LogEventCache.cache.set(filePath, apexLog); + LogEventCache.cache.set(uriString, apexLog); return apexLog; } catch { return null; @@ -49,15 +49,15 @@ export class LogEventCache { return LogEventCache.searchEvents(apexLog.children, timestamp, 0); } - static clearCache(filePath: string): void { - LogEventCache.cache.delete(filePath); + static clearCache(uriString: string): void { + LogEventCache.cache.delete(uriString); } static apply(context: Context): void { context.context.subscriptions.push( workspace.onDidCloseTextDocument((doc) => { if (doc.languageId === 'apexlog') { - LogEventCache.clearCache(doc.uri.fsPath); + LogEventCache.clearCache(doc.uri.toString()); } }), ); diff --git a/lana/src/cache/__tests__/LogEventCache.test.ts b/lana/src/cache/__tests__/LogEventCache.test.ts index 8ca68198e..6a8964a20 100644 --- a/lana/src/cache/__tests__/LogEventCache.test.ts +++ b/lana/src/cache/__tests__/LogEventCache.test.ts @@ -2,7 +2,6 @@ * Copyright (c) 2026 Certinia Inc. All rights reserved. */ import { beforeEach, describe, expect, it } from '@jest/globals'; - import { workspace } from 'vscode'; import { @@ -12,18 +11,17 @@ import { } from '../../__tests__/helpers/test-builders.js'; import { LogEventCache } from '../LogEventCache.js'; -// Mock fs/promises -jest.mock('fs/promises', () => ({ - readFile: jest.fn(), -})); - // Mock apex-log-parser jest.mock('apex-log-parser', () => ({ parse: jest.fn(), })); import { parse } from 'apex-log-parser'; -import { readFile } from 'fs/promises'; +import { readFile } from '../../services/salesforceServices.js'; + +jest.mock('../../services/salesforceServices.js', () => ({ + readFile: jest.fn(), +})); const mockReadFile = readFile as jest.Mock; const mockParse = parse as jest.Mock; @@ -373,8 +371,8 @@ describe('LogEventCache', () => { await LogEventCache.getApexLog('/test/file.log'); // Capture the callback - let closeCallback: ((doc: { languageId: string; uri: { fsPath: string } }) => void) | null = - null; + let closeCallback: + ((doc: { languageId: string; uri: { toString: () => string } }) => void) | null = null; (workspace.onDidCloseTextDocument as jest.Mock).mockImplementationOnce((cb) => { closeCallback = cb; return { dispose: jest.fn() }; @@ -386,7 +384,7 @@ describe('LogEventCache', () => { // Simulate closing an apexlog document closeCallback!({ languageId: 'apexlog', - uri: { fsPath: '/test/file.log' }, + uri: { toString: () => '/test/file.log' }, }); // @ts-expect-error - accessing private static for testing @@ -401,8 +399,8 @@ describe('LogEventCache', () => { await LogEventCache.getApexLog('/test/file.log'); // Capture the callback - let closeCallback: ((doc: { languageId: string; uri: { fsPath: string } }) => void) | null = - null; + let closeCallback: + ((doc: { languageId: string; uri: { toString: () => string } }) => void) | null = null; (workspace.onDidCloseTextDocument as jest.Mock).mockImplementationOnce((cb) => { closeCallback = cb; return { dispose: jest.fn() }; @@ -414,7 +412,7 @@ describe('LogEventCache', () => { // Simulate closing a non-apexlog document closeCallback!({ languageId: 'javascript', - uri: { fsPath: '/test/file.log' }, + uri: { toString: () => '/test/file.log' }, }); // @ts-expect-error - accessing private static for testing diff --git a/lana/src/codelenses/ShowAnalysisCodeLens.ts b/lana/src/codelenses/ShowAnalysisCodeLens.ts index f215820fa..820a4a6b9 100644 --- a/lana/src/codelenses/ShowAnalysisCodeLens.ts +++ b/lana/src/codelenses/ShowAnalysisCodeLens.ts @@ -28,11 +28,7 @@ class ShowAnalysisCodeLens implements CodeLensProvider { } static apply(context: Context): void { - const docSelector = [ - { scheme: 'file', language: 'apexlog' }, - { scheme: 'file', pattern: '**/*.log' }, - { scheme: 'file', pattern: '**/*.txt' }, - ]; + const docSelector = [{ language: 'apexlog' }, { pattern: '**/*.log' }, { pattern: '**/*.txt' }]; const codeLensProviderDisposable = languages.registerCodeLensProvider( docSelector, diff --git a/lana/src/commands/LogView.ts b/lana/src/commands/LogView.ts index d025542fa..d6192ba89 100644 --- a/lana/src/commands/LogView.ts +++ b/lana/src/commands/LogView.ts @@ -1,16 +1,14 @@ /* * Copyright (c) 2020 Certinia Inc. All rights reserved. */ -import { createReadStream, existsSync } from 'fs'; -import { writeFile } from 'fs/promises'; -import { homedir } from 'os'; -import { basename, dirname, join, parse } from 'path'; import { Uri, commands, window as vscWindow, workspace, type WebviewPanel } from 'vscode'; +import { Utils } from 'vscode-uri'; import type { Context } from '../Context.js'; import { OpenFileInPackage } from '../display/OpenFileInPackage.js'; import { WebView } from '../display/WebView.js'; import { RawLogNavigation } from '../log-features/RawLogNavigation.js'; +import { fileOrFolderExists, readFile, writeFile } from '../services/salesforceServices.js'; import { PRIVATE_SECTIONS, getColumnOverrides, @@ -32,7 +30,7 @@ interface WebViewLogFileRequest { export class LogView { private static helpUrl = 'https://certinia.github.io/debug-log-analyzer/'; private static currentPanel: WebviewPanel | undefined; - private static currentLogPath: string | undefined; + private static currentLogUri: Uri | undefined; private static pendingNavigationTimestamp: number | undefined; static getCurrentView() { @@ -40,7 +38,11 @@ export class LogView { } static getLogPath() { - return LogView.currentLogPath; + return LogView.currentLogUri?.toString(); + } + + static getLogUri(): Uri | undefined { + return LogView.currentLogUri; } static setPendingNavigation(timestamp: number): void { @@ -50,22 +52,24 @@ export class LogView { static async createView( context: Context, beforeSendLog?: Promise, - logPath?: string, + logUri?: Uri, logData?: string, ): Promise { - const panel = WebView.apply('logFile', `Log: ${logPath ? basename(logPath) : 'Untitled'}`, [ - Uri.file(join(context.context.extensionPath, 'out')), - Uri.file(dirname(logPath || '')), + const logName = logUri ? Utils.basename(logUri) : 'Untitled'; + const logDir = logUri ? Utils.dirname(logUri) : context.context.extensionUri; + const panel = WebView.apply('logFile', `Log: ${logName}`, [ + Utils.joinPath(context.context.extensionUri, 'out'), + logDir, ]); this.currentPanel = panel; - this.currentLogPath = logPath; + this.currentLogUri = logUri; - const logViewerRoot = join(context.context.extensionPath, 'out'); - const index = join(logViewerRoot, 'index.html'); - const bundleUri = panel.webview.asWebviewUri(Uri.file(join(logViewerRoot, 'bundle.js'))); - const codiconUri = panel.webview.asWebviewUri(Uri.file(join(logViewerRoot, 'codicon.css'))); + const logViewerRoot = Utils.joinPath(context.context.extensionUri, 'out'); + const index = Utils.joinPath(logViewerRoot, 'index.html'); + const bundleUri = panel.webview.asWebviewUri(Utils.joinPath(logViewerRoot, 'bundle.js')); + const codiconUri = panel.webview.asWebviewUri(Utils.joinPath(logViewerRoot, 'codicon.css')); const indexSrc = await this.getFile(index); - panel.iconPath = Uri.file(join(logViewerRoot, 'certinia-icon-color.png')); + panel.iconPath = Utils.joinPath(logViewerRoot, 'certinia-icon-color.png'); panel.webview.html = indexSrc .replace(/bundle\.js/gi, bundleUri.toString(true)) .replace(/codicon\.css/gi, codiconUri.toString(true)); @@ -90,7 +94,7 @@ export class LogView { () => { configListener.dispose(); this.currentPanel = undefined; - this.currentLogPath = undefined; + this.currentLogUri = undefined; }, undefined, context.context.subscriptions, @@ -98,27 +102,31 @@ export class LogView { panel.webview.onDidReceiveMessage( async (msg: WebViewLogFileRequest) => { + if (!isWebViewLogFileRequest(msg)) { + return; + } const { cmd, requestId, payload } = msg; switch (cmd) { case 'fetchLog': { + if (!requestId) { + break; + } await beforeSendLog; - LogView.sendLog(requestId, panel, context, logPath, logData); + await LogView.sendLog(requestId, panel, context, logUri, logData); break; } case 'openPath': { - const filePath = payload as string; - if (filePath) { - context.display.showFile(filePath); + if (logUri) { + context.display.showFile(logUri); } break; } case 'openType': { - const symbol = payload as string; - if (symbol) { - await OpenFileInPackage.openFileForSymbol(context, symbol); + if (typeof payload === 'string' && payload) { + await OpenFileInPackage.openFileForSymbol(context, payload); } break; } @@ -148,8 +156,8 @@ export class LogView { } case 'updateConfig': { - const { section, value } = payload as { section: string; value: unknown }; - if (section) { + if (isConfigUpdate(payload)) { + const { section, value } = payload; if ((PRIVATE_SECTIONS as readonly string[]).includes(section)) { updatePrivateSection(context.context.globalState, section, value); } else { @@ -160,20 +168,16 @@ export class LogView { } case 'saveFile': { - const { fileContent, options } = payload as { - fileContent: string; - options: { defaultFileName?: string }; - }; - - if (fileContent && options?.defaultFileName) { + if (isSaveFileRequest(payload)) { + const { fileContent, options } = payload; const defaultWorkspace = (workspace.workspaceFolders || [])[0]; - const defaultDir = defaultWorkspace?.uri.path || homedir(); + const defaultDir = defaultWorkspace?.uri ?? context.context.extensionUri; const destinationFile = await vscWindow.showSaveDialog({ - defaultUri: Uri.file(join(defaultDir, options.defaultFileName)), + defaultUri: Utils.joinPath(defaultDir, options.defaultFileName), }); if (destinationFile) { - writeFile(destinationFile.fsPath, fileContent).catch((error) => { + writeFile(destinationFile, fileContent).catch((error) => { const msg = error instanceof Error ? error.message : String(error); vscWindow.showErrorMessage(`Unable to save file: ${msg}`); }); @@ -183,17 +187,15 @@ export class LogView { } case 'showError': { - const { text } = payload as { text: string }; - if (text) { - vscWindow.showErrorMessage(text); + if (isTextPayload(payload)) { + vscWindow.showErrorMessage(payload.text); } break; } case 'goToLogLine': { - const { timestamp } = payload as { timestamp: number }; - if (timestamp && LogView.currentLogPath) { - RawLogNavigation.goToLineByTimestamp(LogView.currentLogPath, timestamp); + if (isTimestampPayload(payload) && logUri) { + await RawLogNavigation.goToLineByTimestamp(logUri, payload.timestamp); } break; } @@ -226,36 +228,24 @@ export class LogView { return config; } - private static async getFile(filePath: string): Promise { - let data = ''; - return new Promise((resolve, reject) => { - createReadStream(filePath) - .on('error', (error) => { - reject(error); - }) - .on('data', (row) => { - data += row; - }) - .on('end', () => { - resolve(data); - }); - }); + private static async getFile(fileUri: Uri): Promise { + return readFile(fileUri); } - private static sendLog( + private static async sendLog( requestId: string, panel: WebviewPanel, context: Context, - logFilePath?: string, + logUri?: Uri, logData?: string, ) { - if (!logData && !existsSync(logFilePath || '')) { + if (!logData && logUri && !(await fileOrFolderExists(logUri))) { context.display.showErrorMessage('Log file could not be found.', { modal: true, }); + return; } - const filePath = parse(logFilePath || ''); const navigateToTimestamp = LogView.pendingNavigationTimestamp; LogView.pendingNavigationTimestamp = undefined; @@ -263,12 +253,72 @@ export class LogView { requestId, cmd: 'fetchLog', payload: { - logName: filePath.base, - logUri: logFilePath ? panel.webview.asWebviewUri(Uri.file(logFilePath)).toString(true) : '', - logPath: logFilePath, + logName: logUri ? Utils.basename(logUri) : '', + logUri: logUri ? panel.webview.asWebviewUri(logUri).toString(true) : '', + logPath: logUri?.toString(), logData: logData, navigateToTimestamp, }, }); } } + +function isWebViewLogFileRequest(value: unknown): value is WebViewLogFileRequest { + return ( + typeof value === 'object' && + value !== null && + !Array.isArray(value) && + typeof (value as Record).cmd === 'string' && + ((value as Record).requestId === undefined || + typeof (value as Record).requestId === 'string') + ); +} + +function isConfigUpdate(value: unknown): value is { section: string; value: unknown } { + return ( + typeof value === 'object' && + value !== null && + !Array.isArray(value) && + typeof (value as Record).section === 'string' && + Boolean((value as Record).section) + ); +} + +function isSaveFileRequest( + value: unknown, +): value is { fileContent: string; options: { defaultFileName: string } } { + if (typeof value !== 'object' || value === null || Array.isArray(value)) { + return false; + } + const payload = value as Record; + const options = payload.options; + return ( + typeof payload.fileContent === 'string' && + Boolean(payload.fileContent) && + typeof options === 'object' && + options !== null && + !Array.isArray(options) && + typeof (options as Record).defaultFileName === 'string' && + Boolean((options as Record).defaultFileName) + ); +} + +function isTextPayload(value: unknown): value is { text: string } { + return ( + typeof value === 'object' && + value !== null && + !Array.isArray(value) && + typeof (value as Record).text === 'string' && + Boolean((value as Record).text) + ); +} + +function isTimestampPayload(value: unknown): value is { timestamp: number } { + return ( + typeof value === 'object' && + value !== null && + !Array.isArray(value) && + typeof (value as Record).timestamp === 'number' && + Number.isFinite((value as Record).timestamp) + ); +} diff --git a/lana/src/commands/RetrieveLogFile.ts b/lana/src/commands/RetrieveLogFile.ts index c217c026a..c7b340e68 100644 --- a/lana/src/commands/RetrieveLogFile.ts +++ b/lana/src/commands/RetrieveLogFile.ts @@ -1,22 +1,25 @@ /* * Copyright (c) 2020 Certinia Inc. All rights reserved. */ -import type { LogRecord } from '@salesforce/apex-node'; -import { existsSync } from 'fs'; -import { join, parse } from 'path'; import { + Uri, window, type QuickPick as VSCodeQuickPick, type QuickPickItem, type WebviewPanel, } from 'vscode'; +import { Utils } from 'vscode-uri'; import { appName } from '../AppSettings.js'; import type { Context } from '../Context.js'; import { Item, Options, QuickPick } from '../display/QuickPick.js'; import { QuickPickWorkspace } from '../display/QuickPickWorkspace.js'; -import { GetLogFile } from '../salesforce/logs/GetLogFile.js'; -import { GetLogFiles } from '../salesforce/logs/GetLogFiles.js'; +import { + getLogBody, + listLogs, + writeFile, + type ApexLogListItem, +} from '../services/salesforceServices.js'; import { Command } from './Command.js'; import { LogView } from './LogView.js'; @@ -54,15 +57,29 @@ export class RetrieveLogFile { } private static async command(context: Context): Promise { - const ws = await QuickPickWorkspace.pickOrReturn(context); + const workspace = await QuickPickWorkspace.pickOrReturn(context); const loadingPicker = RetrieveLogFile.showLoadingPicker(); try { - const logFiles = await GetLogFiles.apply(ws); + const logFiles = await listLogs(); const logFileId = await RetrieveLogFile.getLogFile(logFiles); if (logFileId) { - const logFilePath = this.getLogFilePath(ws, logFileId); - const writeLogFile = this.writeLogFile(ws, logFilePath); - return LogView.createView(context, writeLogFile, logFilePath); + const logUri = Utils.joinPath( + Uri.parse(workspace.uri), + '.sfdx', + 'tools', + 'debug', + 'logs', + `${logFileId}.log`, + ); + const logData = await getLogBody(logFileId); + this.assertRetrievedLog(logFileId, logData); + try { + await writeFile(logUri, logData); + } catch (error: unknown) { + const message = error instanceof Error ? error.message : String(error); + context.display.output(`Unable to cache retrieved log: ${message}`, true); + } + return LogView.createView(context, undefined, logUri, logData); } } finally { loadingPicker.dispose(); @@ -78,7 +95,7 @@ export class RetrieveLogFile { return qp; } - private static async getLogFile(files: LogRecord[]): Promise { + private static async getLogFile(files: ApexLogListItem[]): Promise { const items = files .sort((a, b) => { const aDate = Date.parse(a.StartTime); @@ -86,8 +103,8 @@ export class RetrieveLogFile { return bDate - aDate; }) .map((r) => { - const name = `${r.LogUser.Name} - ${r.Operation}`; - const description = `${(r.LogLength / 1024).toFixed(2)} KB ${this.formatDuration(r.DurationMilliseconds)}`; + const name = `${r.LogUser?.Name ?? 'Unknown user'} - ${r.Operation ?? 'Unknown operation'}`; + const description = `${(r.LogLength / 1024).toFixed(2)} KB ${this.formatDuration(r.DurationMilliseconds ?? 0)}`; const detail = `${new Date(r.StartTime).toLocaleString()} - ${r.Status} - ${r.Id}`; return new DebugLogItem(name, description, detail, r.Id); }); @@ -145,17 +162,11 @@ export class RetrieveLogFile { return Math.round(value * precision) / precision; } - private static getLogFilePath(ws: string, fileId: string): string { - const logDirectory = join(ws, '.sfdx', 'tools', 'debug', 'logs'); - const logFilePath = join(logDirectory, `${fileId}.log`); - return logFilePath; - } - - private static async writeLogFile(ws: string, logPath: string) { - const logExists = existsSync(logPath); - if (!logExists) { - const logfilePath = parse(logPath); - await GetLogFile.apply(ws, logfilePath.dir, logfilePath.name); + private static assertRetrievedLog(logId: string, logData: string): void { + if (/^accessdenied(?:access denied)?$/i.test(logData.trim())) { + throw new Error( + `Salesforce denied access to the body of Apex log ${logId}. Verify that the authenticated user can access ApexLog records and their bodies.`, + ); } } } diff --git a/lana/src/commands/ShowInLogAnalysis.ts b/lana/src/commands/ShowInLogAnalysis.ts index 7a87a6bcf..b1a9879a6 100644 --- a/lana/src/commands/ShowInLogAnalysis.ts +++ b/lana/src/commands/ShowInLogAnalysis.ts @@ -1,7 +1,7 @@ /* * Copyright (c) 2025 Certinia Inc. All rights reserved. */ -import { window } from 'vscode'; +import { Uri, window } from 'vscode'; import type { Context } from '../Context.js'; import { Command } from './Command.js'; @@ -30,21 +30,21 @@ export class ShowInLogAnalysis { } const panel = LogView.getCurrentView(); - const logPath = LogView.getLogPath(); + const currentLogUri = LogView.getLogUri(); // If panel doesn't exist, open the log analysis view first if (!panel) { const activeEditor = window.activeTextEditor; - const logFilePath = filePath ?? activeEditor?.document.uri.fsPath; + const logUri = filePath ? Uri.parse(filePath) : activeEditor?.document.uri; - if (!logFilePath) { + if (!logUri) { context.display.showInformationMessage('No active Apex log file.'); return; } // Set pending navigation so it's sent after log is parsed LogView.setPendingNavigation(timestamp); - await LogView.createView(context, Promise.resolve(), logFilePath); + await LogView.createView(context, Promise.resolve(), logUri); return; // Navigation will happen via fetchLog payload } else { // Panel exists - reveal it first @@ -52,10 +52,14 @@ export class ShowInLogAnalysis { // Verify we're navigating to the same log const activeEditor = window.activeTextEditor; - if (logPath && activeEditor && activeEditor.document.uri.fsPath !== logPath) { + if ( + currentLogUri && + activeEditor && + activeEditor.document.uri.toString() !== currentLogUri.toString() + ) { // Different log file is active, open the active one LogView.setPendingNavigation(timestamp); - await LogView.createView(context, Promise.resolve(), activeEditor.document.uri.fsPath); + await LogView.createView(context, Promise.resolve(), activeEditor.document.uri); return; // Navigation will happen via fetchLog payload } } diff --git a/lana/src/commands/ShowLogAnalysis.ts b/lana/src/commands/ShowLogAnalysis.ts index 1f9028968..5e7344dbf 100644 --- a/lana/src/commands/ShowLogAnalysis.ts +++ b/lana/src/commands/ShowLogAnalysis.ts @@ -1,12 +1,11 @@ /* * Copyright (c) 2020 Certinia Inc. All rights reserved. */ -import { existsSync } from 'fs'; -import type { Uri } from 'vscode'; -import { window } from 'vscode'; +import { TabInputText, window, type Uri } from 'vscode'; import { appName } from '../AppSettings.js'; import type { Context } from '../Context.js'; +import { fileOrFolderExists } from '../services/salesforceServices.js'; import { Command } from './Command.js'; import { LogView } from './LogView.js'; @@ -33,12 +32,13 @@ export class ShowLogAnalysis { } private static async command(context: Context, uri: Uri): Promise { - const filePath = uri?.fsPath || window?.activeTextEditor?.document.fileName || ''; - const fileContent = !existsSync(filePath) ? window?.activeTextEditor?.document.getText() : ''; + const activeTab = window.tabGroups.activeTabGroup.activeTab; + const logUri = + uri || + window.activeTextEditor?.document.uri || + (activeTab?.input instanceof TabInputText ? activeTab.input.uri : undefined); - if (filePath || fileContent) { - LogView.createView(context, Promise.resolve(), filePath, fileContent); - } else { + if (!logUri) { context.display.showErrorMessage( 'No file selected or the file is too large. Try again using the file explorer or text editor command.', ); @@ -46,5 +46,10 @@ export class ShowLogAnalysis { 'No file selected or the file is too large. Try again using the file explorer or text editor command.', ); } + + const fileContent = (await fileOrFolderExists(logUri)) + ? undefined + : window.activeTextEditor?.document.getText(); + await LogView.createView(context, Promise.resolve(), logUri, fileContent); } } diff --git a/lana/src/commands/__tests__/RetrieveLogFile.test.ts b/lana/src/commands/__tests__/RetrieveLogFile.test.ts index 49f68992b..3d9cc62f1 100644 --- a/lana/src/commands/__tests__/RetrieveLogFile.test.ts +++ b/lana/src/commands/__tests__/RetrieveLogFile.test.ts @@ -1,53 +1,27 @@ /* * Copyright (c) 2026 Certinia Inc. All rights reserved. */ - -/** - * Tests for RetrieveLogFile command, focusing on the private formatDuration method. - * Since formatDuration is private, we test it indirectly through its usage in getLogFile. - */ import { beforeEach, describe, expect, it } from '@jest/globals'; - -import { window } from 'vscode'; - +import { commands, window } from 'vscode'; import { createMockContext } from '../../__tests__/helpers/test-builders.js'; +import { QuickPick } from '../../display/QuickPick.js'; +import { QuickPickWorkspace } from '../../display/QuickPickWorkspace.js'; +import { getLogBody, listLogs, writeFile } from '../../services/salesforceServices.js'; +import { LogView } from '../LogView.js'; import { RetrieveLogFile } from '../RetrieveLogFile.js'; -// Mock dependencies jest.mock('../../display/QuickPickWorkspace.js', () => ({ - QuickPickWorkspace: { - pickOrReturn: jest.fn(), - }, -})); - -jest.mock('../../salesforce/logs/GetLogFiles.js', () => ({ - GetLogFiles: { - apply: jest.fn(), - }, + QuickPickWorkspace: { pickOrReturn: jest.fn() }, })); - -jest.mock('../../salesforce/logs/GetLogFile.js', () => ({ - GetLogFile: { - apply: jest.fn(), - }, -})); - -jest.mock('../LogView.js', () => ({ - LogView: { - createView: jest.fn(), - }, -})); - jest.mock('../../display/QuickPick.js', () => ({ - QuickPick: { - pick: jest.fn(), - }, + QuickPick: { pick: jest.fn() }, Item: class { name: string; desc: string; details: string; sticky: boolean; selected: boolean; + constructor(name: string, desc: string, details: string, sticky: boolean, selected: boolean) { this.name = name; this.desc = desc; @@ -58,702 +32,148 @@ jest.mock('../../display/QuickPick.js', () => ({ }, Options: class { placeholder: string; + constructor(placeholder: string) { this.placeholder = placeholder; } }, })); - -jest.mock('fs', () => ({ - existsSync: jest.fn(), +jest.mock('../../services/salesforceServices.js', () => ({ + getLogBody: jest.fn(), + listLogs: jest.fn(), + writeFile: jest.fn(), })); +jest.mock('../LogView.js', () => ({ LogView: { createView: jest.fn() } })); -import { existsSync } from 'fs'; -import { commands } from 'vscode'; - -import { QuickPick } from '../../display/QuickPick.js'; -import { QuickPickWorkspace } from '../../display/QuickPickWorkspace.js'; -import { GetLogFile } from '../../salesforce/logs/GetLogFile.js'; -import { GetLogFiles } from '../../salesforce/logs/GetLogFiles.js'; -import { LogView } from '../LogView.js'; - -const mockPickOrReturn = QuickPickWorkspace.pickOrReturn as jest.Mock; -const mockGetLogFiles = GetLogFiles.apply as jest.Mock; -const mockGetLogFile = GetLogFile.apply as jest.Mock; -const mockQuickPickPick = QuickPick.pick as jest.Mock; -const mockExistsSync = existsSync as jest.Mock; +const mockPickWorkspace = QuickPickWorkspace.pickOrReturn as jest.Mock; +const mockPick = QuickPick.pick as jest.Mock; +const mockListLogs = listLogs as jest.Mock; +const mockGetLogBody = getLogBody as jest.Mock; +const mockWriteFile = writeFile as jest.Mock; const mockCreateView = LogView.createView as jest.Mock; const mockRegisterCommand = commands.registerCommand as jest.Mock; +const log = (id: string, startTime = '2024-01-01T00:00:00.000Z', durationMilliseconds = 100) => ({ + Id: id, + LogUser: { Name: 'User' }, + Operation: 'Op', + LogLength: 1024, + DurationMilliseconds: durationMilliseconds, + StartTime: startTime, + Status: 'Success', +}); + describe('RetrieveLogFile', () => { beforeEach(() => { - mockPickOrReturn.mockResolvedValue('/test/workspace'); - mockGetLogFiles.mockResolvedValue([]); - mockQuickPickPick.mockResolvedValue([]); - mockExistsSync.mockReturnValue(false); + jest.clearAllMocks(); + mockPickWorkspace.mockResolvedValue({ uri: 'file:///test/workspace' }); + mockListLogs.mockResolvedValue([]); + mockPick.mockResolvedValue([]); + mockGetLogBody.mockResolvedValue('log body'); + mockWriteFile.mockResolvedValue(undefined); (window.createQuickPick as jest.Mock).mockReturnValue({ - items: [], busy: false, enabled: true, placeholder: '', show: jest.fn(), - hide: jest.fn(), dispose: jest.fn(), }); }); - describe('apply', () => { - it('should register command with context', () => { - const mockContext = createMockContext(); - - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - expect(mockContext.context.subscriptions.length).toBe(1); - }); + const command = (): (() => Promise) => + mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]?.[1]; - it('should output registration message', () => { - const mockContext = createMockContext(); - - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - expect(mockContext.display.output).toHaveBeenCalledWith( - "Registered command 'Lana: Retrieve Log'", - ); - }); + it('registers the command', () => { + const context = createMockContext(); + RetrieveLogFile.apply(context as unknown as import('../../Context.js').Context); + expect(context.context.subscriptions).toHaveLength(1); }); - describe('error handling', () => { - it('should register command even when errors occur during execution', () => { - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - // The error handling is tested by verifying the command is registered - expect(mockContext.context.subscriptions.length).toBe(1); - }); + it('lists logs through Salesforce Services', async () => { + const context = createMockContext(); + RetrieveLogFile.apply(context as unknown as import('../../Context.js').Context); + await command()(); + expect(mockListLogs).toHaveBeenCalledWith(); }); - describe('command execution flow', () => { - /** - * Helper to get the registered command callback. - * The Command class stores callbacks via commands.registerCommand. - */ - const getCommandCallback = (): (() => Promise) => { - // Get the most recent call's callback (second argument) - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - return lastCall[1]; - }; - - it('should call QuickPickWorkspace.pickOrReturn first', async () => { - mockPickOrReturn.mockResolvedValue('/test/workspace'); - mockGetLogFiles.mockResolvedValue([]); - mockQuickPickPick.mockResolvedValue([]); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const commandCallback = getCommandCallback(); - await commandCallback(); - - expect(mockPickOrReturn).toHaveBeenCalled(); - }); - - it('should call GetLogFiles.apply with workspace path', async () => { - mockPickOrReturn.mockResolvedValue('/my/workspace'); - mockGetLogFiles.mockResolvedValue([]); - mockQuickPickPick.mockResolvedValue([]); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const commandCallback = getCommandCallback(); - await commandCallback(); - - expect(mockGetLogFiles).toHaveBeenCalledWith('/my/workspace'); - }); - - it('should return undefined when no log is selected', async () => { - mockPickOrReturn.mockResolvedValue('/test/workspace'); - mockGetLogFiles.mockResolvedValue([ - { - Id: 'log1', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: 100, - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }, - ]); - // Return empty array (user cancelled) - mockQuickPickPick.mockResolvedValue([]); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const commandCallback = getCommandCallback(); - const result = await commandCallback(); - - expect(result).toBeUndefined(); - expect(mockCreateView).not.toHaveBeenCalled(); - }); - - it('should create view when log is selected', async () => { - mockPickOrReturn.mockResolvedValue('/test/workspace'); - mockGetLogFiles.mockResolvedValue([ - { - Id: 'selected-log-id', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: 100, - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }, - ]); - // Return selected item with logId - mockQuickPickPick.mockResolvedValue([{ logId: 'selected-log-id' }]); - mockExistsSync.mockReturnValue(false); - mockGetLogFile.mockResolvedValue(undefined); - mockCreateView.mockResolvedValue({ panel: 'mock' }); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const commandCallback = getCommandCallback(); - await commandCallback(); - - expect(mockCreateView).toHaveBeenCalled(); - const createViewCall = mockCreateView.mock.calls[0]; - expect(createViewCall[2]).toContain('selected-log-id.log'); - }); - - it('should skip download when log file already exists', async () => { - mockPickOrReturn.mockResolvedValue('/test/workspace'); - mockGetLogFiles.mockResolvedValue([ - { - Id: 'existing-log', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: 100, - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }, - ]); - mockQuickPickPick.mockResolvedValue([{ logId: 'existing-log' }]); - // File already exists - mockExistsSync.mockReturnValue(true); - mockCreateView.mockResolvedValue({ panel: 'mock' }); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const commandCallback = getCommandCallback(); - await commandCallback(); - - // GetLogFile should NOT be called since file exists - expect(mockGetLogFile).not.toHaveBeenCalled(); - expect(mockCreateView).toHaveBeenCalled(); - }); - - it('should download log file when it does not exist', async () => { - mockPickOrReturn.mockResolvedValue('/test/workspace'); - mockGetLogFiles.mockResolvedValue([ - { - Id: 'new-log', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: 100, - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }, - ]); - mockQuickPickPick.mockResolvedValue([{ logId: 'new-log' }]); - // File does not exist - mockExistsSync.mockReturnValue(false); - mockGetLogFile.mockResolvedValue(undefined); - mockCreateView.mockResolvedValue({ panel: 'mock' }); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const commandCallback = getCommandCallback(); - await commandCallback(); - - // GetLogFile SHOULD be called since file doesn't exist - expect(mockGetLogFile).toHaveBeenCalledWith( - '/test/workspace', - expect.stringContaining('.sfdx/tools/debug/logs'), - 'new-log', - ); - }); + it('retrieves the selected body and opens it without requiring a local file', async () => { + mockListLogs.mockResolvedValue([log('selected-log')]); + mockPick.mockResolvedValue([{ logId: 'selected-log' }]); + const context = createMockContext(); + RetrieveLogFile.apply(context as unknown as import('../../Context.js').Context); + await command()(); + + expect(mockGetLogBody).toHaveBeenCalledWith('selected-log'); + expect(mockWriteFile).toHaveBeenCalledWith( + expect.objectContaining({ path: expect.stringContaining('selected-log.log') }), + 'log body', + ); + expect(mockCreateView).toHaveBeenCalledWith( + context, + undefined, + expect.objectContaining({ path: expect.stringContaining('selected-log.log') }), + 'log body', + ); }); - describe('formatDuration via getLogFile', () => { - /** - * Tests for the private formatDuration method, tested indirectly through getLogFile. - * formatDuration converts milliseconds to human-readable strings. - */ - - const createLogWithDuration = (durationMs: number) => ({ - Id: 'test-log', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: durationMs, - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }); - - const getCapturedDescription = async (durationMs: number): Promise => { - mockPickOrReturn.mockResolvedValue('/test/workspace'); - mockGetLogFiles.mockResolvedValue([createLogWithDuration(durationMs)]); - - let capturedDesc = ''; - mockQuickPickPick.mockImplementation((items: Array<{ desc: string }>) => { - capturedDesc = items[0]?.desc || ''; - return Promise.resolve([]); - }); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - await lastCall[1](); - - return capturedDesc; - }; - - it('should format 0 ms as "0 ms"', async () => { - const desc = await getCapturedDescription(0); - expect(desc).toContain('0 ms'); - }); - - it('should format values < 10 ms with 2 decimal precision', async () => { - const desc = await getCapturedDescription(5.123); - // _round(5.123, 100) = 5.12 - expect(desc).toContain('5.12 ms'); - }); - - it('should format values 10-99 ms with 1 decimal precision', async () => { - const desc = await getCapturedDescription(45.67); - // _round(45.67, 10) = 45.7 - expect(desc).toContain('45.7 ms'); - }); - - it('should format values >= 100 ms with no decimal precision', async () => { - const desc = await getCapturedDescription(789.4); - // _round(789.4, 1) = 789 - expect(desc).toContain('789 ms'); - }); - - it('should format 1-9.99 seconds with 2 decimal precision', async () => { - const desc = await getCapturedDescription(1234); - // 1.234s, _round(1.234, 100) = 1.23 - expect(desc).toContain('1.23 s'); - }); - - it('should format 10-59.99 seconds with 1 decimal precision', async () => { - const desc = await getCapturedDescription(45678); - // 45.678s, _round(45.678, 10) = 45.7 - expect(desc).toContain('45.7 s'); - }); - - it('should format exact minutes without seconds', async () => { - const desc = await getCapturedDescription(120000); - // 120s = 2m exactly - expect(desc).toContain('2m'); - expect(desc).not.toContain('2m '); - }); - - it('should format minutes with whole seconds', async () => { - const desc = await getCapturedDescription(150000); - // 150s = 2m 30s - expect(desc).toContain('2m 30s'); - }); - - it('should format minutes with fractional seconds', async () => { - const desc = await getCapturedDescription(125500); - // 125.5s = 2m 5.5s - expect(desc).toContain('2m 5.5s'); - }); - - it('should format large durations in minutes', async () => { - const desc = await getCapturedDescription(300000); - // 300s = 5m exactly - expect(desc).toContain('5m'); - }); - - it('should format undefined/falsy duration as "0 ms"', async () => { - // Test with undefined cast to number (becomes NaN which is falsy) - mockPickOrReturn.mockResolvedValue('/test/workspace'); - mockGetLogFiles.mockResolvedValue([ - { - Id: 'test-log', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: undefined as unknown as number, - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }, - ]); - - let capturedDesc = ''; - mockQuickPickPick.mockImplementation((items: Array<{ desc: string }>) => { - capturedDesc = items[0]?.desc || ''; - return Promise.resolve([]); - }); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - await lastCall[1](); - - expect(capturedDesc).toContain('0 ms'); - }); - }); - - describe('getLogFile behavior', () => { - it('should sort logs newest first', async () => { - const logs = [ - { - Id: 'oldest', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: 100, - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }, - { - Id: 'newest', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: 100, - StartTime: '2024-01-03T00:00:00.000Z', - Status: 'Success', - }, - { - Id: 'middle', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: 100, - StartTime: '2024-01-02T00:00:00.000Z', - Status: 'Success', - }, - ]; - - mockPickOrReturn.mockResolvedValue('/test/workspace'); - mockGetLogFiles.mockResolvedValue(logs); - - // Capture the items passed to QuickPick - let capturedItems: Array<{ logId: string }> = []; - mockQuickPickPick.mockImplementation((items) => { - capturedItems = items; - return Promise.resolve([]); - }); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - await lastCall[1](); - - // Verify items are sorted newest first - expect(capturedItems).toHaveLength(3); - expect(capturedItems[0]?.logId).toBe('newest'); - expect(capturedItems[1]?.logId).toBe('middle'); - expect(capturedItems[2]?.logId).toBe('oldest'); - }); - - it('should format log item name as "User - Operation"', async () => { - mockPickOrReturn.mockResolvedValue('/test/workspace'); - mockGetLogFiles.mockResolvedValue([ - { - Id: 'log1', - LogUser: { Name: 'John Doe' }, - Operation: '/apex/MyController', - LogLength: 2048, - DurationMilliseconds: 500, - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }, - ]); - - let capturedItems: Array<{ name: string }> = []; - mockQuickPickPick.mockImplementation((items) => { - capturedItems = items; - return Promise.resolve([]); - }); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - await lastCall[1](); - - expect(capturedItems).toHaveLength(1); - expect(capturedItems[0]?.name).toBe('John Doe - /apex/MyController'); - }); - - it('should format log item description with size in KB and duration', async () => { - mockPickOrReturn.mockResolvedValue('/test/workspace'); - mockGetLogFiles.mockResolvedValue([ - { - Id: 'log1', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 5120, // 5 KB - DurationMilliseconds: 1500, // 1.5s - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }, - ]); - - let capturedItems: Array<{ desc: string }> = []; - mockQuickPickPick.mockImplementation((items) => { - capturedItems = items; - return Promise.resolve([]); - }); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - await lastCall[1](); - - expect(capturedItems).toHaveLength(1); - expect(capturedItems[0]?.desc).toContain('5.00 KB'); - expect(capturedItems[0]?.desc).toContain('1.5 s'); - }); - - it('should format log item detail with date, status, and ID', async () => { - mockPickOrReturn.mockResolvedValue('/test/workspace'); - mockGetLogFiles.mockResolvedValue([ - { - Id: 'ABC123XYZ', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: 100, - StartTime: '2024-06-15T10:30:00.000Z', - Status: 'Success', - }, - ]); - - let capturedItems: Array<{ details: string }> = []; - mockQuickPickPick.mockImplementation((items) => { - capturedItems = items; - return Promise.resolve([]); - }); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - await lastCall[1](); - - expect(capturedItems).toHaveLength(1); - expect(capturedItems[0]?.details).toContain('Success'); - expect(capturedItems[0]?.details).toContain('ABC123XYZ'); - }); - - it('should return null when QuickPick returns empty array', async () => { - mockPickOrReturn.mockResolvedValue('/test/workspace'); - mockGetLogFiles.mockResolvedValue([ - { - Id: 'log1', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: 100, - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }, - ]); - mockQuickPickPick.mockResolvedValue([]); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - const result = await lastCall[1](); - - expect(result).toBeUndefined(); - expect(mockCreateView).not.toHaveBeenCalled(); - }); + it('still opens a retrieved log when cache writing fails', async () => { + mockListLogs.mockResolvedValue([log('selected-log')]); + mockPick.mockResolvedValue([{ logId: 'selected-log' }]); + mockWriteFile.mockRejectedValue(new Error('read-only workspace')); + const context = createMockContext(); + RetrieveLogFile.apply(context as unknown as import('../../Context.js').Context); + await command()(); + expect(mockCreateView).toHaveBeenCalled(); }); - describe('safeCommand error handling', () => { - it('should catch Error and display error message', async () => { - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - // Setup rejection using implementation - mockPickOrReturn.mockImplementationOnce(() => - Promise.reject(new Error('Test error message')), - ); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - await lastCall[1](); - - expect(mockContext.display.showErrorMessage).toHaveBeenCalledWith( - 'Error loading logfile: Test error message', - ); - }); - - it('should convert non-Error to string in error message', async () => { - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - // Setup rejection using implementation - throw a non-Error value - mockPickOrReturn.mockImplementationOnce(() => Promise.reject('String error')); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - await lastCall[1](); - - expect(mockContext.display.showErrorMessage).toHaveBeenCalledWith( - 'Error loading logfile: String error', - ); - }); - - it('should return undefined on error (not reject)', async () => { - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - // Setup rejection using implementation - mockPickOrReturn.mockImplementationOnce(() => Promise.reject(new Error('Some error'))); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - const result = await lastCall[1](); - - // Should resolve (not reject) with undefined - expect(result).toBeUndefined(); - }); + it('sorts logs newest first before presenting them', async () => { + mockListLogs.mockResolvedValue([ + log('old', '2024-01-01T00:00:00.000Z'), + log('new', '2024-01-03T00:00:00.000Z'), + ]); + let items: Array<{ logId: string }> = []; + mockPick.mockImplementation((picked) => { + items = picked; + return Promise.resolve([]); + }); + const context = createMockContext(); + RetrieveLogFile.apply(context as unknown as import('../../Context.js').Context); + await command()(); + expect(items.map((item) => item.logId)).toEqual(['new', 'old']); }); - describe('getLogFilePath', () => { - it('should construct path with .sfdx/tools/debug/logs directory', async () => { - mockPickOrReturn.mockResolvedValue('/my/project'); - mockGetLogFiles.mockResolvedValue([ - { - Id: 'test-log-123', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: 100, - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }, - ]); - mockQuickPickPick.mockResolvedValue([{ logId: 'test-log-123' }]); - mockExistsSync.mockReturnValue(true); - mockCreateView.mockResolvedValue({ panel: 'mock' }); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - await lastCall[1](); - - // Verify the path passed to createView - const createViewCall = mockCreateView.mock.calls[0]; - const logFilePath = createViewCall[2]; - - expect(logFilePath).toBe('/my/project/.sfdx/tools/debug/logs/test-log-123.log'); - }); - - it('should append .log extension to fileId', async () => { - mockPickOrReturn.mockResolvedValue('/workspace'); - mockGetLogFiles.mockResolvedValue([ - { - Id: 'myLogId', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: 100, - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }, - ]); - mockQuickPickPick.mockResolvedValue([{ logId: 'myLogId' }]); - mockExistsSync.mockReturnValue(true); - mockCreateView.mockResolvedValue({ panel: 'mock' }); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - await lastCall[1](); - - const createViewCall = mockCreateView.mock.calls[0]; - const logFilePath = createViewCall[2]; - - expect(logFilePath).toContain('myLogId.log'); - }); + it.each([ + [0, '0 ms'], + [5.123, '5.12 ms'], + [45.67, '45.7 ms'], + [789.4, '789 ms'], + [1234, '1.23 s'], + [45678, '45.7 s'], + [120000, '2m'], + [150000, '2m 30s'], + [125500, '2m 5.5s'], + ])('formats %s milliseconds as %s', async (durationMilliseconds, expectedDuration) => { + mockListLogs.mockResolvedValue([log('duration', undefined, durationMilliseconds)]); + let description = ''; + mockPick.mockImplementation((items) => { + description = items[0]?.desc ?? ''; + return Promise.resolve([]); + }); + const context = createMockContext(); + RetrieveLogFile.apply(context as unknown as import('../../Context.js').Context); + await command()(); + expect(description).toContain(expectedDuration); }); - describe('writeLogFile', () => { - it('should call GetLogFile.apply when file does not exist', async () => { - mockPickOrReturn.mockResolvedValue('/test/ws'); - mockGetLogFiles.mockResolvedValue([ - { - Id: 'download-me', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: 100, - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }, - ]); - mockQuickPickPick.mockResolvedValue([{ logId: 'download-me' }]); - mockExistsSync.mockReturnValue(false); - mockGetLogFile.mockResolvedValue(undefined); - mockCreateView.mockResolvedValue({ panel: 'mock' }); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - await lastCall[1](); - - expect(mockGetLogFile).toHaveBeenCalledWith( - '/test/ws', - '/test/ws/.sfdx/tools/debug/logs', - 'download-me', - ); - }); - - it('should NOT call GetLogFile.apply when file exists', async () => { - mockPickOrReturn.mockResolvedValue('/test/ws'); - mockGetLogFiles.mockResolvedValue([ - { - Id: 'already-exists', - LogUser: { Name: 'User' }, - Operation: 'Op', - LogLength: 1024, - DurationMilliseconds: 100, - StartTime: '2024-01-01T00:00:00.000Z', - Status: 'Success', - }, - ]); - mockQuickPickPick.mockResolvedValue([{ logId: 'already-exists' }]); - mockExistsSync.mockReturnValue(true); - mockCreateView.mockResolvedValue({ panel: 'mock' }); - - const mockContext = createMockContext(); - RetrieveLogFile.apply(mockContext as unknown as import('../../Context.js').Context); - - const lastCall = mockRegisterCommand.mock.calls[mockRegisterCommand.mock.calls.length - 1]; - await lastCall[1](); - - expect(mockGetLogFile).not.toHaveBeenCalled(); - }); + it('reports an access-denied log response', async () => { + mockListLogs.mockResolvedValue([log('denied')]); + mockPick.mockResolvedValue([{ logId: 'denied' }]); + mockGetLogBody.mockResolvedValue('AccessDenied'); + const context = createMockContext(); + RetrieveLogFile.apply(context as unknown as import('../../Context.js').Context); + await command()(); + expect(context.display.showErrorMessage).toHaveBeenCalledWith( + expect.stringContaining('Salesforce denied access'), + ); }); }); diff --git a/lana/src/decorations/RawLogLineDecoration.ts b/lana/src/decorations/RawLogLineDecoration.ts index daf8d264a..5a9048840 100644 --- a/lana/src/decorations/RawLogLineDecoration.ts +++ b/lana/src/decorations/RawLogLineDecoration.ts @@ -88,7 +88,7 @@ export class RawLogLineDecoration { } const timestamp = parseInt(match[1], 10); - const filePath = document.uri.fsPath; + const filePath = document.uri.toString(); const apexLog = await LogEventCache.getApexLog(filePath); if (!apexLog) { diff --git a/lana/src/display/Display.ts b/lana/src/display/Display.ts index 3a33b33d0..fe1c50fab 100644 --- a/lana/src/display/Display.ts +++ b/lana/src/display/Display.ts @@ -23,7 +23,7 @@ export class Display { window.showErrorMessage(s, options); } - showFile(path: string, options: TextDocumentShowOptions = {}): void { - commands.executeCommand('vscode.open', Uri.file(path.trim()), options); + showFile(uri: Uri | string, options: TextDocumentShowOptions = {}): void { + commands.executeCommand('vscode.open', typeof uri === 'string' ? Uri.parse(uri) : uri, options); } } diff --git a/lana/src/display/OpenFileInPackage.ts b/lana/src/display/OpenFileInPackage.ts index ab8f6ce48..482ee7479 100644 --- a/lana/src/display/OpenFileInPackage.ts +++ b/lana/src/display/OpenFileInPackage.ts @@ -1,8 +1,8 @@ /* * Copyright (c) 2020 Certinia Inc. All rights reserved. */ -import { basename } from 'path'; import { Position, Selection, ViewColumn, workspace, type TextDocumentShowOptions } from 'vscode'; +import { Utils } from 'vscode-uri'; import type { Context } from '../Context.js'; import { getMethodLine, parseApex } from '../salesforce/ApexParser/ApexSymbolLocator.js'; @@ -31,7 +31,7 @@ export class OpenFileInPackage { if (!symbolLocation.isExactMatch) { context.display.showErrorMessage( - `Symbol '${symbolLocation.missingSymbol}' could not be found in file '${basename(uri.fsPath)}'`, + `Symbol '${symbolLocation.missingSymbol}' could not be found in file '${Utils.basename(uri)}'`, ); } const zeroIndexedLineNumber = symbolLocation.line - 1; @@ -44,7 +44,7 @@ export class OpenFileInPackage { selection: new Selection(pos, pos), }; - context.display.showFile(uri.fsPath, options); + context.display.showFile(uri, options); } catch (err) { const message = err instanceof Error ? err.message : String(err); context.display.showErrorMessage(`Unable to open '${symbolName}': ${message}`); diff --git a/lana/src/display/QuickPickWorkspace.ts b/lana/src/display/QuickPickWorkspace.ts index 0f81f10c6..16763b750 100644 --- a/lana/src/display/QuickPickWorkspace.ts +++ b/lana/src/display/QuickPickWorkspace.ts @@ -1,32 +1,47 @@ /* * Copyright (c) 2020 Certinia Inc. All rights reserved. */ -import { parse } from 'path'; import { window } from 'vscode'; +import { Utils } from 'vscode-uri'; import type { Context } from '../Context.js'; +import { VSWorkspace } from '../workspace/VSWorkspace.js'; import { Item, Options, QuickPick } from './QuickPick.js'; export class QuickPickWorkspace { - static async pickOrReturn(context: Context): Promise { + static async pickOrReturn(context: Context): Promise { const workspaceFolders = context.workspaceManager.workspaceFolders; if (workspaceFolders.length > 1) { const [workspace] = await QuickPick.pick( - workspaceFolders.map((ws) => new Item(ws.name(), ws.path(), '')), + workspaceFolders.map((ws) => new Item(ws.name(), ws.uri, '')), new Options('Select a workspace:'), ); if (workspace) { - return workspace.description; + const selectedWorkspace = workspaceFolders.find((ws) => ws.uri === workspace.description); + if (!selectedWorkspace) { + throw new Error('Selected workspace not found'); + } + return selectedWorkspace; } else { throw new Error('No workspace selected'); } } else if (workspaceFolders.length === 1) { - return workspaceFolders[0]?.path() || ''; + const selectedWorkspace = workspaceFolders[0]; + if (!selectedWorkspace) { + throw new Error('No workspace available'); + } + return selectedWorkspace; } else { if (window.activeTextEditor) { - return parse(window.activeTextEditor.document.fileName).dir; + const documentUri = window.activeTextEditor.document.uri; + const folderUri = Utils.dirname(documentUri); + return new VSWorkspace({ + uri: folderUri, + name: Utils.basename(folderUri), + index: 0, + }); } else { throw new Error('No workspace selected'); } diff --git a/lana/src/display/__tests__/OpenFileInPackage.test.ts b/lana/src/display/__tests__/OpenFileInPackage.test.ts index d76f6ec3a..6a0aa871e 100644 --- a/lana/src/display/__tests__/OpenFileInPackage.test.ts +++ b/lana/src/display/__tests__/OpenFileInPackage.test.ts @@ -81,7 +81,7 @@ describe('OpenFileInPackage.openFileForSymbol', () => { const { context, workspaceManager, display } = createContext(); workspaceManager.findSymbol.mockResolvedValue({ status: 'found', - uri: { fsPath: '/ws/force-app/MyClass.cls' }, + uri: { path: '/ws/force-app/MyClass.cls', fsPath: '/ws/force-app/MyClass.cls' }, }); mockGetMethodLine.mockReturnValue({ line: 12, character: 4, isExactMatch: true }); @@ -93,8 +93,8 @@ describe('OpenFileInPackage.openFileForSymbol', () => { ); expect(display.showErrorMessage).not.toHaveBeenCalled(); expect(display.showFile).toHaveBeenCalledTimes(1); - const [path, options] = display.showFile.mock.calls[0]; - expect(path).toBe('/ws/force-app/MyClass.cls'); + const [uri, options] = display.showFile.mock.calls[0]; + expect(uri).toEqual(expect.objectContaining({ fsPath: '/ws/force-app/MyClass.cls' })); // line is converted to zero-indexed; character used as-is expect(options.selection.start).toEqual(expect.objectContaining({ line: 11, character: 4 })); expect(options.viewColumn).toBe(-1); @@ -104,7 +104,7 @@ describe('OpenFileInPackage.openFileForSymbol', () => { const { context, workspaceManager, display } = createContext(); workspaceManager.findSymbol.mockResolvedValue({ status: 'found', - uri: { fsPath: '/ws/MyClass.cls' }, + uri: { path: '/ws/MyClass.cls', fsPath: '/ws/MyClass.cls' }, }); mockGetMethodLine.mockReturnValue({ line: 3, isExactMatch: true }); @@ -118,7 +118,7 @@ describe('OpenFileInPackage.openFileForSymbol', () => { const { context, workspaceManager, display } = createContext(); workspaceManager.findSymbol.mockResolvedValue({ status: 'found', - uri: { fsPath: '/ws/force-app/MyClass.cls' }, + uri: { path: '/ws/force-app/MyClass.cls', fsPath: '/ws/force-app/MyClass.cls' }, }); mockGetMethodLine.mockReturnValue({ line: 1, diff --git a/lana/src/folding/RawLogFoldingProvider.ts b/lana/src/folding/RawLogFoldingProvider.ts index a2998675c..e69ac74e6 100644 --- a/lana/src/folding/RawLogFoldingProvider.ts +++ b/lana/src/folding/RawLogFoldingProvider.ts @@ -28,8 +28,7 @@ class RawLogFoldingProvider implements FoldingRangeProvider { document: TextDocument, _context: FoldingContext, ): Promise { - const filePath = document.uri.fsPath; - const apexLog = await LogEventCache.getApexLog(filePath); + const apexLog = await LogEventCache.getApexLog(document.uri.toString()); if (!apexLog) { return []; @@ -87,11 +86,11 @@ class RawLogFoldingProvider implements FoldingRangeProvider { * unrelated action forces a re-evaluation. */ private warmAndSignal(document: TextDocument): void { - if (document.uri.scheme !== 'file' || !isApexLogContent(document)) { + if (!isApexLogContent(document)) { return; } - void LogEventCache.getApexLog(document.uri.fsPath).then((apexLog) => { + void LogEventCache.getApexLog(document.uri.toString()).then((apexLog) => { if (apexLog) { this.changeEmitter.fire(); } @@ -99,7 +98,7 @@ class RawLogFoldingProvider implements FoldingRangeProvider { } static apply(context: Context): void { - const docSelector = [{ scheme: 'file', language: 'apexlog' }]; + const docSelector = [{ language: 'apexlog' }]; const provider = new RawLogFoldingProvider(); context.context.subscriptions.push( diff --git a/lana/src/folding/__tests__/RawLogFoldingProvider.test.ts b/lana/src/folding/__tests__/RawLogFoldingProvider.test.ts index 6012b0c89..610daef18 100644 --- a/lana/src/folding/__tests__/RawLogFoldingProvider.test.ts +++ b/lana/src/folding/__tests__/RawLogFoldingProvider.test.ts @@ -312,7 +312,7 @@ describe('RawLogFoldingProvider', () => { expect(languages.registerFoldingRangeProvider).toHaveBeenCalledTimes(1); expect(languages.registerFoldingRangeProvider).toHaveBeenCalledWith( - [{ scheme: 'file', language: 'apexlog' }], + [{ language: 'apexlog' }], expect.any(RawLogFoldingProvider), ); }); @@ -354,7 +354,7 @@ describe('RawLogFoldingProvider', () => { return { registeredProvider, openHandler, activeEditorHandler }; } - const flush = () => new Promise((resolve) => setImmediate(resolve)); + const flush = () => new Promise((resolve) => queueMicrotask(resolve)); it('warms the cache and fires onDidChangeFoldingRanges when an apex log opens', async () => { const { registeredProvider, openHandler } = applyAndCapture(); @@ -366,7 +366,7 @@ describe('RawLogFoldingProvider', () => { openHandler(doc); await flush(); - expect(mockGetApexLog).toHaveBeenCalledWith('/test/file.log'); + expect(mockGetApexLog).toHaveBeenCalledWith('file:///test/file.log'); expect(fired).toHaveBeenCalledTimes(1); }); @@ -380,7 +380,7 @@ describe('RawLogFoldingProvider', () => { activeEditorHandler({ document: doc }); await flush(); - expect(mockGetApexLog).toHaveBeenCalledWith('/test/file.log'); + expect(mockGetApexLog).toHaveBeenCalledWith('file:///test/file.log'); expect(fired).toHaveBeenCalledTimes(1); }); @@ -407,7 +407,7 @@ describe('RawLogFoldingProvider', () => { openHandler(doc); await flush(); - expect(mockGetApexLog).toHaveBeenCalledWith('/test/file.log'); + expect(mockGetApexLog).toHaveBeenCalledWith('file:///test/file.log'); expect(fired).not.toHaveBeenCalled(); }); }); diff --git a/lana/src/hovers/RawLogHoverProvider.ts b/lana/src/hovers/RawLogHoverProvider.ts index 8403eb510..0cd1b8dad 100644 --- a/lana/src/hovers/RawLogHoverProvider.ts +++ b/lana/src/hovers/RawLogHoverProvider.ts @@ -25,7 +25,7 @@ class RawLogHoverProvider implements HoverProvider { } const timestamp = parseInt(match[1], 10); - return this.buildHover(document.uri.fsPath, timestamp); + return this.buildHover(document.uri.toString(), timestamp); } private async buildHover(filePath: string, timestamp: number): Promise { @@ -51,7 +51,7 @@ class RawLogHoverProvider implements HoverProvider { } static apply(context: Context): void { - const docSelector = [{ scheme: 'file', language: 'apexlog' }]; + const docSelector = [{ language: 'apexlog' }]; const hoverProviderDisposable = languages.registerHoverProvider( docSelector, diff --git a/lana/src/language/ApexLogLanguageDetector.ts b/lana/src/language/ApexLogLanguageDetector.ts index b9a021172..fa0d69603 100644 --- a/lana/src/language/ApexLogLanguageDetector.ts +++ b/lana/src/language/ApexLogLanguageDetector.ts @@ -1,9 +1,6 @@ /* * Copyright (c) 2026 Certinia Inc. All rights reserved. */ -import { closeSync, openSync, readSync } from 'node:fs'; -import { extname } from 'node:path'; - import { TabInputText, commands, @@ -13,14 +10,17 @@ import { type TextDocument, type Uri, } from 'vscode'; +import { Utils } from 'vscode-uri'; import type { Context } from '../Context.js'; +import { readFile } from '../services/salesforceServices.js'; export const APEXLOG_HEADER = /^(\d\d\.\d.+?)?APEX_CODE,\w.+$/; const EXECUTION_STARTED = /^\d{2}:\d{2}:\d{2}\.\d{1,} \(\d+\)\|EXECUTION_STARTED$/; const USER_INFO = /^\d{2}:\d{2}:\d{2}\.\d{1,} \(\d+\)\|USER_INFO\|/; const DETECT_EXTENSIONS = new Set(['.log', '.txt']); const MAX_LINES_TO_CHECK = 100; +export const APEX_LOG_URI_SCHEMES = ['file', 'vscode-vfs', 'memfs'] as const; export function isApexLogContent(doc: TextDocument): boolean { if (doc.lineCount === 0) { @@ -38,18 +38,9 @@ export function isApexLogContent(doc: TextDocument): boolean { return false; } -function isApexLogFile(fsPath: string): boolean { - let fd: number; +async function isApexLogFile(uri: Uri): Promise { try { - fd = openSync(fsPath, 'r'); - } catch { - return false; - } - - try { - const buf = Buffer.alloc(4096); - const bytesRead = readSync(fd, buf, 0, 4096, 0); - const text = buf.toString('utf8', 0, bytesRead); + const text = (await readFile(uri)).slice(0, 4096); const lines = text.split(/\r?\n/); const linesToCheck = Math.min(MAX_LINES_TO_CHECK, lines.length); @@ -60,13 +51,13 @@ function isApexLogFile(fsPath: string): boolean { } } return false; - } finally { - closeSync(fd); + } catch { + return false; } } function hasDetectExtension(uri: Uri): boolean { - return DETECT_EXTENSIONS.has(extname(uri.fsPath).toLowerCase()); + return DETECT_EXTENSIONS.has(Utils.extname(uri).toLowerCase()); } function getActiveTabUri(): Uri | undefined { @@ -79,7 +70,12 @@ function getActiveTabUri(): Uri | undefined { function updateContextKey(): void { const editor = window.activeTextEditor; - if (editor && editor.document.uri.scheme === 'file') { + if ( + editor && + APEX_LOG_URI_SCHEMES.includes( + editor.document.uri.scheme as (typeof APEX_LOG_URI_SCHEMES)[number], + ) + ) { const doc = editor.document; if (hasDetectExtension(doc.uri)) { const detected = isApexLogContent(doc); @@ -92,9 +88,14 @@ function updateContextKey(): void { // Fallback to tab API for large files where activeTextEditor is undefined const tabUri = getActiveTabUri(); - if (tabUri && tabUri.scheme === 'file' && hasDetectExtension(tabUri)) { - const detected = isApexLogFile(tabUri.fsPath); - commands.executeCommand('setContext', 'lana.isApexLog', detected); + if ( + tabUri && + APEX_LOG_URI_SCHEMES.includes(tabUri.scheme as (typeof APEX_LOG_URI_SCHEMES)[number]) && + hasDetectExtension(tabUri) + ) { + void isApexLogFile(tabUri).then((detected) => { + commands.executeCommand('setContext', 'lana.isApexLog', detected); + }); return; } @@ -132,7 +133,10 @@ export class ApexLogLanguageDetector { } function detectAndSetLanguage(doc: TextDocument): void { - if (doc.languageId === 'apexlog' || doc.uri.scheme !== 'file') { + if ( + doc.languageId === 'apexlog' || + !APEX_LOG_URI_SCHEMES.includes(doc.uri.scheme as (typeof APEX_LOG_URI_SCHEMES)[number]) + ) { return; } diff --git a/lana/src/log-features/RawLogNavigation.ts b/lana/src/log-features/RawLogNavigation.ts index b14eba9b0..c37f84967 100644 --- a/lana/src/log-features/RawLogNavigation.ts +++ b/lana/src/log-features/RawLogNavigation.ts @@ -1,7 +1,9 @@ /* * Copyright (c) 2020 Certinia Inc. All rights reserved. */ -import { Selection, Uri, commands, window, workspace } from 'vscode'; +import { Selection, commands, window, type Uri } from 'vscode'; + +import { readFile } from '../services/salesforceServices.js'; /** * Handles navigation within raw Apex log files. @@ -15,12 +17,10 @@ export class RawLogNavigation { * @param logPath - Path to the log file * @param timestamp - Nanosecond timestamp to find (from log event) */ - public static async goToLineByTimestamp(logPath: string, timestamp: number): Promise { + public static async goToLineByTimestamp(logUri: Uri, timestamp: number): Promise { try { - const uri = Uri.file(logPath); - // Read file (no normalization - avoids doubling memory for large files) - const text = new TextDecoder().decode(await workspace.fs.readFile(uri)); + const text = await readFile(logUri); // Find the exact timestamp pattern: (nanoseconds)| const index = text.indexOf(`(${timestamp})|`); @@ -45,7 +45,7 @@ export class RawLogNavigation { } // Open file with line selected (cursor ends up at end - VS Code limitation) - await commands.executeCommand('vscode.open', uri, { + await commands.executeCommand('vscode.open', logUri, { preview: false, selection: new Selection(lineNumber, 0, lineNumber, lineLength), }); diff --git a/lana/src/salesforce/codesymbol/SfdxProject.ts b/lana/src/salesforce/codesymbol/SfdxProject.ts index 182337a2f..a46b40c20 100644 --- a/lana/src/salesforce/codesymbol/SfdxProject.ts +++ b/lana/src/salesforce/codesymbol/SfdxProject.ts @@ -1,8 +1,8 @@ /* * Copyright (c) 2025 Certinia Inc. All rights reserved. */ -import path from 'path'; import { RelativePattern, type Uri, workspace } from 'vscode'; +import { Utils } from 'vscode-uri'; export interface PackageDirectory { readonly uri: Uri; @@ -45,7 +45,9 @@ export class SfdxProject { const classIndex = new Map(); for (const uri of allUris) { // uri.path is always '/'-separated (unlike fsPath), so posix basename is safe everywhere - const className = path.posix.basename(uri.path, '.cls').toLowerCase(); + const className = Utils.basename(uri) + .replace(/\.cls$/i, '') + .toLowerCase(); const uris = classIndex.get(className); if (uris) { uris.push(uri); diff --git a/lana/src/salesforce/codesymbol/SfdxProjectReader.ts b/lana/src/salesforce/codesymbol/SfdxProjectReader.ts index 563d2dfac..5c1cc6d36 100644 --- a/lana/src/salesforce/codesymbol/SfdxProjectReader.ts +++ b/lana/src/salesforce/codesymbol/SfdxProjectReader.ts @@ -2,6 +2,7 @@ * Copyright (c) 2025 Certinia Inc. All rights reserved. */ import { RelativePattern, Uri, workspace, type WorkspaceFolder } from 'vscode'; + import { SfdxProject } from './SfdxProject.js'; interface RawPackageDirectory { @@ -45,7 +46,7 @@ export async function getProjects(workspaceFolder: WorkspaceFolder): Promise ({ path, fsPath: path }) as Uri; +const joinPath = (base: string, ...segments: string[]): string => + [base, ...segments].join('/').replace(/\/[^/]+\/\.\.\//g, '/'); + /** Mock the workspace scan so each project file resolves to its own contents, in order. */ function mockProjectFiles(files: { uri: Uri; contents: string }[]): void { (workspace.findFiles as jest.Mock).mockResolvedValue(files.map((file) => file.uri)); @@ -30,7 +32,7 @@ describe('getProjects', () => { jest.clearAllMocks(); // Mirror the real Uri.joinPath: join segments and normalize '..' (Uri.joinPath as jest.Mock).mockImplementation((base: Uri, ...segments: string[]) => - fileUri(posix.join(base.path, ...segments)), + fileUri(joinPath(base.path, ...segments)), ); }); diff --git a/lana/src/salesforce/logs/GetLogFile.ts b/lana/src/salesforce/logs/GetLogFile.ts deleted file mode 100644 index 8948be895..000000000 --- a/lana/src/salesforce/logs/GetLogFile.ts +++ /dev/null @@ -1,15 +0,0 @@ -/* - * Copyright (c) 2020 Certinia Inc. All rights reserved. - */ -import { getSalesforceConnection } from './SalesforceConnection.js'; - -export class GetLogFile { - static async apply(wsPath: string, logDir: string, logId: string): Promise { - const connection = await getSalesforceConnection(wsPath); - - // Dynamic import for code splitting. Improves performance by reducing the amount of JS that is loaded and parsed at the start. - - const { LogService } = await import('@salesforce/apex-node'); - await new LogService(connection).getLogs({ logId: logId, outputDir: logDir }); - } -} diff --git a/lana/src/salesforce/logs/GetLogFiles.ts b/lana/src/salesforce/logs/GetLogFiles.ts deleted file mode 100644 index 363485ba1..000000000 --- a/lana/src/salesforce/logs/GetLogFiles.ts +++ /dev/null @@ -1,17 +0,0 @@ -/* - * Copyright (c) 2020 Certinia Inc. All rights reserved. - */ -import type { LogRecord } from '@salesforce/apex-node'; - -import { getSalesforceConnection } from './SalesforceConnection.js'; - -export class GetLogFiles { - static async apply(wsPath: string): Promise { - const connection = await getSalesforceConnection(wsPath); - - // Dynamic import for code splitting. Improves performance by reducing the amount of JS that is loaded and parsed at the start. - - const { LogService } = await import('@salesforce/apex-node'); - return new LogService(connection).getLogRecords(); - } -} diff --git a/lana/src/salesforce/logs/SalesforceConnection.ts b/lana/src/salesforce/logs/SalesforceConnection.ts deleted file mode 100644 index 524ab6bab..000000000 --- a/lana/src/salesforce/logs/SalesforceConnection.ts +++ /dev/null @@ -1,25 +0,0 @@ -/* - * Copyright (c) 2020 Certinia Inc. All rights reserved. - */ -import type { Connection } from '@salesforce/core'; - -import { setupPinoBundlerPaths } from '../setupPinoPaths.js'; - -export async function getSalesforceConnection(wsPath: string): Promise { - // Must be called before importing @salesforce packages that use pino - setupPinoBundlerPaths(); - - // Dynamic import for code splitting. Improves performance by reducing the amount of JS that is loaded and parsed at the start. - - const { ConfigAggregator, OrgConfigProperties, Org } = await import('@salesforce/core'); - - const aggregator = await ConfigAggregator.create({ projectPath: wsPath }); - const aliasOrUsername = aggregator.getPropertyValue(OrgConfigProperties.TARGET_ORG); - - if (!aliasOrUsername) { - throw new Error('No default org configured for workspace'); - } - - const org = await Org.create({ aliasOrUsername }); - return org.getConnection(); -} diff --git a/lana/src/salesforce/setupPinoPaths.ts b/lana/src/salesforce/setupPinoPaths.ts deleted file mode 100644 index f5b21e34f..000000000 --- a/lana/src/salesforce/setupPinoPaths.ts +++ /dev/null @@ -1,28 +0,0 @@ -/* - * Copyright (c) 2020 Certinia Inc. All rights reserved. - */ -import { dirname, join } from 'path'; -import { fileURLToPath } from 'url'; - -/** - * Sets up pino bundler path overrides for worker threads. - * Must be called before any @salesforce/* imports that use pino. - * - * Pino uses worker threads that need to load files from disk at runtime. - * When bundled with rollup, the paths break. This injects the correct - * paths to the separately copied worker files. - */ -export function setupPinoBundlerPaths(): void { - if ('__bundlerPathsOverrides' in globalThis) { - return; - } - - const __dirname = dirname(fileURLToPath(import.meta.url)); - - (globalThis as Record).__bundlerPathsOverrides = { - 'thread-stream-worker': join(__dirname, 'thread-stream-worker.js'), - 'pino-worker': join(__dirname, 'pino-worker.js'), - 'pino/file': join(__dirname, 'pino-file.js'), - '../../lib/logger/transformStream': join(__dirname, 'salesforce-transform-stream.js'), - }; -} diff --git a/lana/src/services/salesforceServices.ts b/lana/src/services/salesforceServices.ts new file mode 100644 index 000000000..8c1d29900 --- /dev/null +++ b/lana/src/services/salesforceServices.ts @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2026 Certinia Inc. All rights reserved. + */ +import type { Uri } from 'vscode'; + +import { getRuntime, getServicesApi } from './servicesRuntime.js'; + +/* eslint-disable @typescript-eslint/naming-convention -- Salesforce API field names are case-sensitive. */ +export interface ApexLogListItem { + Id: string; + LogUser?: { Name?: string }; + Operation?: string; + LogLength: number; + StartTime: string; + Status: string; + DurationMilliseconds?: number; +} +/* eslint-enable @typescript-eslint/naming-convention */ + +export function listLogs(limit = 25): Promise { + const { ApexLogService } = getServicesApi().services; + return getRuntime().runPromise(ApexLogService.listLogs(limit)); +} + +export function getLogBody(logId: string): Promise { + const { ApexLogService } = getServicesApi().services; + return getRuntime().runPromise(ApexLogService.getLogBody(logId)); +} + +export function readFile(uri: Uri | string): Promise { + const { FsService } = getServicesApi().services; + return getRuntime().runPromise(FsService.readFile(uri)); +} + +export function writeFile(uri: Uri | string, content: string): Promise { + const { FsService } = getServicesApi().services; + return getRuntime().runPromise(FsService.safeWriteFile(uri, content)); +} + +export function fileOrFolderExists(uri: Uri | string): Promise { + const { FsService } = getServicesApi().services; + return getRuntime().runPromise(FsService.fileOrFolderExists(uri)); +} diff --git a/lana/src/services/servicesRuntime.ts b/lana/src/services/servicesRuntime.ts new file mode 100644 index 000000000..36680cbe3 --- /dev/null +++ b/lana/src/services/servicesRuntime.ts @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2026 Certinia Inc. All rights reserved. + */ +import type * as Context from 'effect/Context'; +import * as Layer from 'effect/Layer'; +import * as ManagedRuntime from 'effect/ManagedRuntime'; +import { extensions } from 'vscode'; + +import type { SalesforceVSCodeServicesApi } from '@salesforce/vscode-services'; + +const SERVICES_EXTENSION_ID = 'salesforce.salesforcedx-vscode-services'; + +type Services = + SalesforceVSCodeServicesApi['services']['prebuiltServicesDependencies'] extends Context.Context< + infer R + > + ? R + : never; + +type ServicesRuntime = ManagedRuntime.ManagedRuntime; + +let servicesApi: SalesforceVSCodeServicesApi | undefined; +let runtime: ServicesRuntime | undefined; + +export async function initServices(): Promise { + const extension = extensions.getExtension(SERVICES_EXTENSION_ID); + if (!extension) { + throw new Error( + `The '${SERVICES_EXTENSION_ID}' extension is required but was not found. Install the Salesforce Extension Pack and try again.`, + ); + } + + servicesApi = extension.isActive ? extension.exports : await extension.activate(); + runtime = ManagedRuntime.make( + Layer.succeedContext(servicesApi.services.prebuiltServicesDependencies), + ); +} + +export function getServicesApi(): SalesforceVSCodeServicesApi { + if (!servicesApi) { + throw new Error('Salesforce Services is not initialized.'); + } + return servicesApi; +} + +export function getRuntime(): ServicesRuntime { + if (!runtime) { + throw new Error('Salesforce Services runtime is not initialized.'); + } + return runtime; +} + +export async function disposeServices(): Promise { + const activeRuntime = runtime; + runtime = undefined; + servicesApi = undefined; + await activeRuntime?.dispose(); +} diff --git a/lana/src/symbols/RawLogSymbolProvider.ts b/lana/src/symbols/RawLogSymbolProvider.ts index 2b11e88ab..f4ed09993 100644 --- a/lana/src/symbols/RawLogSymbolProvider.ts +++ b/lana/src/symbols/RawLogSymbolProvider.ts @@ -29,7 +29,7 @@ class RawLogSymbolProvider implements DocumentSymbolProvider { document: TextDocument, _token: CancellationToken, ): Promise { - const apexLog = await LogEventCache.getApexLog(document.uri.fsPath); + const apexLog = await LogEventCache.getApexLog(document.uri.toString()); if (!apexLog) { return []; @@ -89,7 +89,7 @@ class RawLogSymbolProvider implements DocumentSymbolProvider { } static apply(context: Context): void { - const docSelector = [{ scheme: 'file', language: 'apexlog' }]; + const docSelector = [{ language: 'apexlog' }]; context.context.subscriptions.push( languages.registerDocumentSymbolProvider(docSelector, new RawLogSymbolProvider()), diff --git a/lana/src/symbols/__tests__/RawLogSymbolProvider.test.ts b/lana/src/symbols/__tests__/RawLogSymbolProvider.test.ts index f7aad575c..1f25bd1b5 100644 --- a/lana/src/symbols/__tests__/RawLogSymbolProvider.test.ts +++ b/lana/src/symbols/__tests__/RawLogSymbolProvider.test.ts @@ -142,7 +142,7 @@ describe('RawLogSymbolProvider', () => { expect(languages.registerDocumentSymbolProvider).toHaveBeenCalledTimes(1); expect(languages.registerDocumentSymbolProvider).toHaveBeenCalledWith( - [{ scheme: 'file', language: 'apexlog' }], + [{ language: 'apexlog' }], expect.any(RawLogSymbolProvider), ); }); diff --git a/lana/src/workspace/VSWorkspace.ts b/lana/src/workspace/VSWorkspace.ts index 695e09a65..303184530 100644 --- a/lana/src/workspace/VSWorkspace.ts +++ b/lana/src/workspace/VSWorkspace.ts @@ -14,9 +14,11 @@ export class VSWorkspace { this.workspaceFolder = workspaceFolder; } - path(): string { - return this.workspaceFolder.uri.fsPath; + /** URI string for desktop and virtual web workspaces. */ + get uri(): string { + return this.workspaceFolder.uri.toString(); } + name(): string { return this.workspaceFolder.name; } diff --git a/lana/src/workspace/__tests__/VSWorkspace.test.ts b/lana/src/workspace/__tests__/VSWorkspace.test.ts index 866364b07..cbcb3b45c 100644 --- a/lana/src/workspace/__tests__/VSWorkspace.test.ts +++ b/lana/src/workspace/__tests__/VSWorkspace.test.ts @@ -24,9 +24,9 @@ describe('VSWorkspace', () => { vsWorkspace = new VSWorkspace(mockWorkspaceFolder); }); - describe('path', () => { - it('should return workspace folder path', () => { - expect(vsWorkspace.path()).toBe('/workspace'); + describe('uri', () => { + it('should expose the workspace folder URI', () => { + expect(vsWorkspace.workspaceFolder.uri.fsPath).toBe('/workspace'); }); }); diff --git a/lana/test/playwright/playwright.config.web.ts b/lana/test/playwright/playwright.config.web.ts new file mode 100644 index 000000000..838c88f98 --- /dev/null +++ b/lana/test/playwright/playwright.config.web.ts @@ -0,0 +1,11 @@ +import { createWebConfig } from '@salesforce/playwright-vscode-ext'; +import type { PlaywrightTestConfig } from '@playwright/test'; + +const config: PlaywrightTestConfig = { + ...createWebConfig({ testDir: './specs', workers: 1, fullyParallel: false }), + outputDir: '../../test-results/web', + reporter: [['html', { open: 'never', outputFolder: '../../playwright-report/web' }]], + testMatch: '**/*.web.spec.ts', +}; + +export default config; diff --git a/lana/test/playwright/specs/logAnalysis.web.spec.ts b/lana/test/playwright/specs/logAnalysis.web.spec.ts new file mode 100644 index 000000000..3a23117ff --- /dev/null +++ b/lana/test/playwright/specs/logAnalysis.web.spec.ts @@ -0,0 +1,18 @@ +import { test } from '@playwright/test'; +import { + closeWelcomeTabs, + waitForExtensionsActivated, + waitForVSCodeWorkbench, + waitForWorkspaceReady, +} from '@salesforce/playwright-vscode-ext'; + +import { assertLogAnalysisRenders, openLogAnalysis } from '../support/logAnalysis'; + +test('opens a sample log and renders its analysis in VS Code Web', async ({ page }) => { + await waitForVSCodeWorkbench(page); + await waitForWorkspaceReady(page); + await closeWelcomeTabs(page); + await waitForExtensionsActivated(page); + await openLogAnalysis(page); + await assertLogAnalysisRenders(page); +}); diff --git a/lana/test/playwright/support/logAnalysis.ts b/lana/test/playwright/support/logAnalysis.ts new file mode 100644 index 000000000..ca94f33d5 --- /dev/null +++ b/lana/test/playwright/support/logAnalysis.ts @@ -0,0 +1,28 @@ +import { expect, type Page } from '@playwright/test'; +import { + executeCommandWithCommandPalette, + hasContent, + openFileFromExplorerTree, + webviewActiveFrame, +} from '@salesforce/playwright-vscode-ext'; + +import { SAMPLE_LOG_NAME } from './logWorkspace'; + +export const assertLogAnalysisRenders = async (page: Page): Promise => { + const analysis = await webviewActiveFrame(page, hasContent('log-viewer'), { + timeout: 60_000, + }); + + const flameChart = analysis.locator('timeline-flame-chart'); + await expect(flameChart).toBeVisible({ timeout: 120_000 }); + + await analysis.locator('vscode-tab-header').filter({ hasText: 'Call Tree' }).click(); + const callTree = analysis.locator('call-tree-view'); + await expect(callTree).toBeVisible(); + await expect(callTree.locator('.tabulator-row').first()).toBeVisible({ timeout: 120_000 }); +}; + +export const openLogAnalysis = async (page: Page): Promise => { + await openFileFromExplorerTree(page, SAMPLE_LOG_NAME); + await executeCommandWithCommandPalette(page, 'Log: Show Apex Log Analysis'); +}; diff --git a/lana/test/playwright/support/logWorkspace.ts b/lana/test/playwright/support/logWorkspace.ts new file mode 100644 index 000000000..998210bb7 --- /dev/null +++ b/lana/test/playwright/support/logWorkspace.ts @@ -0,0 +1,14 @@ +import fs from 'node:fs/promises'; +import path from 'node:path'; + +import { createTestWorkspace } from '@salesforce/playwright-vscode-ext'; + +import { sampleLogPath } from './paths'; + +export const SAMPLE_LOG_NAME = 'sample-log.log'; + +export const createLogWorkspace = async (): Promise => { + const workspaceDir = await createTestWorkspace(); + await fs.copyFile(sampleLogPath, path.join(workspaceDir, SAMPLE_LOG_NAME)); + return workspaceDir; +}; diff --git a/lana/test/playwright/support/paths.ts b/lana/test/playwright/support/paths.ts new file mode 100644 index 000000000..0512c248c --- /dev/null +++ b/lana/test/playwright/support/paths.ts @@ -0,0 +1,6 @@ +import path from 'node:path'; + +export const repoRoot = path.resolve(__dirname, '../../../..'); +export const extensionRoot = path.join(repoRoot, 'lana'); +export const sampleLogPath = path.join(repoRoot, 'sample-app', 'debug-logs', 'sample-log.log'); +export const vscodeWebTestPath = path.join(repoRoot, '.vscode-test-web'); diff --git a/lana/test/playwright/tsconfig.json b/lana/test/playwright/tsconfig.json new file mode 100644 index 000000000..5df1edcd7 --- /dev/null +++ b/lana/test/playwright/tsconfig.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "types": ["node"] + }, + "include": ["./**/*.ts"] +} diff --git a/lana/test/playwright/web/headlessServer.ts b/lana/test/playwright/web/headlessServer.ts new file mode 100644 index 000000000..2b5797e78 --- /dev/null +++ b/lana/test/playwright/web/headlessServer.ts @@ -0,0 +1,35 @@ +import fs from 'node:fs/promises'; + +import { open } from '@vscode/test-web'; + +import { createLogWorkspace } from '../support/logWorkspace'; +import { extensionRoot, vscodeWebTestPath } from '../support/paths'; + +// Lana declares Salesforce Services as an extension dependency, but VS Code Web +// needs the test server to explicitly provision it for a development extension. +const SERVICES_EXTENSION_ID = 'salesforce.salesforcedx-vscode-services'; + +const start = async (): Promise => { + const workspaceDir = await createLogWorkspace(); + const server = await open({ + browserType: 'none', + quality: 'stable', + commit: process.env.PLAYWRIGHT_WEB_VSCODE_COMMIT, + port: Number(process.env.PORT) || 3001, + printServerLog: true, + verbose: true, + extensionDevelopmentPath: extensionRoot, + extensionIds: [{ id: SERVICES_EXTENSION_ID }], + folderPath: workspaceDir, + testRunnerDataDir: vscodeWebTestPath, + }); + + const shutdown = (): void => { + server.dispose(); + void fs.rm(workspaceDir, { recursive: true, force: true }).finally(() => process.exit(0)); + }; + process.on('SIGINT', shutdown); + process.on('SIGTERM', shutdown); +}; + +void start(); diff --git a/lana/tsconfig.json b/lana/tsconfig.json index 11b78c721..d7a104bbe 100644 --- a/lana/tsconfig.json +++ b/lana/tsconfig.json @@ -1,6 +1,6 @@ { "compilerOptions": { - "lib": ["ES2022"], + "lib": ["ES2022", "DOM"], "esModuleInterop": true, "skipLibCheck": true, "target": "es2022", diff --git a/package.json b/package.json index 468cd20be..1ea2c6755 100644 --- a/package.json +++ b/package.json @@ -3,16 +3,19 @@ "private": true, "devDependencies": { "@eslint/js": "^10.0.1", + "@playwright/test": "^1.60.0", "@prettier/plugin-oxc": "^0.2.2", "@rolldown/plugin-node-polyfills": "^1.0.3", "@rollup/plugin-alias": "^6.0.0", "@rollup/plugin-commonjs": "^29.0.3", "@rollup/plugin-json": "^6.1.0", "@rollup/plugin-node-resolve": "^16.0.3", + "@salesforce/playwright-vscode-ext": "^1.3.10", "@swc/core": "^1.15.47", "@swc/helpers": "^0.5.23", "@swc/jest": "^0.2.39", "@types/jest": "^30.0.0", + "@vscode/test-web": "^0.0.81", "concurrently": "^10.0.4", "eslint": "^10.8.0", "eslint-config-prettier": "^10.1.8", @@ -26,6 +29,7 @@ "rollup-plugin-copy": "^3.5.0", "rollup-plugin-polyfill-node": "^0.13.0", "rollup-plugin-swc3": "^0.12.1", + "tsx": "^4.21.0", "typescript": "npm:@typescript/typescript6@^6.0.2", "typescript-7": "npm:typescript@^7.0.2", "typescript-eslint": "^8.65.0" @@ -46,6 +50,8 @@ "lint": "concurrently -r -g 'eslint . --cache --cache-location node_modules/.cache/eslint/' 'prettier --cache **/*.{ts,css,md,mdx,scss} --check --experimental-cli' 'pnpm run typecheck'", "test": "jest", "test:ci": "jest --runInBand", + "test:e2e:web": "pnpm build && playwright test --config=lana/test/playwright/playwright.config.web.ts", + "serve:web": "pnpm build && tsx lana/test/playwright/web/headlessServer.ts", "ci:install": "pnpm install --frozen-lockfile --prefer-offline --ignore-scripts", "prettier-format": "prettier '**/*.ts' --cache --write --experimental-cli" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5c8bebccd..9ac00127b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -31,6 +31,9 @@ importers: '@eslint/js': specifier: ^10.0.1 version: 10.0.1(eslint@10.8.0(jiti@1.21.7)) + '@playwright/test': + specifier: ^1.60.0 + version: 1.62.1 '@prettier/plugin-oxc': specifier: ^0.2.2 version: 0.2.2 @@ -49,6 +52,9 @@ importers: '@rollup/plugin-node-resolve': specifier: ^16.0.3 version: 16.0.3(rollup@4.62.3) + '@salesforce/playwright-vscode-ext': + specifier: ^1.3.10 + version: 1.3.11 '@swc/core': specifier: ^1.15.47 version: 1.15.47(@swc/helpers@0.5.23) @@ -61,6 +67,9 @@ importers: '@types/jest': specifier: ^30.0.0 version: 30.0.0 + '@vscode/test-web': + specifier: ^0.0.81 + version: 0.0.81 concurrently: specifier: ^10.0.4 version: 10.0.4 @@ -100,6 +109,9 @@ importers: rollup-plugin-swc3: specifier: ^0.12.1 version: 0.12.1(@swc/core@1.15.47(@swc/helpers@0.5.23))(rollup@4.62.3) + tsx: + specifier: ^4.21.0 + version: 4.23.12 typescript: specifier: npm:@typescript/typescript6@^6.0.2 version: '@typescript/typescript6@6.0.2' @@ -115,12 +127,15 @@ importers: '@apexdevtools/apex-parser': specifier: 5.1.0 version: 5.1.0 - '@salesforce/apex-node': - specifier: ^9.0.0 - version: 9.0.2 - '@salesforce/core': - specifier: ^9.1.0 - version: 9.1.0 + '@salesforce/vscode-services': + specifier: ^67.12.0 + version: 67.13.3(@effect/platform@0.96.3(effect@3.22.1))(@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.43.0)(@types/node@22.20.1) + effect: + specifier: ^3.22.0 + version: 3.22.1 + vscode-uri: + specifier: ^3.1.0 + version: 3.1.0 devDependencies: '@types/jest': specifier: ^30.0.0 @@ -131,6 +146,9 @@ importers: '@types/vscode': specifier: ~1.102.0 version: 1.102.0 + '@vscode/vsce': + specifier: ^3.9.2 + version: 3.9.2 typescript: specifier: npm:@typescript/typescript6@^6.0.2 version: '@typescript/typescript6@6.0.2' @@ -323,6 +341,68 @@ packages: '@asamuzakjp/css-color@3.2.0': resolution: {integrity: sha512-K1A6z8tS3XsmCMM86xoWdn7Fkdn9m6RSVtocUrJYIwZnFVkng/PvkEoWtOWmP+Scc6saYWHWZYbndEEXxl24jw==} + '@azu/format-text@1.0.2': + resolution: {integrity: sha512-Swi4N7Edy1Eqq82GxgEECXSSLyn6GOb5htRFPzBDdUkECGXtlf12ynO5oJSpWKPwCaUssOu7NfhDcCWpIC6Ywg==} + + '@azu/style-format@1.0.1': + resolution: {integrity: sha512-AHcTojlNBdD/3/KxIKlg8sxIWHfOtQszLvOpagLTO+bjC3u7SAszu1lf//u7JJC50aUSH+BVWDD/KvaA6Gfn5g==} + + '@azure-rest/core-client@2.8.0': + resolution: {integrity: sha512-F1ybHeN+++QhyFCF/ehLUEvrOB6fehPdFBFtGdj0C3B2lpQ9zkPiO5JDgsqc6IfjuUe6b3dAbXK0a7+VgSGfhw==} + engines: {node: '>=22.0.0'} + + '@azure/abort-controller@2.2.0': + resolution: {integrity: sha512-fNAjWnA/nZ2jz31kxR/AqRaUT8ewHBw/WuBIosK0moMy1C9e5ValbDfFdIxJzVOOYaYkV/b2F1S4H/aHiqfVQg==} + engines: {node: '>=22.0.0'} + + '@azure/core-auth@1.11.0': + resolution: {integrity: sha512-IUZydyTUkDnYdstOW9pFOOUQlBjAepK5teihDE3x6yxsPJs/hsAaaYpeGxdxrgtOiJbBKSjKW7MDk7AEhb4LRg==} + engines: {node: '>=22.0.0'} + + '@azure/core-client@1.11.0': + resolution: {integrity: sha512-JjQWO6akOck45PH/XBrxzsQGAiKrfFl4m5iggJ0ItMIz5omRufOXWpqCPpdjKN3vKDzlSUvFjaMb7Zwf0gvAdA==} + engines: {node: '>=22.0.0'} + + '@azure/core-process@1.0.0': + resolution: {integrity: sha512-/shnJ+ooO8WPxDhPEeI/2oRQuubn16gZ6CvlbpWbEswZfzwI9tI/sMAHmF3x1LuQ9yZYXfLW3TjzGMLEC5blKg==} + engines: {node: '>=22.0.0'} + + '@azure/core-rest-pipeline@1.25.0': + resolution: {integrity: sha512-bMs8ekJLjX8wPV+9IPBges1SLPyuDtE9g5gLDWOpxzKcoOFQnpLGkbcT1tdw3FaAmDS1gnPmMmJ6y/T5B96kIA==} + engines: {node: '>=22.0.0'} + + '@azure/core-tracing@1.4.0': + resolution: {integrity: sha512-eGwxD0AtncrxeBM4tG8R55Pc3rdX1hNW2WibJAgYpCVA6E93mvvVH+LcssoVjOBrSKWS55yEIHsk0X8ctHmfOQ==} + engines: {node: '>=22.0.0'} + + '@azure/core-util@1.14.0': + resolution: {integrity: sha512-9n2pWK61veAuN0V20t9lOuoV4CFMdyAZ1ygZzvBGk/pBBJRib/PjL9PLXa/aI2CcPpyHfqVsxxqLCYl6uZlfDw==} + engines: {node: '>=22.0.0'} + + '@azure/identity@4.13.2': + resolution: {integrity: sha512-NXL2/pCJctLxgw8bvrwwgge743kEq8LBT+O1pmV0vyUwetzFPH9auP6jhkU/cgZCPPtWoewAe3ncaGCgPo07fA==} + engines: {node: '>=22.0.0'} + + '@azure/logger@1.4.0': + resolution: {integrity: sha512-rbAE25KUfjU/s3XHUdJgceoCP5dEOpMx85J04kF+QMdta73XkuG9JGHHinch+XIoKpBdqljin+KqURpJriSzLA==} + engines: {node: '>=22.0.0'} + + '@azure/monitor-opentelemetry-exporter@1.0.0-beta.44': + resolution: {integrity: sha512-q266CqBoQDp4UcUvPXZ4NYSvl5aTDqiiUu7pDWqqtxL0nCvPkwZT8/vKOhhi8cB0pnL/ojc3basyV9lbS+jbPQ==} + engines: {node: '>=22.0.0'} + + '@azure/msal-browser@5.19.0': + resolution: {integrity: sha512-DHe9iRcyByGJuLPkl0K31a1JjOdRY2zX38Q07mQpSbR8zOj1EIgsWfTXhSQVyyijUxlcofVy/br7qWJbrMwVXQ==} + engines: {node: '>=0.8.0'} + + '@azure/msal-common@16.13.0': + resolution: {integrity: sha512-rOAy0KUcyBbdwVJ+f3uPpthXatFLLZN+/KWAsTLzk1aB23Xl9DRmmXYwSvBFOZyXj4jUQQ5FKxxRkhAFW1fOow==} + engines: {node: '>=0.8.0'} + + '@azure/msal-node@5.6.0': + resolution: {integrity: sha512-uFY9NxrWHw8PwZx7gAX6PDn+9vdfS05+levc/kwkx77IkjfaldnQbbcQzzDIZ5Hq5Zdr6/z92oAIoRWKp6MnOA==} + engines: {node: '>=20'} + '@babel/code-frame@7.29.0': resolution: {integrity: sha512-9NhCeYjq9+3uxgdtp20LSiJXJvN0FeCtNGpJxuMFZ1Kv3cWUNb6DOhJwUvcVCzKGR66cw4njwM6hrJLqgOwbcw==} engines: {node: '>=6.9.0'} @@ -960,6 +1040,10 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/runtime-corejs3@7.29.7': + resolution: {integrity: sha512-ppj9ouYku+RX0ljtgZd+KMO5mkM2bCqg8H2PYAFWnLsHEIKIdRojqbJ2i3eVHrisuxy7nOFCmngTDdWtUCdXUQ==} + engines: {node: '>=6.9.0'} + '@babel/runtime@7.29.7': resolution: {integrity: sha512-Nq8OhGWiZIZGV6hLHoyAKLLcJihP/xFeBMGJoUrxTX2psI8dCifzLhZISFb+VWS3wFMRDmCGw5R+dOySCqPLhw==} engines: {node: '>=6.9.0'} @@ -1519,6 +1603,25 @@ packages: open-ask-ai: optional: true + '@effect/opentelemetry@0.63.0': + resolution: {integrity: sha512-2yUG2QWNATi1uKP0kwhaP5eLp+c5NDzAL3EOpIcGLBAC0cbXZrx4n9Qw/QwUKxpuV+pbhrBUPCiByyWAFKfuCw==} + peerDependencies: + '@effect/platform': ^0.96.0 + '@opentelemetry/api': ^1.9 + '@opentelemetry/resources': ^2.0.0 + '@opentelemetry/sdk-logs': '>=0.203.0 <0.300.0' + '@opentelemetry/sdk-metrics': ^2.0.0 + '@opentelemetry/sdk-trace-base': ^2.0.0 + '@opentelemetry/sdk-trace-node': ^2.0.0 + '@opentelemetry/sdk-trace-web': ^2.0.0 + '@opentelemetry/semantic-conventions': ^1.33.0 + effect: ^3.21.0 + + '@effect/platform@0.96.3': + resolution: {integrity: sha512-LzvIj4HYE++TcTv/cVTCI/GRvQTV0ymwRmgjZMzNB5dU4OS05pTN36RKN0npiOm5orLJgw4yjIv1dNZoYGh/vg==} + peerDependencies: + effect: ^3.21.5 + '@emnapi/core@1.10.0': resolution: {integrity: sha512-yq6OkJ4p82CAfPl0u9mQebQHKPJkY7WrIuk205cTYnYe+k2Z8YBh11FrbRG/H6ihirqcacOgl2BIO8oyMQLeXw==} @@ -1555,6 +1658,162 @@ packages: '@emnapi/wasi-threads@2.0.1': resolution: {integrity: sha512-9DsSk+o5NBX0CCJT8s0EROGSGxjR/tKu6aBTaVyq+SjAEQH4XcdcRxPBRzsBLizTTJ49MJjF+jgu3qnO9GLQcQ==} + '@esbuild/aix-ppc64@0.28.2': + resolution: {integrity: sha512-XExcO+dvLKvVtNTibSTBej1NCAbaGhWn9Ww1ZPx80qsahhPFe/8jgWP0IchNe0F3HwkU7n8ejhH8bjonqht8mQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.28.2': + resolution: {integrity: sha512-5YfKeeI8qWfBZIX+u2xZC3Zlb3Os/gLS2sbEKM+I4ZOcsWmHS2WLysCcQZDAFRslDUU5Oiq44gf6PYN1vGwG5A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.28.2': + resolution: {integrity: sha512-kXXoiPVVGQcnIYGOeaovwOURpniDBpSq4A03qkQ+BMQqtGG6HYap3xne9C1O1yo4TR3qxlCX5IqqmX6fFo2Lqg==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.28.2': + resolution: {integrity: sha512-O387ite7SzUyCcy3JQX4P4bLtEA7bLLkx+esve5JHnyYfNTxcVpXZo9jhdB0lTKN44gztELTdU7nS8Nr16Fs1Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.28.2': + resolution: {integrity: sha512-n4KqkOQrraxHJcgjM1RvwbigfQKIKJVpM7xp+KsxiyUSrRdIXnt73VhrPAx0fV44hgfmIVKjxMN9J1t5jySVkw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.28.2': + resolution: {integrity: sha512-uq6suIWYP37qzGddBKPw5QEQPi6HiLGsO7UmkpfyaYNQ3D+rN6w6WfwH+nuqcGXWvawGwxOEroO4YGnFh95azw==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.28.2': + resolution: {integrity: sha512-n+I0BTSRIoy+d6RPKnEVwql5UwBJolytvY4mAOIEJorKlqgPII8ix6slVVrfZ5Tnj7glIZvloylbB/EJPMWEXw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.28.2': + resolution: {integrity: sha512-78XJTJkvPs0kz2w61301PJjXl4g7q3JqiYMZ/M/yVI73EHBrCRTgkhu9oqG7vPqq+a/yadEW8aD+agKlk5xrmg==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.28.2': + resolution: {integrity: sha512-pW4AC0P3it8c7do9MVM4p51FzHzdM/TZrerurgRcHJ2WTa1VQ1CIq18xncfpBJw4ojkiZZrKW2yIBWBP92j6Ug==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.28.2': + resolution: {integrity: sha512-XlDnu2q5yoqems+xay6wSAcg9DDD7K9RLKZEBOMZm3ckNpJBvOX20tSfby8KfrrhINDyv9V2YVZKY/SpoGJI8w==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.28.2': + resolution: {integrity: sha512-CYbnj78HsIeA+DhgUKgFCfvNsTHFhMMrinUrMZpDXJXKN8T3XViTZ/+wtHeVxEWY8ewSzTFN+nRmSwO2tZaLUQ==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.28.2': + resolution: {integrity: sha512-buwkd8nsph4R+ajRvw0qM5Hja/TXQow3ptzWO2EbG/cqcIkHloRrdlBtQlshyYGTNFvfkfJ5tpPLVkY4DtsPfQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.28.2': + resolution: {integrity: sha512-ZVykbDyk7519VwiNb9Lcj9m8XM6v5V9uKPvrEMkkEedVewf+0itkhahp4HDpgERXhwLRpWFypsGbG/J8s0QjJA==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.28.2': + resolution: {integrity: sha512-CAXl+Dtd9UUuJd8pKKdwh6MLm3MUMiqMPmhZ3tTSXPqfyQ3vDl6R5hZdZ/kYojK4ofXtdfSv1tFq8XzWx3heNQ==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.28.2': + resolution: {integrity: sha512-GeXCej4IQtU1B+QlDV8W/RRvbzI3O/Stss+/bCXv4lZls5WGRtu2a+3JkA3i4qIUlMXpcHebWpF8AkJhATowuA==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.28.2': + resolution: {integrity: sha512-3H1weTYZPxt/WOhByszQZybS9w5lKzUn1FDMsgEChbHWQwHYQQRfBxgCcZvPhjHfKyJjIievvMmEUawJrdY9Dg==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.28.2': + resolution: {integrity: sha512-4xTZr1FUmSoQW4XIWmit3tzQrUTZM+N3P0XV8xROKYF50XfI7xeO90+1bZvNwxIufQ9hDQVRJH5YhgPVF8A/HQ==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.28.2': + resolution: {integrity: sha512-sSATRjPeDBg3pdgHoQfoYBob11Kk1FGa9lui5RIHZCoCkJa9QKlvl3/vKz2usCmYYjs7ymJR/2Nnsqe+Hjt5nw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.28.2': + resolution: {integrity: sha512-lqnzCV+mM0gIADaKihiCg6ifgfU2L3h5E33rNQBN1Y4MaVGnzryzmvvf7UHxprpQdE8hpqLolJ9Rl+SkIRDpyw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.28.2': + resolution: {integrity: sha512-AL2qJILH7lNjrDmCQDvdxMfAUIv8KMNZOvrwAQ8i8//ntL9FflhOyMJ8OZSMBb8/AWXe3/5v5S20y3zCoZWKoQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.28.2': + resolution: {integrity: sha512-QtiuPytchRyC4rwUKhexJdQKvDuZ6hWloi3igqPQNUJCS1/v9EiO3UTOXR6A3FoMo4fnAKbWJdqaIwhOzh8qEw==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/openharmony-arm64@0.28.2': + resolution: {integrity: sha512-WkhYDmpTjLvGlScA1rwjRUmhl4k8oXR3cIbtqWmELgU/dFeHHlEllxDvdWcNJV9rbzCexB5vz8gtNewWLgCT7Q==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openharmony] + + '@esbuild/sunos-x64@0.28.2': + resolution: {integrity: sha512-GPMSkTOtMnv2U2F8gxe4Io6qmVs+YKyp832Etqqxr0hFngmXQ3rzwytelm3GIn7T4VviRUlf3sOgBOiTdvaf7g==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.28.2': + resolution: {integrity: sha512-PIhhEkE9uPBleRBrQEJpUn7MBnibZzbGzYWPmY3x+YoVg/95zbjB4CxPPOQ8l5tYYM4mMaCthF8/1DIfBQQyWQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.28.2': + resolution: {integrity: sha512-YmJbfTlvU7Sdn9BB+4PRES4oB6pxgS37MAONj+hBr/cpXS1aBPKXxNnDbu+QCWPj0o9dgyxeq79g6c5P8KeuYA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.28.2': + resolution: {integrity: sha512-5ebpxr3nWMzrL/rnUI755Jkuee0bHL/Gq0WTF9lvcpv73wAp5eu8MfBUgWK9bhWvZjj7yX8etf/8tI8Ney695g==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + '@eslint-community/eslint-utils@4.9.1': resolution: {integrity: sha512-phrYmNiYppR7znFEdqgfWHXR6NCkZEK7hwWDHZUjit/2/U0r6XvkDl0SYnoM51Hq7FhCGdLDT6zxCCOY1hexsQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -1623,6 +1882,15 @@ packages: resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} + '@inquirer/external-editor@1.0.3': + resolution: {integrity: sha512-RWbSrDiYmO4LbejWY7ttpxczuwQyZLBUyygsA9Nsv95hpzUWwnNTVQmAq3xuh7vNwCp07UTmE5i11XAEExx4RA==} + engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' + peerDependenciesMeta: + '@types/node': + optional: true + '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1762,6 +2030,10 @@ packages: resolution: {integrity: sha512-k7i2Tntu1fLvkMtRcKDFU64/Fr2M692ECtbwIGX6hcOh5mj+jrMa1tlvcdwffxAMl+lPYCXnY2bjErxWmP84zA==} engines: {node: '>=22'} + '@jsforce/jsforce-node@3.10.22': + resolution: {integrity: sha512-4TLjnvTlBW59NmNSsRRV5dDEepQGfBKVD0WWQlJUJwkU0d5FFxo8GbfNmCOXkjjYAe1wv7SuvMzJKcLZHU6qyw==} + engines: {node: '>=22'} + '@jsonjoy.com/base64@1.1.2': resolution: {integrity: sha512-q6XAnWQDIMA3+FTiOYajoYqySkO+JSat0ytXGSuRdq9uXE7o92gzuQwQM14xaCRlBLGq3v5miDGC4vkVTn54xA==} engines: {node: '>=10.0'} @@ -1882,6 +2154,16 @@ packages: peerDependencies: tslib: '2' + '@koa/cors@5.0.0': + resolution: {integrity: sha512-x/iUDjcS90W69PryLDIMgFyV21YLTnG9zOpPXS7Bkt2b8AsY3zZsIpOLBkYr9fBcF3HbkKaER5hOBZLfpLgYNw==} + engines: {node: '>= 14.0.0'} + + '@koa/router@15.7.0': + resolution: {integrity: sha512-WaAlk4TOl/O0rhTpOR0l052gz03syPMmI6Pe2gd7v3ubjfv5UcSGcnb0Y/J5NNC/ln+5FiUqPJTc/a15I+XqAA==} + engines: {node: '>= 20'} + peerDependencies: + koa: ^2.0.0 || ^3.0.0 + '@leichtgewicht/ip-codec@2.0.5': resolution: {integrity: sha512-Vo+PSpZG2/fmgmiNzYK9qWRh8h/CHrwD0mo1h1DzL4yzHNSfWYujGTYsWGreD000gcgmZ7K4Ys6Tx9TxtsKdDw==} @@ -1921,6 +2203,36 @@ packages: '@module-federation/webpack-bundler-runtime@0.22.0': resolution: {integrity: sha512-aM8gCqXu+/4wBmJtVeMeeMN5guw3chf+2i6HajKtQv7SJfxV/f4IyNQJUeUQu9HfiAZHjqtMV5Lvq/Lvh8LdyA==} + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4': + resolution: {integrity: sha512-LCkGo6JDfaBhgST7UpPWgNgLINpcpabaHfyz5OBx75nUYxBsaEPxjnyNjWpeb/xBup/682QnBfRBy2/LvPutZQ==} + cpu: [arm64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4': + resolution: {integrity: sha512-zExlW9zUJKZH/tOtVMttwjKa4Xm/3KcNjnE3dPN92uCktwavMxpgCA3MoJK/DOnTWsQgo224OaST27/mPNAf+w==} + cpu: [x64] + os: [darwin] + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4': + resolution: {integrity: sha512-dgX0P/9wGPJeHFBG+ZmhgE6bmtMt7NP5CRBGyyktpopdk/mW4POnrpQsSLtKI1dwpc+pPLuXHDh6vvskyQE/sw==} + cpu: [arm64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4': + resolution: {integrity: sha512-Tg3yX65f5GbtXLkrYEHE5oibZG9epyYWas7FogTTEJeDEF9JlXJzKgXaNhT3UXlTOeA+AfZpYZYZ0uPj7Cfquw==} + cpu: [arm] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4': + resolution: {integrity: sha512-8TNXMEjJc3QEy7R/x1INhgiU+XakDAFUzBhaz7+Rbrs8NH5UQeHQxxmzsSBJGyV6I1jW79undiQm8tOI+D+8FQ==} + cpu: [x64] + os: [linux] + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4': + resolution: {integrity: sha512-CmCXPQrkbwExx3j946/PtHWHbYJiCRBRDl4BlkRQcJB/YOwQxJRTpoo7aTsortjgoJ1x7opzTSxn7C+ASSLVjQ==} + cpu: [x64] + os: [win32] + '@napi-rs/wasm-runtime@0.2.12': resolution: {integrity: sha512-ZVWUcfwY4E/yPitQJl481FjFo3K22D6qF0DuFH6Y/nbnE11GY5uguDxZMGXPQ8WQ0128MXQD7TnfHyK4oWoIJQ==} @@ -1944,6 +2256,9 @@ packages: resolution: {integrity: sha512-V1JJ1WTRUqHHrOSh597hURcMqVKVGL/ea3kv0gSnEdsEZ0/+VyPghM1lMNGc00z7CIQorSvbKpuJkxvuHbvdbg==} engines: {node: '>= 16'} + '@nodable/entities@3.0.0': + resolution: {integrity: sha512-8L9xFeTYKhm49xfIypoe2W5wV1m/3Z58kT+7kR9A8OyFxcPduI4VmxaUMQyKYrRjUoLLSXv6EKKID5Tvj9cUVw==} + '@node-rs/jieba-android-arm-eabi@1.10.4': resolution: {integrity: sha512-MhyvW5N3Fwcp385d0rxbCWH42kqDBatQTyP8XbnYbju2+0BO/eTeCCLYj7Agws4pwxn2LtdldXRSKavT7WdzNA==} engines: {node: '>= 10'} @@ -1985,28 +2300,24 @@ packages: engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [glibc] '@node-rs/jieba-linux-arm64-musl@1.10.4': resolution: {integrity: sha512-Y/tiJ1+HeS5nnmLbZOE+66LbsPOHZ/PUckAYVeLlQfpygLEpLYdlh0aPpS5uiaWMjAXYZYdFkpZHhxDmSLpwpw==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - libc: [musl] '@node-rs/jieba-linux-x64-gnu@1.10.4': resolution: {integrity: sha512-WZO8ykRJpWGE9MHuZpy1lu3nJluPoeB+fIJJn5CWZ9YTVhNDWoCF4i/7nxz1ntulINYGQ8VVuCU9LD86Mek97g==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [glibc] '@node-rs/jieba-linux-x64-musl@1.10.4': resolution: {integrity: sha512-uBBD4S1rGKcgCyAk6VCKatEVQb6EDD5I40v/DxODi5CuZVCANi9m5oee/MQbAoaX7RydA2f0OSCE9/tcwXEwUg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - libc: [musl] '@node-rs/jieba-wasm32-wasi@1.10.4': resolution: {integrity: sha512-Y2umiKHjuIJy0uulNDz9SDYHdfq5Hmy7jY5nORO99B4pySKkcrMjpeVrmWXJLIsEKLJwcCXHxz8tjwU5/uhz0A==} @@ -2047,6 +2358,136 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} + '@opentelemetry/api-logs@0.219.0': + resolution: {integrity: sha512-FFx7YnaYJlIjqWW/AG/yAZ0L/NEY724PipXXXQLdtZPbLwBGbUMTGL1i/esI56TWfTUXxhLfpgrnWJCG8aUJyg==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/api-logs@0.220.0': + resolution: {integrity: sha512-CmVa4ImJ+ynfrPMNaAXHET6Bhb44SwzmfyVJFq9ni2jgXJR/l7C6gfVFddNmHP+ZOkP9cf4f9DBe68qVLTHc9w==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/api@1.9.1': + resolution: {integrity: sha512-gLyJlPHPZYdAk1JENA9LeHejZe1Ti77/pTeFm/nMXmQH/HFZlcS/O2XJB+L8fkbrNSqhdtlvjBVjxwUYanNH5Q==} + engines: {node: '>=8.0.0'} + + '@opentelemetry/context-async-hooks@2.8.0': + resolution: {integrity: sha512-/3FIraneMcng67SUJCxvyInk/oxzwsxyadufk0wwfOBLf5wqtAGX4MoQASwSbndBPeARzBryUM9Azr5kHIdWLw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@2.10.0': + resolution: {integrity: sha512-/wNZ8twnEQQA4HoHu22+vcsdru6pWPWxW+7w+FlxT6Id7PE/WIbZmVKkte+PF72e0F2dnImFeHD2syyE1Mw6MQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@2.8.0': + resolution: {integrity: sha512-hd1Lfh8p545nNz+jq1Ejfz+Mn1hyLuxYn1YzTfFNrxr8urEWMNQLPf1Th8kjOH+HxwawCrtgBp8JpBUR4ZSgww==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/core@2.9.0': + resolution: {integrity: sha512-m2nckMT80NnmjTYSPjJQObBJ+8dgkoajEOUbznL8AHZ3T3yHRk2P7gI1PhEBc1+lOnrYE9UWrWHqJDsmqjmNbw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/exporter-trace-otlp-http@0.219.0': + resolution: {integrity: sha512-9t6SvBXXBEjOBcIzgozvBbd3jWrv3Gt3ngGhl1fhdZ/zRc7oZDVOFEqbi2zlBpW9BXhgDMKv422J0DL/3iQWfw==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-exporter-base@0.219.0': + resolution: {integrity: sha512-zvIxQX/AZUVKDU+hCuYx+7UkiP7GRdnk1ZbFQRYzHvYp47cAWR4j3IhoPhV9KaeXEv2xdGq3IA6PnpzDmLcmSA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/otlp-transformer@0.219.0': + resolution: {integrity: sha512-aaYKAyXhw9VchKZVGOopD3Gw/kPsyrX2c6IQ0AW32mTjqmZOh5Y6Gf5OYqTNqVktAeBjmFinhyFaCwW6GYK9YQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': ^1.3.0 + + '@opentelemetry/resources@2.10.0': + resolution: {integrity: sha512-q6MMm2zhggzsHVNbabYwut+a6nbuQQe3URUoxaojM/8K1IBfwwPzvxIjNi2/lI1TFe+fMHMW9MWhrtDLEXEnkA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/resources@2.8.0': + resolution: {integrity: sha512-qmXQ27ilDbUK/vGMqwL8D4/rhn76C+sherM4wTbjlfknR8Nvfc/hCxjRJPhkzZzUsPiNg16SA31NxMabwttRjg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/resources@2.9.0': + resolution: {integrity: sha512-jyA5MBLQ+Dkl3+JsZkUoUvL7yHvU64kLsvpXKarWm6347Sl1t1bXFTFykUePNpT5WH5pm9a2Qtt03iIYQhZ1Fg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.219.0': + resolution: {integrity: sha512-s6lTKRakaPClvKoWHRChxnXjDMkM/TQ30ff78jN6EBGf7MI7VzANE5PU3f4z9qDUudWjvZjOLHG0rBnBKYvoXA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-logs@0.220.0': + resolution: {integrity: sha512-WywcTkQtv2iNmt+6y5Kcd4rzvx9bLVsBa2Nwcmg01IUaBTkTow3W4d9KE5vNBpEDtb9tp21WcRBY/lANRrApYA==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.4.0 <1.10.0' + + '@opentelemetry/sdk-metrics@2.10.0': + resolution: {integrity: sha512-t6r1VSvXNtSDnPXU1FbZeetJb7yyovHmgu0wRSoftxtE0g2rSNhQZQUy69sRUCL+iioJpX8SN/S6wq6ZtvLySQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.9.0 <1.10.0' + + '@opentelemetry/sdk-metrics@2.8.0': + resolution: {integrity: sha512-UDBGaj6W0Rgy5rTTaoxs8gVGF/aGkAKyjurJv7se6wjRxJu7FoquTLT/vt54DZfo4crbprYfhX/SOK9+BPw1qg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.9.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.10.0': + resolution: {integrity: sha512-GuYQQT7QD2EeO8lcZLRQzcbOyhqAzL+6WWTKTU9mSUBYBazkEDl+VrQcXQhbB08OWM9anD1aHleVadzulpOaUQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-base@2.8.0': + resolution: {integrity: sha512-mhU4jp+vW0mGbFRd+GeXHvmfA4aDqWjBjLC3pE5XMpLs0IE2ryYb019Ts2AQrOq67gaTF25D91+fgvEHDZEnuQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/sdk-trace-node@2.8.0': + resolution: {integrity: sha512-nZt9OGufioAc3AfoLTqA9bsAeaMJAictYDdI2VcNQ+PmT+3rfKjAZDZvgPfd8VPX0O5Bw1hdQF6kDK8VSpZiWg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace-web@2.8.0': + resolution: {integrity: sha512-P3ZM8BGJ5mwjtyfAxRyxsCyWHvaj+xahdhLoS3YiPsEyTHcWTVzx2691C8SrGkpvro3tNFCsWuNNrvM+spKODg==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.0.0 <1.10.0' + + '@opentelemetry/sdk-trace@2.10.0': + resolution: {integrity: sha512-MfQGq3GRmTh5fM/y+OjaO0vj6+luCB1XO2gfXCalKCfgKw0eHL++sm75DNweC6ohlp+aFvACqeE0fYayqdRaoQ==} + engines: {node: ^18.19.0 || >=20.6.0} + peerDependencies: + '@opentelemetry/api': '>=1.3.0 <1.10.0' + + '@opentelemetry/semantic-conventions@1.43.0': + resolution: {integrity: sha512-eSYWTm620tTk45EKSedaUL8MFYI8hW164hIXsgIHyxu3VobUB3fFCu5t0hQby6OoWRPsG1KkKUG2M5UadiLiVg==} + engines: {node: '>=14'} + '@oxc-parser/binding-android-arm-eabi@0.139.0': resolution: {integrity: sha512-22EsXTA3Vc7OvrF4bfT48PFln2UbxkVgrp/Tm32qLw76Dv7SmcInfClJe6yPYamnli6HiqasnESZ5ezN+X4ybg==} engines: {node: ^20.19.0 || >=22.12.0} @@ -2094,56 +2535,48 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] '@oxc-parser/binding-linux-arm64-musl@0.139.0': resolution: {integrity: sha512-u9e884ChAVRmIZ1jr/m46S96FoDQnruFjISLi4Y0i6Wu/JUUmIiw7+umLyXILJsPfUuqnN5BJLe23t07+Y6+IA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] '@oxc-parser/binding-linux-ppc64-gnu@0.139.0': resolution: {integrity: sha512-Z9tU2b3GJfAXOdirQmz4gZQkQkVjy53i77gf91l0733MQKa/qtk73KQQE2GzDtMqim+HyjpzvemmqzBtH2IJUA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [glibc] '@oxc-parser/binding-linux-riscv64-gnu@0.139.0': resolution: {integrity: sha512-RyUbr7hzPK84YDWKs77PRYk9VBwWbsbuYsQzQWiSmLnARXTg2zntLPGfCH/1wpfUYdmGkp/6SsqTXSsYdw9Jgw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [glibc] '@oxc-parser/binding-linux-riscv64-musl@0.139.0': resolution: {integrity: sha512-dcQhjtcDvtR8BgkUpt03Yz5SzxdzYvTigenIJOEsiSX6G2t6yybEMxGWjp0dOuYGror0BaqcZfTyXR58amCEig==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [riscv64] os: [linux] - libc: [musl] '@oxc-parser/binding-linux-s390x-gnu@0.139.0': resolution: {integrity: sha512-iuGrxysV4rGUymdKpn7bgZQ6Vix8Bi/6D/rp71HYIzphq6NKrsBhsGOYsSZte+uBFL43tXh7Xr7TM72sGliJNA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - libc: [glibc] '@oxc-parser/binding-linux-x64-gnu@0.139.0': resolution: {integrity: sha512-NxJdZZyaa2JLLvNfH/iJQXfCNfKcPMylwY4ObMpBVmW4Nq+RyUpVVQXrMMelcQ6rwx3nuhF1Iga8n+eoAKGCIA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] '@oxc-parser/binding-linux-x64-musl@0.139.0': resolution: {integrity: sha512-ePxBvvtzISmSsJ0RIj8FNikSCn58i1jtccj7XR4U9Li4iSzhkFyYlnJ51cQTUwkairz8WMTD4SpKoot8RyTnQA==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] '@oxc-parser/binding-openharmony-arm64@0.139.0': resolution: {integrity: sha512-b/c2+mPXMOxG5x16n8yf9cjor/ntQQScmYnSmLEWIWJ4rfXd5dokMxx0kliSLA+YAGq6DD3K9BWi+aFXHiiV1w==} @@ -2209,42 +2642,36 @@ packages: engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - libc: [glibc] '@parcel/watcher-linux-arm-musl@2.5.6': resolution: {integrity: sha512-Ve3gUCG57nuUUSyjBq/MAM0CzArtuIOxsBdQ+ftz6ho8n7s1i9E1Nmk/xmP323r2YL0SONs1EuwqBp2u1k5fxg==} engines: {node: '>= 10.0.0'} cpu: [arm] os: [linux] - libc: [musl] '@parcel/watcher-linux-arm64-glibc@2.5.6': resolution: {integrity: sha512-f2g/DT3NhGPdBmMWYoxixqYr3v/UXcmLOYy16Bx0TM20Tchduwr4EaCbmxh1321TABqPGDpS8D/ggOTaljijOA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] '@parcel/watcher-linux-arm64-musl@2.5.6': resolution: {integrity: sha512-qb6naMDGlbCwdhLj6hgoVKJl2odL34z2sqkC7Z6kzir8b5W65WYDpLB6R06KabvZdgoHI/zxke4b3zR0wAbDTA==} engines: {node: '>= 10.0.0'} cpu: [arm64] os: [linux] - libc: [musl] '@parcel/watcher-linux-x64-glibc@2.5.6': resolution: {integrity: sha512-kbT5wvNQlx7NaGjzPFu8nVIW1rWqV780O7ZtkjuWaPUgpv2NMFpjYERVi0UYj1msZNyCzGlaCWEtzc+exjMGbQ==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - libc: [glibc] '@parcel/watcher-linux-x64-musl@2.5.6': resolution: {integrity: sha512-1JRFeC+h7RdXwldHzTsmdtYR/Ku8SylLgTU/reMuqdVD7CtLwf0VR1FqeprZ0eHQkO0vqsbvFLXUmYm/uNKJBg==} engines: {node: '>= 10.0.0'} cpu: [x64] os: [linux] - libc: [musl] '@parcel/watcher-win32-arm64@2.5.6': resolution: {integrity: sha512-3ukyebjc6eGlw9yRt678DxVF7rjXatWiHvTXqphZLvo7aC5NdEgFufVwjFfY51ijYEWpXbqF5jtrK275z52D4Q==} @@ -2319,6 +2746,15 @@ packages: resolution: {integrity: sha512-SEeaJLb3qBNF/OaXnaR1NmmBbFYk1zC0ZH/52fATcRPLFg/p791YrcyFFy44Bo9sLaGuSuLp5Q6axbb/O+v/RA==} engines: {node: ^14.18.0 || >=16.0.0} + '@playwright/browser-chromium@1.62.1': + resolution: {integrity: sha512-DU/t4TSqHvAc+uFMt972forQYqBTh/ul7lZ8U81HYGyxnf6vSPPz9NzuE0OR3x/elqvvGm+n4gcny+QSKT+FDw==} + engines: {node: '>=20'} + + '@playwright/test@1.62.1': + resolution: {integrity: sha512-DTcUc8qii+cpHvtOwggMtBRMjKZHXYWdw8syRYu2vtzuq4Wxphqq4NfCs5Zt44L6mA8rfDfj+PHnxFc/FeK6mQ==} + engines: {node: '>=20'} + hasBin: true + '@pnpm/config.env-replace@1.1.0': resolution: {integrity: sha512-htyl8TWnKL7K/ESFa1oW2UB5lVDxuF5DpM7tBi6Hu2LNL3mWkIzNLG6N4zoCUP1lCKNxWy/3iu8mS8MvToGd6w==} engines: {node: '>=12.22.0'} @@ -2373,42 +2809,36 @@ packages: engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [glibc] '@rolldown/binding-linux-arm64-musl@1.2.1': resolution: {integrity: sha512-Sm41FyCeXqmYcERoYOCbGIL5hNfd8w9LQ7Y61Bev48HkcjaJqV/iiVOaiDxjVTRMS+QKrZmD8cfPt4uMVnvM+A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [arm64] os: [linux] - libc: [musl] '@rolldown/binding-linux-ppc64-gnu@1.2.1': resolution: {integrity: sha512-2x+WhXTGl9yJYPbltW/BSEPTVz9OIWQyER4N+gJEDWkkn904eRcBzELqh/Hf7K0w/ubGbKNMv0ZC+94QK/IFEg==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [ppc64] os: [linux] - libc: [glibc] '@rolldown/binding-linux-s390x-gnu@1.2.1': resolution: {integrity: sha512-eEjmQpuRQayHPWWnywaWHkFT3ToPbP3RYy42VVd/B9aBGDA+Ol25EIWHxKQST3IiWJjikCWUF7KtbfqwZrzVwQ==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [s390x] os: [linux] - libc: [glibc] '@rolldown/binding-linux-x64-gnu@1.2.1': resolution: {integrity: sha512-/Orga1fZYkLc/56jBICcHrKchl8Z2UKdDSr3LG9ToWO1lQ6a4Livk9Xz+9WN91zsz5QR3XQz2NNoSDEvP6qadw==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [glibc] '@rolldown/binding-linux-x64-musl@1.2.1': resolution: {integrity: sha512-xxBJRL+0q0Kce7orznGWLuylHDY65vuARXZRpX+hPdv+DqK2c3NlCsVA98tlWzWNEE7yPqA/1NQ5nnCrj49Y5A==} engines: {node: ^20.19.0 || >=22.12.0} cpu: [x64] os: [linux] - libc: [musl] '@rolldown/binding-openharmony-arm64@1.2.1': resolution: {integrity: sha512-M6AdXIXw3s+/8XpKMzdGDEXGS1S7kwUsy+rcTIUIOx5Ge4nXKCtAFHFV9YKkXvGcC5WMoTjAteLzlsQROVI0Yw==} @@ -2526,79 +2956,66 @@ packages: resolution: {integrity: sha512-ggXnsTAEzNQx74XpunRsiZ9aBZDsI7XIa0hm2nzR9f4WzH5/f/d73ZSDaC5ejJ8YLY4NW+V3wr0tjOaeCq8hqA==} cpu: [arm] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm-musleabihf@4.62.3': resolution: {integrity: sha512-2vng+FlzNUhKZxtej3IUqJgbZoQk2M/dwQM20+ULV0R/E/8tr9/P6uEf2iiGIk4HL0zMKh5Jry7mUHdUOvyGgA==} cpu: [arm] os: [linux] - libc: [musl] '@rollup/rollup-linux-arm64-gnu@4.62.3': resolution: {integrity: sha512-LLLFZKt4/Nraf9rxDkhiU8QVgLF4WmCkfr0L4fj0fPfIZFBib0DeiFk1hhaYKd03LFAFJcxHslhDFlNJLylf5Q==} cpu: [arm64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-arm64-musl@4.62.3': resolution: {integrity: sha512-WJkdQCvS9sWNOUBJZfQRKpZGFBztRzcowI+nndmflKgU4XY+3a420FgTOSKTsVqJbnzSxeT4vaJalpOaPo2YCQ==} cpu: [arm64] os: [linux] - libc: [musl] '@rollup/rollup-linux-loong64-gnu@4.62.3': resolution: {integrity: sha512-PwHXCCS2n64/1Ot6rP1YEYA02MGYBcQlr8CSZZyrUG2O7NH6NklYmvr9v3Jy+5e/eDeNchc/ukmKJi9LuflMIQ==} cpu: [loong64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-loong64-musl@4.62.3': resolution: {integrity: sha512-vUjxINQu3RC8NZS3ykk1gN65gIz8pAopOq2HXuZhiIxHdx7TFvDG+jgrdSgInu1Eza4/Rfi2VzZgyIgEH4WOaw==} cpu: [loong64] os: [linux] - libc: [musl] '@rollup/rollup-linux-ppc64-gnu@4.62.3': resolution: {integrity: sha512-wzko4aJ13+0G3kGnviCg5gnXFKd40izKsrf2uOw12US4XqprkDrmwOpeW14aSNa37V8bfPcz5Fkob6LZ3BAPmA==} cpu: [ppc64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-ppc64-musl@4.62.3': resolution: {integrity: sha512-8120ue0JUMSwy11stlwnfdX3pPd+WZYGCDBwEHWtIHi6pOpZmsEF5QKB7a/UN+XFdqvobxz98kv8RTqikyCEBw==} cpu: [ppc64] os: [linux] - libc: [musl] '@rollup/rollup-linux-riscv64-gnu@4.62.3': resolution: {integrity: sha512-XLFHnR3tXMjbOCh2vtVJHmxt+995uJsTERQyseFDRA0xxMxyTZPLa3OIUlyFaO4mF/Lu0FjmWHCuPXJT1n/IOg==} cpu: [riscv64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-riscv64-musl@4.62.3': resolution: {integrity: sha512-se6yXvNGMIl0f+RQzyh7XAmia8/9kplQx424wnG2w0C1oi6XgO6Y8otKhdXFHbHs88Ihavzmvh1NWjuovE76BQ==} cpu: [riscv64] os: [linux] - libc: [musl] '@rollup/rollup-linux-s390x-gnu@4.62.3': resolution: {integrity: sha512-gNoxRefktVIiGflpONuxWWXZAzIQG++z9qHO3xKwk4WdDMuQja3JHGfE1u0i3PfPDyvhypdk+WrgIJqLhGG7sg==} cpu: [s390x] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-gnu@4.62.3': resolution: {integrity: sha512-V4KtWtQfAFMU7+9/A/VDps/VI8CHd3cYz0L8sgJzz8qK7eY7wI4ruFD82UYIYvW9Z4DtlTfhQcsl4XyPHW5uSg==} cpu: [x64] os: [linux] - libc: [glibc] '@rollup/rollup-linux-x64-musl@4.62.3': resolution: {integrity: sha512-LBx9LYXvj2CBkMkjLdNAWLwH0MLMin7do2VcVo9kVPibGLkY0BQQut2fv7NVqkXqZ/CrAu9LqDHVV1xHCMpCPw==} cpu: [x64] os: [linux] - libc: [musl] '@rollup/rollup-openbsd-x64@4.62.3': resolution: {integrity: sha512-ABVf3Q0RCu7NcyCCOZQI0pJ3GuSdfSl8EXcy88QtdceIMIoCUdfhsJChZ64L9zVM2aJHjde1Bhn5uqSRcX9ySA==} @@ -2644,25 +3061,21 @@ packages: resolution: {integrity: sha512-C8owWG+yvo7X0oVLIXetkoJhIFBP1LYNcAQqtgLmJnQLQDklGuP83dKC+zISGQWpjawHfZ1ER96vLgoTrxKZdw==} cpu: [arm64] os: [linux] - libc: [glibc] '@rspack/binding-linux-arm64-musl@1.7.12': resolution: {integrity: sha512-i51WWI64aRpsfSki6rN0aepPqXkVfS+vZM7+4bWDcmnhUmdMvhIPcYg0QRk3DtyJnu33jqNLM0WHY78k00NyfA==} cpu: [arm64] os: [linux] - libc: [musl] '@rspack/binding-linux-x64-gnu@1.7.12': resolution: {integrity: sha512-MSos0FuPEefqo9V92ULd5hggKG29EkSNg1zDcypy0OkpsKh5pfjVxTLYFXgTcVyFoUQQbdG8zFBzYbwmJ8V4ew==} cpu: [x64] os: [linux] - libc: [glibc] '@rspack/binding-linux-x64-musl@1.7.12': resolution: {integrity: sha512-JcAMVKXOnjfpC3coWjCFPWD3Yl8RBw6a+IXQQ8mfRlHaHMIiOv8IfZqx15XRxMUn49CtP7Z0Na8iiAg2aKrcfw==} cpu: [x64] os: [linux] - libc: [musl] '@rspack/binding-wasm32-wasi@1.7.12': resolution: {integrity: sha512-n+ZqP6ZMc0nhOgvadg5VhEs9ojtbES80AcWeFnmGkbzIszvGSO63GKNiRkXtjJ9KFuRzytbbmsCqkUVH+Tywxg==} @@ -2698,22 +3111,85 @@ packages: '@rspack/lite-tapable@1.1.0': resolution: {integrity: sha512-E2B0JhYFmVAwdDiG14+DW0Di4Ze4Jg10Pc4/lILUrd5DRCaklduz2OvJ5HYQ6G+hd+WTzqQb3QnDNfK4yvAFYw==} - '@salesforce/apex-node@9.0.2': - resolution: {integrity: sha512-TD7REX5rTf60pH2DzY5DgbFOsonmwqAQLmfw6mTHTGTbx8jCEcPgaa1F2mvQn7Vg2i7r+ifbJ9YPkwn7aqXF5w==} - engines: {node: '>=22.0.0'} - '@salesforce/core@9.1.0': resolution: {integrity: sha512-ID9g4YH0yZBeWI0eKJv2IJRRN6ZuNjwpIOjEZm9a79Gzxa3IITsV4PCvD8q7JA3PKqiln57p8yJE458Kn5KW1g==} engines: {node: '>=22.0.0'} + '@salesforce/core@9.1.4': + resolution: {integrity: sha512-S4VZ0xstYOAs5dwt7EDGkuFZA8rddy0wmuPTGjsIhgAPzuq3I5lKyBNwqXMMxdhBcWi+P4cXccHLpOYivgdrXQ==} + engines: {node: '>=22.0.0'} + '@salesforce/kit@4.0.0': resolution: {integrity: sha512-VwxhSH/8PQ5YmPAdhmLaJGCgR0n/pOm8T2y+/odMFthd5SA0xsO/kTdaRLFnFQAxxNj1nYtNHRb+BoMuAatzew==} engines: {node: '>=22.0.0'} + '@salesforce/playwright-vscode-ext@1.3.11': + resolution: {integrity: sha512-3gqNjZY6nvzkfos01g0n7d2TfxSxPURv+yw7zq79IZV0bq3KopakSgkBsoWMGyAiUFdvfoe6+Nx3m10vVtGwQA==} + + '@salesforce/source-deploy-retrieve@13.2.0': + resolution: {integrity: sha512-4R3Sd6it/oX8IRm5JGvi6fba0318VVHz/bgsDFEchHo8ed73LU021nWJJ5hBcveHdW+MUJioO9rU7MCOYLh1uA==} + engines: {node: '>=22.0.0'} + + '@salesforce/source-tracking@8.1.0': + resolution: {integrity: sha512-ookx5YVI4ddEkNWwSkqPrXU5MKXkcuGig0rW7FzBtDnpIZU8q3+elilIJ5PI/YXBAIpUZl69Alsjh6+Bl7ZqeA==} + engines: {node: '>=22.0.0'} + '@salesforce/ts-types@3.0.1': resolution: {integrity: sha512-NWkveMYT2I3O7EAYwWHi6/ba2YUwp9MFi/zJzA+czK5MVqJfdD6FZbiQrTbALZNvFzgFSdq9BvHm6ygRmtROzw==} engines: {node: '>=22.0.0'} + '@salesforce/types@1.8.0': + resolution: {integrity: sha512-sliQcoI0XeR3YYUElIV3z93l7ZL9lDtnegVGbknBFbQKjN/oxH/PQSiM4imnXnModhFQSoe/V3mGXniASoLNvA==} + engines: {node: '>=18'} + + '@salesforce/vscode-services@67.13.3': + resolution: {integrity: sha512-45EukRQHuDT54Eafa+McrUofz1iXSCoMueXdTmwLj6JmXchL4wxoHHBOYv+x7yRAhdiiSfOxdySZ0Zqf+1SwwQ==} + + '@secretlint/config-creator@10.2.2': + resolution: {integrity: sha512-BynOBe7Hn3LJjb3CqCHZjeNB09s/vgf0baBaHVw67w7gHF0d25c3ZsZ5+vv8TgwSchRdUCRrbbcq5i2B1fJ2QQ==} + engines: {node: '>=20.0.0'} + + '@secretlint/config-loader@10.2.2': + resolution: {integrity: sha512-ndjjQNgLg4DIcMJp4iaRD6xb9ijWQZVbd9694Ol2IszBIbGPPkwZHzJYKICbTBmh6AH/pLr0CiCaWdGJU7RbpQ==} + engines: {node: '>=20.0.0'} + + '@secretlint/core@10.2.2': + resolution: {integrity: sha512-6rdwBwLP9+TO3rRjMVW1tX+lQeo5gBbxl1I5F8nh8bgGtKwdlCMhMKsBWzWg1ostxx/tIG7OjZI0/BxsP8bUgw==} + engines: {node: '>=20.0.0'} + + '@secretlint/formatter@10.2.2': + resolution: {integrity: sha512-10f/eKV+8YdGKNQmoDUD1QnYL7TzhI2kzyx95vsJKbEa8akzLAR5ZrWIZ3LbcMmBLzxlSQMMccRmi05yDQ5YDA==} + engines: {node: '>=20.0.0'} + + '@secretlint/node@10.2.2': + resolution: {integrity: sha512-eZGJQgcg/3WRBwX1bRnss7RmHHK/YlP/l7zOQsrjexYt6l+JJa5YhUmHbuGXS94yW0++3YkEJp0kQGYhiw1DMQ==} + engines: {node: '>=20.0.0'} + + '@secretlint/profiler@10.2.2': + resolution: {integrity: sha512-qm9rWfkh/o8OvzMIfY8a5bCmgIniSpltbVlUVl983zDG1bUuQNd1/5lUEeWx5o/WJ99bXxS7yNI4/KIXfHexig==} + + '@secretlint/resolver@10.2.2': + resolution: {integrity: sha512-3md0cp12e+Ae5V+crPQYGd6aaO7ahw95s28OlULGyclyyUtf861UoRGS2prnUrKh7MZb23kdDOyGCYb9br5e4w==} + + '@secretlint/secretlint-formatter-sarif@10.2.2': + resolution: {integrity: sha512-ojiF9TGRKJJw308DnYBucHxkpNovDNu1XvPh7IfUp0A12gzTtxuWDqdpuVezL7/IP8Ua7mp5/VkDMN9OLp1doQ==} + + '@secretlint/secretlint-rule-no-dotenv@10.2.2': + resolution: {integrity: sha512-KJRbIShA9DVc5Va3yArtJ6QDzGjg3PRa1uYp9As4RsyKtKSSZjI64jVca57FZ8gbuk4em0/0Jq+uy6485wxIdg==} + engines: {node: '>=20.0.0'} + + '@secretlint/secretlint-rule-preset-recommend@10.2.2': + resolution: {integrity: sha512-K3jPqjva8bQndDKJqctnGfwuAxU2n9XNCPtbXVI5JvC7FnQiNg/yWlQPbMUlBXtBoBGFYp08A94m6fvtc9v+zA==} + engines: {node: '>=20.0.0'} + + '@secretlint/source-creator@10.2.2': + resolution: {integrity: sha512-h6I87xJfwfUTgQ7irWq7UTdq/Bm1RuQ/fYhA3dtTIAop5BwSFmZyrchph4WcoEvbN460BWKmk4RYSvPElIIvxw==} + engines: {node: '>=20.0.0'} + + '@secretlint/types@10.2.2': + resolution: {integrity: sha512-Nqc90v4lWCXyakD6xNyNACBJNJ0tNCwj2WNk/7ivyacYHxiITVgmLUFXTBOeCdy79iz6HtN9Y31uw/jbLrdOAg==} + engines: {node: '>=20.0.0'} + '@sideway/address@4.1.5': resolution: {integrity: sha512-IqO/DUQHUkPeixNQ8n0JA6102hT9CmaljNTPmQ1u8MEhBo/R4Q8eKLN/vGZxuebwOroDB4cbpjheD4+/sKFK4Q==} @@ -2737,7 +3213,11 @@ packages: resolution: {integrity: sha512-TV7t8GKYaJWsn00tFDqBw8+Uqmr8A0fRU1tvTQhyZzGv0sJCGRQL3JGMI3ucuKo3XIZdUP+Lx7/gh2t3lewy7g==} engines: {node: '>=14.16'} - '@sinonjs/commons@3.0.1': + '@sindresorhus/merge-streams@2.3.0': + resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} + engines: {node: '>=18'} + + '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} '@sinonjs/fake-timers@15.4.0': @@ -2752,6 +3232,9 @@ packages: '@slorber/remark-comment@1.0.0': resolution: {integrity: sha512-RCE24n7jsOj1M0UPvIQCHTe7fI0sFL4S2nwKVWwHyVr/wI/H8GosgsJGyhnsZoGFnD/P2hLf1mSbrrgSLN93NA==} + '@standard-schema/spec@1.1.0': + resolution: {integrity: sha512-l2aFy5jALhniG5HgqrD6jXLi/rUWrKvqN/qJx6yoJsgKhblVd+iqqU4RCXavm/jPityDo5TCvKMnpjKnOriy0w==} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0': resolution: {integrity: sha512-b9MIk7yhdS1pMCZM8VeNfUlSKVRhsHZNMl5O9SfaX0l0t5wjdgu4IDzGB8bpnGBBOjGST3rRFVsaaEtI4W6f7g==} engines: {node: '>=14'} @@ -2853,42 +3336,36 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [glibc] '@swc/core-linux-arm64-musl@1.15.47': resolution: {integrity: sha512-3Yu3Uq/VgytqsPjTMbkPU1ExADytbdWbruJYhA584E9jrpE2Ki+R6VVPoZCeAVk1Cb7QxcRTgblw6bSa6a/R+w==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [musl] '@swc/core-linux-ppc64-gnu@1.15.47': resolution: {integrity: sha512-wfdMi5IaOaNtmh2/6geRoxIdNfqylUZFdtzTKS655y1axWfIWyx7As74vv0wVdjeCIZ3WmCI9odDd4rUttXOSQ==} engines: {node: '>=10'} cpu: [ppc64] os: [linux] - libc: [glibc] '@swc/core-linux-s390x-gnu@1.15.47': resolution: {integrity: sha512-3hHYBY0yx8Ez7GMRrkhXHQzMdR5IZA6Wq5Ee4svlgwvSECLpnAJ9+0AimEGUFDvuLwE7nV/2+PYe8+Nm4rvNcQ==} engines: {node: '>=10'} cpu: [s390x] os: [linux] - libc: [glibc] '@swc/core-linux-x64-gnu@1.15.47': resolution: {integrity: sha512-TjfhjgP/jGCfFHYC3JQPhJA1HwErbIJ9JfREDc1KNkvY6P0LodCgKVIlQ5deeTbkG7ih3bF5PHJLuLpaZjdRyQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [glibc] '@swc/core-linux-x64-musl@1.15.47': resolution: {integrity: sha512-CQpS8Ge/avfjZd0UEwG/sds83Uu32deQXcV1Jo3jD0mmvQQqtYAjpsDZXugmheeAwmt+YIuoVtVHro8LMYHqsQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [musl] '@swc/core-win32-arm64-msvc@1.15.47': resolution: {integrity: sha512-0W8IKHsUTYiT7G2RqtOoVWk+89yzZikIiDUb/sCK6BmQDBhN91hQSfyUtW12jhEWLzYgcfmisfsZrmZE+84U1A==} @@ -2946,42 +3423,36 @@ packages: engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [glibc] '@swc/html-linux-arm64-musl@1.15.47': resolution: {integrity: sha512-NyXRQiVBkeutgCwCxUUaFqZdDmpZONs7Zz3AZGoY35s9GwXF412Nt22fK/e7lO/sM6G/+S3rOom/0xTmUQSK6A==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - libc: [musl] '@swc/html-linux-ppc64-gnu@1.15.47': resolution: {integrity: sha512-rQ+XLJHFzu0e4M5p1+8kF2FKzI7WO9KPPji87OuicHZVrDCEqg7/jSGu3hys9CjIQIYVfR+tAFuZz3Q1/jOoNA==} engines: {node: '>=10'} cpu: [ppc64] os: [linux] - libc: [glibc] '@swc/html-linux-s390x-gnu@1.15.47': resolution: {integrity: sha512-w6bitHrllrE3lqmf14cT3spmWhZHGts1O08O4adzxztSPto7O5GM3IerqZm/NtsqlxNsfbVHnhaNXxXWe/8Q+Q==} engines: {node: '>=10'} cpu: [s390x] os: [linux] - libc: [glibc] '@swc/html-linux-x64-gnu@1.15.47': resolution: {integrity: sha512-FTA7E29gcyadd71prg8sJUVacYrIhAXS8L7p48yCfgcNOKquofN1TDOrHVOyYMoxplL3FUwwbN+AZxWO7QfWPQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [glibc] '@swc/html-linux-x64-musl@1.15.47': resolution: {integrity: sha512-g+K1GKUrj+S9o8Qsgii2g7ooMzZ750R4IAqH5CVElIA5FTMAx7KGnu9ga6aEnRwwLYxY3s1k/nN+ls0NEk240g==} engines: {node: '>=10'} cpu: [x64] os: [linux] - libc: [musl] '@swc/html-win32-arm64-msvc@1.15.47': resolution: {integrity: sha512-5Iw3i00JdTySi+ccc2CM5bxY+8TZivQmcTqUC6mUdAY0/KYBgSe1/L294UJQ4OTLQqNDOYXY9jdb070zZUX7jg==} @@ -3014,10 +3485,33 @@ packages: '@swc/types@0.1.27': resolution: {integrity: sha512-K6h3iUlqeM946U4sXFYeahefR1YBbXJvko+hv8WS8/0BNJ4OHiHRywMnQUJCqkR7Y9+hqQ1TvEpiKqUhz7NEFg==} + '@szmarczak/http-timer@4.0.6': + resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} + engines: {node: '>=10'} + '@szmarczak/http-timer@5.0.1': resolution: {integrity: sha512-+PmQX0PiAYPMeVYe237LJAYvOMYW1j2rH5YROyS3b4CTVJum34HfRvKvAzozHAQG0TnHNdUfY9nCeUyRAs//cw==} engines: {node: '>=14.16'} + '@textlint/ast-node-types@15.8.0': + resolution: {integrity: sha512-5CiH9COYmovWmExQgs7763DzX6Gy9zjkjJ7JxCC95wyTcjwQn/8poNF6fv3qzRlmx8CRRde8DHr9FcgAAiPzgw==} + + '@textlint/linter-formatter@15.8.0': + resolution: {integrity: sha512-+oU3A235NATv6Lzi4xa4kJ65PuNJlIxesaO4AvDhDWA9FWm7y4XKWaoQCW1esgaQQ6dwnUiFKArQ8TcJ86mC4w==} + engines: {node: '>=20.18.0'} + + '@textlint/module-interop@15.8.0': + resolution: {integrity: sha512-rt+OR1WYGoLOY8HkA/aBPrqufF6yUUEsKEAh7XohTsT3lp9IyZFT6zOIbjul9P4FAzsmSPkcrYjVx3Bz/IUfkg==} + + '@textlint/resolver@15.8.0': + resolution: {integrity: sha512-E88tzfX3K8Jykk+38aJ9cy8RquD8ABVOPTO2rFEESq0wcg8x6/ypdAS8ZgR7OKiGqlRF0hkO/m5PbQwVfKM3VA==} + + '@textlint/types@15.8.0': + resolution: {integrity: sha512-Anhc6y5736YIsvqae0U6k0YmB2M/QVHkEeOv2aydAn/WIkdI69dCOiDbe3/+RagS3qstFTSFWJzNRA2lUjv19w==} + + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@tybys/wasm-util@0.10.3': resolution: {integrity: sha512-F3fo1MYrRJYL3zER0OUOmkutjr1Vp23m7OsSgp7nq4SP6OqX6C/56XFIPAl5bt3zaBRjmW7SGz3u/6LwFpYcOg==} @@ -3039,6 +3533,9 @@ packages: '@types/bonjour@3.5.13': resolution: {integrity: sha512-z9fJ5Im06zvUL548KvYNecEVlA7cVDkGUi6kZusb04mpyEFKCIZJvloCcmpmLaIahDpOQGHaHmG6imtPMmPXGQ==} + '@types/cacheable-request@6.0.3': + resolution: {integrity: sha512-IQ3EbTzGxIigb1I3qPZc1rWJnH0BmSKv5QYTalEwweFvyBDLSAe24zP0le/hyi7ecGfZVlIVAg4BZqb8WBwKqw==} + '@types/connect-history-api-fallback@1.5.4': resolution: {integrity: sha512-n6Cr2xS1h4uAulPRdlw6Jl6s1oG8KrVilPN2yUITEs+K48EzMJJ3W1xy8K5eWuFvjp3R74AOIGSmp2UfBJ8HFw==} @@ -3108,6 +3605,9 @@ packages: '@types/json-schema@7.0.15': resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/keyv@3.1.4': + resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} + '@types/mdast@4.0.4': resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} @@ -3127,6 +3627,9 @@ packages: '@types/node@22.20.1': resolution: {integrity: sha512-EANqOCF9QFyra+4pfxUcX9STKJpCLjMbObVzljIJomAWSnuSIEAvyzEU53GaajbXJEgdh0iEcPL+DGvpUd4k1Q==} + '@types/normalize-package-data@2.4.4': + resolution: {integrity: sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==} + '@types/prismjs@1.26.6': resolution: {integrity: sha512-vqlvI7qlMvcCBbVe0AKAb4f97//Hy0EBTaiW8AalRnG/xAN5zOiWWyrNqNXeq8+KAuvRewjCVY1+IPxk4RdNYw==} @@ -3154,6 +3657,12 @@ packages: '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + '@types/responselike@1.0.3': + resolution: {integrity: sha512-H/+L+UkTV33uf49PH5pCAUBVPNj2nDBXTN+qS1dOwyyg24l3CcicicCA7ca+HMvJBZcFgl5r8e+RR6elsb4Lyw==} + + '@types/sarif@2.1.7': + resolution: {integrity: sha512-kRz0VEkJqWLf1LLVN4pT1cg1Z9wAuvI6L97V3m2f5B76Tg8d413ddvLBPTEHAZJlnn4XSvu0FkZtViCQGVyrXQ==} + '@types/sax@1.2.7': resolution: {integrity: sha512-rO73L89PJxeYM3s3pPPjiPgVVcymqU490g0YO5n5By0k2Erzj6tay/4lr1CHAAU4JyOWd1rpQ8bCf6cZfHU96A==} @@ -3379,6 +3888,10 @@ packages: resolution: {integrity: sha512-mbCddXd+jm7hfx7w2YU64/Av4/NqqeG3GoRZgxPcgoTxYjhrcfJRw9ULch71SS4G+Q3bOXFhRvPqjguN0Hyp5w==} hasBin: true + '@typespec/ts-http-runtime@0.3.8': + resolution: {integrity: sha512-bLMpVcWZNzq6lYOybwFwOAR1IXKcHnhUNqYeHjl1bET/qE3jFPFH+p8Wrh3rU4xwdnifPxmKNESBYnvnmc75aA==} + engines: {node: '>=22.0.0'} + '@ungap/structured-clone@1.3.0': resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} deprecated: Potential CWE-502 - Update to 1.3.1 or higher @@ -3428,61 +3941,51 @@ packages: resolution: {integrity: sha512-zJc0H99FEPoFfSrNpa91HYfxzfAJCr502oxNK1cfdC9hlaFI43RT+JFCann9JUgZmLzzntChHyn13Sgn9ljHNg==} cpu: [arm64] os: [linux] - libc: [glibc] '@unrs/resolver-binding-linux-arm64-musl@1.12.2': resolution: {integrity: sha512-KQ3Lki6l+Pz1k/eBipN41ES+YUK30beLGb9YqcB1O542cyLCNE6GaxrfcY3T6EezmGGk84wb5XyO9loTM9tkcA==} cpu: [arm64] os: [linux] - libc: [musl] '@unrs/resolver-binding-linux-loong64-gnu@1.12.2': resolution: {integrity: sha512-3SJGEh1DborhG6pyxvhPzCT4bbSIVihsvgJc13P1bHG7KLdNDaF9T3gsTwFc7Jw/5Y5/iWOjkEx7Zy0NvCGX3Q==} cpu: [loong64] os: [linux] - libc: [glibc] '@unrs/resolver-binding-linux-loong64-musl@1.12.2': resolution: {integrity: sha512-jiuG/Obbel7uw1PwHNFfrkiKhLAF6mnyZ6aWlOAVN9WqKm8v0OFGnciJIHu8+CMvXLQ8AD51LPzAoUfT21D5Ew==} cpu: [loong64] os: [linux] - libc: [musl] '@unrs/resolver-binding-linux-ppc64-gnu@1.12.2': resolution: {integrity: sha512-q7xRvVpmcfeL+LlZg8Pbbo6QaTZwDU5BaGZbwfhkEsXJn3Was8xYfE0RBH266xZt0rM6B7i8xAYIvjthuUIWHg==} cpu: [ppc64] os: [linux] - libc: [glibc] '@unrs/resolver-binding-linux-riscv64-gnu@1.12.2': resolution: {integrity: sha512-0CVdx6lcnT3Q9inOH8tsMIOJ6ImndllMjqJHg8RLVdB7Vq4SfkEXl9mCSsVNuNA4MCYycRicCUxPCabVHJRr6A==} cpu: [riscv64] os: [linux] - libc: [glibc] '@unrs/resolver-binding-linux-riscv64-musl@1.12.2': resolution: {integrity: sha512-iOwlRo9vnp6R6ohHQS11n0NnfdXx/omhkocmIfaPRpQhKZ+3BDMkkdRVh53qjkFkpPddf+FETA28NwGN7l5l+w==} cpu: [riscv64] os: [linux] - libc: [musl] '@unrs/resolver-binding-linux-s390x-gnu@1.12.2': resolution: {integrity: sha512-HYJtLfXq94q8iZNFT1lknx258wlkkWhZeUXJRqzKBBUJ00CvZ+N33zgbCqimLjsyw5Va6uUxhVa12mI+kaveEw==} cpu: [s390x] os: [linux] - libc: [glibc] '@unrs/resolver-binding-linux-x64-gnu@1.12.2': resolution: {integrity: sha512-mPsUhunKKDih5O96Y6enDQyHc1SqBPlY1E/SfMWDM3EdJ95Z9CArPeCVwCCqbP45ljvivdEk8Fxn+SIb1rDAJQ==} cpu: [x64] os: [linux] - libc: [glibc] '@unrs/resolver-binding-linux-x64-musl@1.12.2': resolution: {integrity: sha512-azrt6+5ydLd8Vt210AAFis/lZevSfPw93EJRIJG+xPu4WCJ8K0kppCTpMyLPcKT7H15M4Jnt2tMp5bOvCkRC6A==} cpu: [x64] os: [linux] - libc: [musl] '@unrs/resolver-binding-openharmony-arm64@1.12.2': resolution: {integrity: sha512-YZ9hP4O0X9PQb8eO980qmLNGH4zT3I9+SZTdt0Pr0YyuGQhYKoOZkV02VzrzyOZJ5xIJ3UFIenKkUkGg8GjgWQ==} @@ -3517,6 +4020,68 @@ packages: '@vscode/codicons@0.0.45': resolution: {integrity: sha512-1KAZ7XCMagp5Gdrlr4bbbcAqgcIL623iO1wW6rfcSVGAVUQvR0WP7bQx1SbJ11gmV3fdQTSEFIJQ/5C+HuVasw==} + '@vscode/test-electron@3.1.0': + resolution: {integrity: sha512-CRqv5u+YYoseuNVJ6Tyo4k0sF0mx4qnKMihRB0PjsUF8Dc0WKtCXo6CNL6nWWm5esfFQsQA/pejMj4ZbpJVLTw==} + engines: {node: '>=22'} + + '@vscode/test-web@0.0.81': + resolution: {integrity: sha512-qAYNX1mf4hE0L3T/186J8AH+Z7Inm81OHMACkkyKE2J6HJZlXou0OgABkSvd8gt0BiPjI+V+xkduAaQ8Kcjexg==} + engines: {node: '>=20'} + hasBin: true + + '@vscode/vsce-sign-alpine-arm64@2.0.6': + resolution: {integrity: sha512-wKkJBsvKF+f0GfsUuGT0tSW0kZL87QggEiqNqK6/8hvqsXvpx8OsTEc3mnE1kejkh5r+qUyQ7PtF8jZYN0mo8Q==} + cpu: [arm64] + os: [alpine] + + '@vscode/vsce-sign-alpine-x64@2.0.6': + resolution: {integrity: sha512-YoAGlmdK39vKi9jA18i4ufBbd95OqGJxRvF3n6ZbCyziwy3O+JgOpIUPxv5tjeO6gQfx29qBivQ8ZZTUF2Ba0w==} + cpu: [x64] + os: [alpine] + + '@vscode/vsce-sign-darwin-arm64@2.0.6': + resolution: {integrity: sha512-5HMHaJRIQuozm/XQIiJiA0W9uhdblwwl2ZNDSSAeXGO9YhB9MH5C4KIHOmvyjUnKy4UCuiP43VKpIxW1VWP4tQ==} + cpu: [arm64] + os: [darwin] + + '@vscode/vsce-sign-darwin-x64@2.0.6': + resolution: {integrity: sha512-25GsUbTAiNfHSuRItoQafXOIpxlYj+IXb4/qarrXu7kmbH94jlm5sdWSCKrrREs8+GsXF1b+l3OB7VJy5jsykw==} + cpu: [x64] + os: [darwin] + + '@vscode/vsce-sign-linux-arm64@2.0.6': + resolution: {integrity: sha512-cfb1qK7lygtMa4NUl2582nP7aliLYuDEVpAbXJMkDq1qE+olIw/es+C8j1LJwvcRq1I2yWGtSn3EkDp9Dq5FdA==} + cpu: [arm64] + os: [linux] + + '@vscode/vsce-sign-linux-arm@2.0.6': + resolution: {integrity: sha512-UndEc2Xlq4HsuMPnwu7420uqceXjs4yb5W8E2/UkaHBB9OWCwMd3/bRe/1eLe3D8kPpxzcaeTyXiK3RdzS/1CA==} + cpu: [arm] + os: [linux] + + '@vscode/vsce-sign-linux-x64@2.0.6': + resolution: {integrity: sha512-/olerl1A4sOqdP+hjvJ1sbQjKN07Y3DVnxO4gnbn/ahtQvFrdhUi0G1VsZXDNjfqmXw57DmPi5ASnj/8PGZhAA==} + cpu: [x64] + os: [linux] + + '@vscode/vsce-sign-win32-arm64@2.0.6': + resolution: {integrity: sha512-ivM/MiGIY0PJNZBoGtlRBM/xDpwbdlCWomUWuLmIxbi1Cxe/1nooYrEQoaHD8ojVRgzdQEUzMsRbyF5cJJgYOg==} + cpu: [arm64] + os: [win32] + + '@vscode/vsce-sign-win32-x64@2.0.6': + resolution: {integrity: sha512-mgth9Kvze+u8CruYMmhHw6Zgy3GRX2S+Ed5oSokDEK5vPEwGGKnmuXua9tmFhomeAnhgJnL4DCna3TiNuGrBTQ==} + cpu: [x64] + os: [win32] + + '@vscode/vsce-sign@2.1.0': + resolution: {integrity: sha512-9AQrqazrBgTgRSuwleLVXUrIUphY02/SFCh2TKYoLV/xifJAdblhdmEmw5gUrYSPQ3sRwNs9iyCMD14sATEE6g==} + + '@vscode/vsce@3.9.2': + resolution: {integrity: sha512-XSxMosEEDO6vLxELAHVkwmhC0qe0ijZni2jB9Rcs8kQsW4lhTDQ/wMzmwFs/buotAWSnpmUp/dRWD2ufG3UYKA==} + engines: {node: '>= 20'} + hasBin: true + '@webassemblyjs/ast@1.14.1': resolution: {integrity: sha512-nuBEDgQfm1ccRp/8bCQrx1frohyufl4JlbMMZ4P1wpeOfDhF6FQkxZJ1b/e+PLwr6X1Nhw6OLme5usuBWYBvuQ==} @@ -3614,6 +4179,10 @@ packages: resolution: {integrity: sha512-MnA+YT8fwfJPgBx3m60MNqakm30XOkyIoH1y6huTQvC0PwZG7ki8NacLBcrPbNoo8vEZy7Jpuk7+jMO+CUovTQ==} engines: {node: '>= 14'} + agent-base@9.0.0: + resolution: {integrity: sha512-TQf59BsZnytt8GdJKLPfUZ54g/iaUL2OWDSFCCvMOhsHduDQxO8xC4PNeyIkVcA5KwL2phPSv0douC0fgWzmnA==} + engines: {node: '>= 20'} + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -3661,6 +4230,10 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} + ansi-escapes@7.3.0: + resolution: {integrity: sha512-BvU8nYgGQBxcmMuEeUEmNTvrMVjJNSH7RgW24vXexN4Ven6qCvy4TntnvlnwnMLTVlcRQQdbRY8NKnaIoeWDNg==} + engines: {node: '>=18'} + ansi-html-community@0.0.8: resolution: {integrity: sha512-1APHAyr3+PCamwNw3bXCPp4HFLONZt/yIH0sZp0/469KWNTEy+qN5jQ3GVX6DMZ1UXAi34yVwtTeaG/HpBuuzw==} engines: {'0': node >= 0.8.0} @@ -3698,6 +4271,9 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} + anynum@1.0.1: + resolution: {integrity: sha512-N6//FLET/tXYNM/F6ABca1oH6fWB+KlTt909Le28WMDBk8oaT4vY17DCrwg2MvmuqUKt3Ni4N5dGJ/EoBgcO6A==} + arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} @@ -3718,10 +4294,21 @@ packages: resolution: {integrity: sha512-S2s3aOytiKdFRdulw2qPE51MzjzVOisppcVv7jVFR+Kw0kxwvFrDcYA0h7Ndqbmj0HkMIXYWaoj7fli8kgx1eg==} engines: {node: '>=12.0.0'} + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + + astral-regex@2.0.0: + resolution: {integrity: sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ==} + engines: {node: '>=8'} + astring@1.9.0: resolution: {integrity: sha512-LElXdjswlqjWrPpJFg1Fx4wpkOCxj1TDHlSV4PlaRxHGWko024xICaa97ZkMfs6DRKlCguiAI+rbXv5GWwXIkg==} hasBin: true + async-lock@1.4.1: + resolution: {integrity: sha512-Az2ZTpuytrtqENulXwO3GGv1Bztugx6TT37NIo7imr/Qo0gsYiGtSdBa2B6fsXhTpVZDNfu1Qn3pk531e3q+nQ==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -3736,6 +4323,21 @@ packages: peerDependencies: postcss: ^8.1.0 + available-typed-arrays@1.0.7: + resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} + engines: {node: '>= 0.4'} + + azure-devops-node-api@12.5.0: + resolution: {integrity: sha512-R5eFskGvOm3U/GzeAuxRkUsAl0hrAwGgWn6zAd2KrZmrEhWZVqLew4OOupbQlXUuojUzpGtq62SmdhJ06N88og==} + + b4a@1.8.1: + resolution: {integrity: sha512-aiqre1Nr0B/6DgE2N5vwTc+2/oQZ4Wh1t4NznYY4E00y8LCt6NqdRv81so00oo27D8MVKTpUa/MwUUtBLXCoDw==} + peerDependencies: + react-native-b4a: '*' + peerDependenciesMeta: + react-native-b4a: + optional: true + babel-jest@30.4.1: resolution: {integrity: sha512-fATAbM8piYxkiXQp3RBXmZHxZVNJZAVXXfyeyCN2Tida3+qJ8ea9UxhiJ2y4fLO90ZImKt6k9FlcH2+rLkJGhw==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -3801,6 +4403,43 @@ packages: resolution: {integrity: sha512-BLrgEcRTwX2o6gGxGOCNyMvGSp35YofuYzw9h1IMTRmKqttAZZVU67bdb9Pr2vUHA8+j3i2tJfjO6C6+4myGTA==} engines: {node: 18 || 20 || >=22} + bare-events@2.9.1: + resolution: {integrity: sha512-Z0oHEHAFDZkffN8Qc39zNZjQlMDkPJRyyyZieU1VH7u8c5S+qHZ2S8ixdKIAxEjfHO7FJxXmJWgteOghVanIsg==} + peerDependencies: + bare-abort-controller: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + + bare-fs@4.8.0: + resolution: {integrity: sha512-fM+MhCvdQhZ7NV6S95a07gPSqjIYKn6mFaXfx266wN3ajZGl/+1AzH+ubkXQ0fFZvOe2nk9VHkzdYkQE5zMV3Q==} + engines: {bare: '>=1.28.0'} + peerDependencies: + bare-buffer: '*' + peerDependenciesMeta: + bare-buffer: + optional: true + + bare-path@3.1.1: + resolution: {integrity: sha512-JprUlveX3QjApC1cTpsUOiscADftCGVWkzitbHsRqv84hzYwYHw2mbluddsq5TvI8mH/8Ov1f4BiMAdcB0oYnQ==} + + bare-stream@2.13.3: + resolution: {integrity: sha512-Kc+brLqvEqGkjyfiwJmImAOqLZL7OsoLKuavx+hJjgVV3nLTOjloJyPMFxjUPerGGHrNH0fLU06jjykMLWrERQ==} + peerDependencies: + bare-abort-controller: '*' + bare-buffer: '*' + bare-events: '*' + peerDependenciesMeta: + bare-abort-controller: + optional: true + bare-buffer: + optional: true + bare-events: + optional: true + + bare-url@2.5.2: + resolution: {integrity: sha512-L13PCJzKG8RGvx8V1/DdMi12ERhC3tprr7/8a94BxpmnRsFqxh5XZNdhtMxu5HPkRshYOOWRGY8lDP7ZhpG9Cg==} + base64-js@1.5.1: resolution: {integrity: sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==} @@ -3818,6 +4457,14 @@ packages: engines: {node: '>=6.0.0'} hasBin: true + basic-auth@2.0.1: + resolution: {integrity: sha512-NF+epuEdnUYVlGuhaxbbq+dvJttwLnGY+YixlXlME5KpQ5W3CnXA5cVTneY3SPbPDRkcjMbifrwmFYcClgOZeg==} + engines: {node: '>= 0.8'} + + basic-ftp@5.3.1: + resolution: {integrity: sha512-bopVNp6ugyA150DDuZfPFdt1KZ5a94ZDiwX4hMgZDzF+GttD80lEy8kj98kbyhLXnPvhtIo93mdnLIjpCAeeOw==} + engines: {node: '>=10.0.0'} + batch@0.6.1: resolution: {integrity: sha512-x+VAiMRL6UPkx+kudNvxTl6hB2XNNCG2r+7wixVfIYwu/2HKRXimwQyaumLjMveWvT2Hkd/cAJw+QBMfJ/EKVw==} @@ -3828,6 +4475,13 @@ packages: resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} engines: {node: '>=8'} + binaryextensions@6.11.0: + resolution: {integrity: sha512-sXnYK/Ij80TO3lcqZVV2YgfKN5QjUWIRk/XSm2J/4bd/lPko3lvk0O4ZppH6m+6hB2/GTu+ptNwVFe1xh+QLQw==} + engines: {node: '>=4'} + + bl@4.1.0: + resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} + body-parser@2.3.0: resolution: {integrity: sha512-2cGmJupaNgg+QUwVLAucDuWuoMZ6EX9iHDRswZ5lsNYEmwPaRknMPCLZz07yTzVq/83p4o/wzbDZbBrTvGGTIw==} engines: {node: '>=18'} @@ -3838,6 +4492,9 @@ packages: boolbase@1.0.0: resolution: {integrity: sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==} + boundary@2.0.0: + resolution: {integrity: sha512-rJKn5ooC9u8q13IMCrW0RSp31pxBCHE3y9V/tp3TdWSLf8Em3p6Di4NBpfzbJge9YjjFEsD0RtFEjtvHL5VyEA==} + boxen@6.2.1: resolution: {integrity: sha512-H4PEsJXfFI/Pt8sjDWbHlQPx4zL/bvSQjcilJmaulGt5mLDorHOHpmdXAJcBcmru7PhYSp/cDMWRko4ZUMFkSw==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -3857,6 +4514,9 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} + browserify-zlib@0.1.4: + resolution: {integrity: sha512-19OEpq7vWgsH6WkvkBJQDFvJS1uPcbFOQ4v9CU839dO+ZZXUZO6XpE6hNCqvlIIj+4fZvRiJ6DsAQ382GwiyTQ==} + browserslist@4.28.2: resolution: {integrity: sha512-48xSriZYYg+8qXna9kwqjIVzuQxi+KYWp2+5nCYnYKPTr0LvD89Jqk2Or5ogxz0NUMfIjhh2lIUX/LyX9B4oIg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -3870,12 +4530,18 @@ packages: bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} + buffer-crc32@0.2.13: + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} + buffer-equal-constant-time@1.0.1: resolution: {integrity: sha512-zRpUiDwd/xk6ADqPMATG8vc9VPrkck7T07OIx0gnjmJAnHnTVXNQG3vfvWNuiZIkwu9KrKdA1iJKfsfTVxE6NA==} buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + buffer@5.7.1: + resolution: {integrity: sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==} + buffer@6.0.3: resolution: {integrity: sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==} @@ -3895,6 +4561,10 @@ packages: resolution: {integrity: sha512-U1Z/ob71V/bXfVABvNr/Kumf5VyeQRBEm6Txb0PQ6S7V5GpBM3w4Cbqz/xPDicR5tN0uvDifng8C+5qECeGwyQ==} engines: {node: '>=6.0.0'} + cacheable-lookup@5.0.4: + resolution: {integrity: sha512-2/kNscPhpcxrOigMZzbiWF7dz8ilhb/nIHU3EyZiXWXpeq/au8qJ8VhdftMkty3n7Gj6HIGalQG8oiBNB3AJgA==} + engines: {node: '>=10.6.0'} + cacheable-lookup@7.0.0: resolution: {integrity: sha512-+qJyx4xiKra8mZrcwhjMRMUhD5NR1R8esPkzIYxX96JiecFoxAXFuz/GpR3+ev4PE1WamHip78wV0vcmPQtp8w==} engines: {node: '>=14.16'} @@ -3903,6 +4573,10 @@ packages: resolution: {integrity: sha512-zkDT5WAF4hSSoUgyfg5tFIxz8XQK+25W/TLVojJTMKBaxevLBBtLxgqguAuVQB8PVW79FVjHcU+GJ9tVbDZ9mQ==} engines: {node: '>=14.16'} + cacheable-request@7.0.4: + resolution: {integrity: sha512-v+p6ongsrp0yTGbJXjgxPow2+DL93DASP4kXCDKb8/bwRtt9OEF3whggkkDkGNzgcWy2XaF4a8nZglC7uElscg==} + engines: {node: '>=8'} + call-bind-apply-helpers@1.0.2: resolution: {integrity: sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==} engines: {node: '>= 0.4'} @@ -3976,6 +4650,9 @@ packages: character-reference-invalid@2.0.1: resolution: {integrity: sha512-iBZ4F4wRbyORVsu0jPV7gXkOsGYjGHPmAyv+HiHG8gi5PtC9KI2j1+v8/tlibRvjoWX027ypmG/n0HtO5t7unw==} + chardet@2.2.0: + resolution: {integrity: sha512-rddelWYNPRrXq6PtNEN2S3f6t9ILzvqaN5pVgi4kqt9jHQaXIial9PznB5iSPVlQSLNaaH22ItWz3EJtQ10+OA==} + cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} @@ -3995,6 +4672,9 @@ packages: resolution: {integrity: sha512-TQMmc3w+5AxjpL8iIiwebF73dRDF4fBIieAqGn9RGCWaEVwQ6Fb2cGe31Yns0RRIzii5goJ1Y7xbMwo1TxMplw==} engines: {node: '>= 20.19.0'} + chownr@1.1.4: + resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} + chrome-trace-event@1.0.4: resolution: {integrity: sha512-rNjApaLzuwaOTjCiT8lSDdGN1APCiqkChLMJxJPWLunPAt5fy8xgU9/jNOchV84wfIxrA0lRQB7oCT8jrn/wrQ==} engines: {node: '>=6.0'} @@ -4014,6 +4694,9 @@ packages: resolution: {integrity: sha512-D5J+kHaVb/wKSFcyyV75uCn8fiY4sV38XJoe4CUyGQ+mOU/fMVYUdH1hJC+CJQ5uY3EnW27SbJYS4X8BiLrAFg==} engines: {node: '>= 10.0'} + clean-git-ref@2.0.1: + resolution: {integrity: sha512-bLSptAy2P0s6hU4PzuIMKmMJJSE6gLXGH1cntDu7bWJUksvuM+7ReOK61mozULErYvP6a15rnYl0zFDef+pyPw==} + clean-stack@2.2.0: resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} engines: {node: '>=6'} @@ -4022,10 +4705,26 @@ packages: resolution: {integrity: sha512-/lzGpEWL/8PfI0BmBOPRwp0c/wFNX1RdUML3jK/RcSBA9T8mZDdQpqYBKtCFTOfQbwPqWEOpjqW+Fnayc0969g==} engines: {node: '>=10'} + cli-cursor@3.1.0: + resolution: {integrity: sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw==} + engines: {node: '>=8'} + + cli-cursor@5.0.0: + resolution: {integrity: sha512-aCj4O5wKyszjMmDT4tZj93kxyydN/K5zPWSCe6/0AV/AA1pqe5ZBIw0a2ZfPQV7lL5/yb5HsUreJ6UFAF1tEQw==} + engines: {node: '>=18'} + + cli-spinners@2.9.2: + resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} + engines: {node: '>=6'} + cli-table3@0.6.5: resolution: {integrity: sha512-+W/5efTR7y5HRD7gACw9yQjqMVvEMLBHmboM/kPWam+H+Hmyrgjh6YncVKK122YZkXrLudzTuAukUw9FnMf7IQ==} engines: {node: 10.* || >= 12.*} + cli-width@3.0.0: + resolution: {integrity: sha512-FxqpkPPwu1HjuN93Omfm4h8uIanXofW0RxVEW3k5RKx+mJJYSthzNhp32Kzxxy3YAEZ/Dc/EWN1vZRY0+kOhbw==} + engines: {node: '>= 10'} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -4038,6 +4737,13 @@ packages: resolution: {integrity: sha512-neHB9xuzh/wk0dIHweyAXv2aPGZIVk3pLMe+/RNzINf17fe0OG96QroktYAUm7SM1PBnzTabaLboqqxDyMU+SQ==} engines: {node: '>=6'} + clone-response@1.0.3: + resolution: {integrity: sha512-ROoL94jJH2dUVML2Y/5PEDNaSHgeOdSDicUyS7izcF63G6sTc/FTjLub4b8Il9S8S0beOfYt0TaA5qvFK+w0wA==} + + clone@1.0.4: + resolution: {integrity: sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==} + engines: {node: '>=0.8'} + clsx@2.1.1: resolution: {integrity: sha512-eYm0QWBtUrBWZWG0d386OGAw16Z995PiOVo2B7bjWSbHedGl5e0ZWaq65kOGgUSNesEIDkB9ISbTg/JK9dhCZA==} engines: {node: '>=6'} @@ -4046,6 +4752,10 @@ packages: resolution: {integrity: sha512-QVb0dM5HvG+uaxitm8wONl7jltx8dqhfU33DcqtOZcLSVIKSDDLDi7+0LbAKiyI8hD9u42m2YxXSkMGWThaecQ==} engines: {iojs: '>= 1.0.0', node: '>= 0.12.0'} + cockatiel@3.2.1: + resolution: {integrity: sha512-gfrHV6ZPkquExvMh9IOkKsBzNDk6sDuZ6DdBGUBkvFnTCqCxzpuq48RySgP0AnaqQkw2zynOFj9yly6T1Q2G5Q==} + engines: {node: '>=16'} + collapse-white-space@2.1.0: resolution: {integrity: sha512-loKTxY1zCOuG4j9f6EPnuyyYkf58RnhhWTvRoZEokgB+WbdXehfjFviyOVYkqzEWz1Q5kRiZdBYS5SwxbQYwzw==} @@ -4086,9 +4796,17 @@ packages: resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==} engines: {node: '>=14'} + commander@12.1.0: + resolution: {integrity: sha512-Vw8qHK3bZM9y/P10u3Vib8o/DdkvA2OtPtZvD871QKjy74Wj1WSKFILMPRPSdUSx5RFK1arlJzEtA4PkFgnbuA==} + engines: {node: '>=18'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + commander@4.1.1: + resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} + engines: {node: '>= 6'} + commander@5.1.0: resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==} engines: {node: '>= 6'} @@ -4142,6 +4860,10 @@ packages: resolution: {integrity: sha512-kRGRZw3bLlFISDBgwTSA1TMBFN6J6GWDeubmDE3AF+3+yXL8hTWv8r5rkLbqYXY4RjPk/EzHnClI3zQf1cFmHA==} engines: {node: '>= 0.6'} + content-disposition@1.0.1: + resolution: {integrity: sha512-oIXISMynqSqm241k6kcQ5UwttDILMK4BiurCfGEREw6+X9jkkpEe5T9FZaApyLGGOnFuyMWZpdolTXMtvEJ08Q==} + engines: {node: '>=18'} + content-disposition@1.1.0: resolution: {integrity: sha512-5jRCH9Z/+DRP7rkvY83B+yGIGX96OYdJmzngqnw2SBSxqCFPd0w2km3s5iawpGX8krnwSGmF0FW5Nhr0Hfai3g==} engines: {node: '>=18'} @@ -4165,6 +4887,10 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} + cookies@0.9.1: + resolution: {integrity: sha512-TG2hpqe4ELx54QER/S3HQ9SRVnQnGBtKUz5bLQWtYAQ+o6GpgMs6sYUvaiJjVxb+UXwhRhAEP3m7LbsIZ77Hmw==} + engines: {node: '>= 0.8'} + copy-text-to-clipboard@3.2.2: resolution: {integrity: sha512-T6SqyLd1iLuqPA90J5N4cTalrtovCySh58iiZDGJ6FGznbclKh4UI+FGacQSgFzwKG77W7XT5gwbVEbd9cIH1A==} engines: {node: '>=12'} @@ -4178,6 +4904,9 @@ packages: core-js-compat@3.49.0: resolution: {integrity: sha512-VQXt1jr9cBz03b331DFDCCP90b3fanciLkgiOoy8SBHy06gNf+vQ1A3WFLqG7I8TipYIKeYK9wxd0tUrvHcOZA==} + core-js-pure@3.50.0: + resolution: {integrity: sha512-6GP3Pxz4IKyWjAfa747vIu/jilB5z29JWROLqH/b+pXVcpgh6tM06ZIBwSuglgVqzDYURhOK6oEzTrG0bCHitA==} + core-js@3.49.0: resolution: {integrity: sha512-es1U2+YTtzpwkxVLwAFdSpaIMyQaq0PBgm3YD1W3Qpsn1NAmO3KSgZfu+oGSWVu6NvLHoHCV/aYcsE5wiB7ALg==} @@ -4193,6 +4922,11 @@ packages: typescript: optional: true + crc-32@1.2.2: + resolution: {integrity: sha512-ROmzCKrTnOwybPcJApAA6WBWij23HVfGVNKqqrZpuyZOHqK2CwHSvpGuyt/UNNvaIjEd8X5IFGp4Mh+Ie1IHJQ==} + engines: {node: '>=0.8'} + hasBin: true + cross-spawn@7.0.6: resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} engines: {node: '>= 8'} @@ -4333,6 +5067,10 @@ packages: csv-stringify@6.8.0: resolution: {integrity: sha512-Ya0OOHb6XbgPaZKH7dcdmwXe3azUS0TwmlbVdS75HoAhnHApSkiQcfEJoC/s5WwGsrXwOjBDr3FTmCZPjkssgg==} + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + data-urls@5.0.0: resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} engines: {node: '>=18'} @@ -4351,6 +5089,14 @@ packages: supports-color: optional: true + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + debug@4.4.3: resolution: {integrity: sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==} engines: {node: '>=6.0'} @@ -4378,6 +5124,9 @@ packages: babel-plugin-macros: optional: true + deep-equal@1.0.1: + resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==} + deep-extend@0.6.0: resolution: {integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==} engines: {node: '>=4.0.0'} @@ -4397,6 +5146,9 @@ packages: resolution: {integrity: sha512-H9LMLr5zwIbSxrmvikGuI/5KGhZ8E2zH3stkMgM5LpOWDutGM2JZaj460Udnf1a+946zc7YBgrqEWwbk7zHvGw==} engines: {node: '>=18'} + defaults@1.0.4: + resolution: {integrity: sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==} + defer-to-connect@2.0.1: resolution: {integrity: sha512-4tvttepXG1VaYGrRibk5EwJd1t4udunSOVMdLSAL6mId1ix438oPwPZMALY41FCijukO1L0twNcGsdzS7dHgDg==} engines: {node: '>=10'} @@ -4417,10 +5169,17 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} + delegates@1.0.0: + resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} + depd@1.1.2: resolution: {integrity: sha512-7emPTl6Dpo6JRXOXjLRxck+FlLRX5847cLKEn00PLAgc3g2hTZZgr+e4c2v6QpSmLeFP3n5yUo7ft6avBK/5jQ==} engines: {node: '>= 0.6'} @@ -4433,6 +5192,10 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} + destroy@1.2.0: + resolution: {integrity: sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==} + engines: {node: '>= 0.8', npm: 1.2.8000 || >= 1.4.16} + detect-libc@2.1.2: resolution: {integrity: sha512-Btj2BOOO83o3WyH59e8MgXsxEQVcarkUOpEYrubB0urwnN10yQ364rsiByU11nZlqWYZm05i/of7io4mzihBtQ==} engines: {node: '>=8'} @@ -4449,6 +5212,9 @@ packages: devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} + diff3@0.0.3: + resolution: {integrity: sha512-iSq8ngPOt0K53A6eVr4d5Kn6GNrM2nQZtC740pzIriHtn4pOQ2lyzEXQMBeVcWERN0ye7fhBsk9PbLLQOnUx/g==} + dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} engines: {node: '>=8'} @@ -4497,6 +5263,9 @@ packages: duplexer@0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} + duplexify@3.7.1: + resolution: {integrity: sha512-07z8uv2wMyS51kKhD1KsdXJg5WQ6t93RneqRxUHnskXVtlYYkLqM0gqStQZ3pj073g687jPCHrqNfCzawLYh5g==} + earcut@3.0.2: resolution: {integrity: sha512-X7hshQbLyMJ/3RPhyObLARM2sNxxmRALLKx1+NVFFnQ9gKzmCrxm9+uLIAdBcvc8FNLpctqlQ2V6AE92Ol9UDQ==} @@ -4506,9 +5275,16 @@ packages: ecdsa-sig-formatter@1.0.11: resolution: {integrity: sha512-nagl3RYrbNv6kQkeJIpt6NJZy8twLB/2vtz6yN9Z4vRKHN4/QZJIEbqohALSgwKdnksuY3k5Addp5lg8sVoVcQ==} + editions@6.22.0: + resolution: {integrity: sha512-UgGlf8IW75je7HZjNDpJdCv4cGJWIi6yumFdZ0R7A8/CIhQiWUjyGLCxdHpd8bmyD1gnkfUNK0oeOXqUS2cpfQ==} + engines: {ecmascript: '>= es5', node: '>=4'} + ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} + effect@3.22.1: + resolution: {integrity: sha512-TNoXushmPOBAjJlthF5d2QwnX2xBPEtcNJr5XKNKbRLbDvBcOYkXlYDfvGfSA0zriwLFuCll5MDtNMAdZL17PQ==} + electron-to-chromium@1.5.360: resolution: {integrity: sha512-GkcBt6YYAw9SxFWn+xVar4cLVGlXVuswwtRLBozi2zp0GjXs4ZnOrqV4zbXzg35n7w81hCkyJNYicgXlVHAmBA==} @@ -4567,6 +5343,10 @@ packages: resolution: {integrity: sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==} engines: {node: '>=0.12'} + environment@1.1.0: + resolution: {integrity: sha512-xUtoPkMggbz0MPyPiIWr1Kp4aeWJjDZ6SMvURhimjdZgsRuDplF5/s9hcgGhyXMhs+6vpnuoiZ2kFiu3FMnS8Q==} + engines: {node: '>=18'} + error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -4581,10 +5361,6 @@ packages: es-module-lexer@2.3.1: resolution: {integrity: sha512-shc1dbU90Yl/xq1QrC7QRtfcwURZuVRfPhZbDoldJ1cn1gzDvBaBWlv0eFolj5+0znnPJz5TXLxsN77X/12KTA==} - es-object-atoms@1.1.1: - resolution: {integrity: sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==} - engines: {node: '>= 0.4'} - es-object-atoms@1.1.2: resolution: {integrity: sha512-HWcBoN6NileqtSydK2FqHbS/LoDd2pqrnQHLyJzBj4kOp/ky2MWMN694xOfkK8/SnUsW2DH7EfyVlydKCsm1Zw==} engines: {node: '>= 0.4'} @@ -4599,6 +5375,11 @@ packages: esast-util-from-js@2.0.1: resolution: {integrity: sha512-8Ja+rNJ0Lt56Pcf3TAmpBZjmx8ZcK5Ts4cAzIOjsjevg9oSXJnl6SUQ2EevU8tv3h6ZLWmoKL5H4fgWvdvfETw==} + esbuild@0.28.2: + resolution: {integrity: sha512-HKVLS8dvII+xoKW9kmqxbRKrnWEXfJJr/FZhhJmiqIB0e053QNYFqOBouTMO/k5sID4MvCiUCvv8b9M4h32wIA==} + engines: {node: '>=18'} + hasBin: true + escalade@3.2.0: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} @@ -4610,6 +5391,10 @@ packages: escape-html@1.0.3: resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} + escape-string-regexp@1.0.5: + resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} + engines: {node: '>=0.8.0'} + escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} @@ -4622,6 +5407,11 @@ packages: resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} engines: {node: '>=12'} + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + eslint-config-prettier@10.1.8: resolution: {integrity: sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==} hasBin: true @@ -4732,6 +5522,9 @@ packages: eventemitter3@5.0.4: resolution: {integrity: sha512-mlsTRyGaPBjPedk6Bvw+aqbsXDtoAyAzm5MO7JgU+yVRyMQ5O8bD4Kcci7BS85f93veegeCPkL8R4GLClnjLFw==} + events-universal@1.0.1: + resolution: {integrity: sha512-LUd5euvbMLpwOF8m6ivPCbhQeSiYVNb8Vs0fQ8QjXo0JTkEHpz8pxdQf0gStltaPpw0Cca8b39KxvK9cfKRiAw==} + events@3.3.0: resolution: {integrity: sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==} engines: {node: '>=0.8.x'} @@ -4744,6 +5537,10 @@ packages: resolution: {integrity: sha512-+I6B/IkJc1o/2tiURyz/ivu/O0nKNEArIUB5O7zBrlDVJr22SCLH3xTeEry428LvFhRzIA1g8izguxJ/gbNcVQ==} engines: {node: '>= 0.8.0'} + expand-template@2.0.3: + resolution: {integrity: sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==} + engines: {node: '>=6'} + expect@30.4.1: resolution: {integrity: sha512-PMARsyh/JtqC20HoGqlFcIlQAyqUtW4PlI1rup1uhYJtKuwAjbvWi3GQMAn+STdHum/dk8xrKfUM1+5SAwpolA==} engines: {node: ^18.14.0 || ^20.0.0 || ^22.0.0 || >=24.0.0} @@ -4759,12 +5556,19 @@ packages: extend@3.0.2: resolution: {integrity: sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g==} + fast-check@3.23.2: + resolution: {integrity: sha512-h5+1OzzfCC3Ef7VbtKdcv7zsstUQwUDlYpUTvjeUsJAssPgLn7QzbboPtL5ro04Mq0rPOsMzl7q5hIbRs2wD1A==} + engines: {node: '>=8.0.0'} + fast-copy@3.0.2: resolution: {integrity: sha512-dl0O9Vhju8IrcLndv2eU4ldt1ftXMqqfgN4H1cpmGV7P6jeB9FwpN9a2c8DPGE1Ys88rNUJVYDHq73CGAGOPfQ==} fast-deep-equal@3.1.3: resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} + fast-fifo@1.3.2: + resolution: {integrity: sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==} + fast-glob@3.3.3: resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} engines: {node: '>=8.6.0'} @@ -4787,6 +5591,13 @@ packages: fast-uri@4.0.0: resolution: {integrity: sha512-l90y339r2DkZs/ldcWQXcwTjkbp/NbuJDGYoQ3awBgaT3GXOFkm3OkVpz6Z86TywYcya0eVP2r1kTV90f3krGQ==} + fast-xml-builder@1.3.1: + resolution: {integrity: sha512-pIM/1n3ntFXKYrUZwW7QCK0gAW7XY+wzj1YMIV3tLDvPj/V+zTGJK5e3/4WJfwj0qWw2ElNXiTixda/R+3YSug==} + + fast-xml-parser@5.11.0: + resolution: {integrity: sha512-9IGxMqvqLOnqP+Egi1nqDHKv5k8aZ7r9n558enxcucmyVGEBNPAU+MOg/8jPIS7rO7sSq4gFm1/nHtiaubMruw==} + hasBin: true + fastest-levenshtein@1.0.16: resolution: {integrity: sha512-eRnCtTTtGZFpQCwhJiUOuxPQWRXVKYDn0b2PeHfXL6/Zi53SLAzAHfVhVWK2AryC/WH05kGfxhFIPvTF0SXQzg==} engines: {node: '>= 4.9.1'} @@ -4821,6 +5632,10 @@ packages: resolution: {integrity: sha512-u5/sxGfiMfZNtJ3OvQpXcvotFpYkL0n9u9mM2vkui2nGo8b4wvDkJ8gAkYqbA8QpGyFCv3RK0Z+Iv+9veCS9bQ==} engines: {node: '>=0.4.0'} + figures@3.2.0: + resolution: {integrity: sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==} + engines: {node: '>=8'} + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -4843,6 +5658,9 @@ packages: resolution: {integrity: sha512-9ZonPT4ZAK4a+1pUPVPZJapbi7O5qbbJPdYw/NOQWZZbVLdDTYM3A4R9z/DpAM08IDaFGsvPgiGZ82WEwUDWjg==} engines: {node: '>=14.16'} + find-my-way-ts@0.1.6: + resolution: {integrity: sha512-a85L9ZoXtNAey3Y6Z+eBWW658kO/MwR7zIafkIUPUMf3isZG0NCs2pjW2wtjxAKuJPxMAsHUIP4ZPGv0o5gyTA==} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -4866,6 +5684,10 @@ packages: flatted@3.4.2: resolution: {integrity: sha512-PjDse7RzhcPkIJwy5t7KPWQSZ9cAbzQXcafsetQoD7sOJRQlGikNbx7yZp2OotDnJyrDcbyRq3Ttb18iYOqkxA==} + for-each@0.3.5: + resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} + engines: {node: '>= 0.4'} + foreground-child@3.3.1: resolution: {integrity: sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==} engines: {node: '>=14'} @@ -4889,10 +5711,17 @@ packages: fraction.js@5.3.4: resolution: {integrity: sha512-1X1NTtiJphryn/uLQz3whtY6jK3fTqoE3ohKs0tT+Ujr1W59oopxmoEh7Lu5p6vBaPbgoM0bzveAW4Qi5RyWDQ==} + fresh@0.5.2: + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} + engines: {node: '>= 0.6'} + fresh@2.0.0: resolution: {integrity: sha512-Rx/WycZ60HOaqLKAi6cHRKKI7zxWbJ31MhntmtwMoaTeF7XFH9hhBp8vITaMidfljRQ6eYWCKkaTK+ykVJHP2A==} engines: {node: '>= 0.8'} + fs-constants@1.0.0: + resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} + fs-extra@10.1.0: resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} engines: {node: '>=12'} @@ -4908,6 +5737,11 @@ packages: fs.realpath@1.0.0: resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} + fsevents@2.3.2: + resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + fsevents@2.3.3: resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} @@ -4943,6 +5777,10 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} + get-stream@5.2.0: + resolution: {integrity: sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==} + engines: {node: '>=8'} + get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -4950,9 +5788,16 @@ packages: get-tsconfig@4.14.0: resolution: {integrity: sha512-yTb+8DXzDREzgvYmh6s9vHsSVCHeC0G3PI5bEXNBHtmshPnO+S5O7qgLEOn0I5QvMy6kpZN8K1NKGyilLb93wA==} + get-uri@6.0.5: + resolution: {integrity: sha512-b1O07XYq8eRuVzBNgJLstU6FYc1tS6wnMtF1I1D9lE8LxZSOGZ7LhxN54yPP6mGw5f2CkXY2BQUL9Fx41qvcIg==} + engines: {node: '>= 14'} + gifuct-js@2.1.2: resolution: {integrity: sha512-rI2asw77u0mGgwhV3qA+OEgYqaDn5UNqgs+Bx0FGwSpuqfYn+Ir6RQY5ENNQ8SbIiG/m5gVa7CD5RriO4f4Lsg==} + github-from-package@0.0.0: + resolution: {integrity: sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==} + github-slugger@1.5.0: resolution: {integrity: sha512-wIh+gKBI9Nshz2o46B0B3f5k/W+WI9ZAv6y5Dn5WJ5SK1t0TnDimB4WE5rmTD05ZAIn8HALCZVmCsvj0w0v0lw==} @@ -4975,6 +5820,10 @@ packages: deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me hasBin: true + glob@13.0.6: + resolution: {integrity: sha512-Wjlyrolmm8uDpm/ogGyXZXb1Z+Ca2B8NbJwqBVg0axK9GbBeoS7yGV6vjXnYdGm6X53iehEuxxbyiKp8QmN4Vw==} + engines: {node: 18 || 20 || >=22} + glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Old versions of glob are not supported, and contain widely publicized security vulnerabilities, which have been fixed in the current version. Please update. Support for old versions may be purchased (at exorbitant rates) by contacting i@izs.me @@ -4995,10 +5844,18 @@ packages: resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + globby@14.1.0: + resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} + engines: {node: '>=18'} + gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} + got@11.8.6: + resolution: {integrity: sha512-6tfZ91bOr7bOXnK7PRDCGBLa1H4U080YHNaAQ2KsMGlLEzRbk44nsZF2E1IeRc3vtJHPVbKCYgdFbaGO2ljd8g==} + engines: {node: '>=10.19.0'} + got@12.6.1: resolution: {integrity: sha512-mThBblvlAF1d4O5oqyvN+ZxLAYwIJK7bpMxgYqPD9okW0C3qm5FFn7k811QrcuEBwaogR3ngOFoCfs6mRv7teQ==} engines: {node: '>=14.16'} @@ -5009,6 +5866,10 @@ packages: graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} + gunzip-maybe@1.4.2: + resolution: {integrity: sha512-4haO1M4mLO91PW57BMsDFf75UmwoRX0GkdD+Faw+Lr+r/OZrOCS0pIBwOL1xCKQqnQzbNFGgK2V2CpBUPeFNTw==} + hasBin: true + gzip-size@6.0.0: resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} engines: {node: '>=10'} @@ -5076,6 +5937,14 @@ packages: hoist-non-react-statics@3.3.2: resolution: {integrity: sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==} + hosted-git-info@4.1.0: + resolution: {integrity: sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==} + engines: {node: '>=10'} + + hosted-git-info@7.0.2: + resolution: {integrity: sha512-puUZAUKT5m8Zzvs72XWy3HtvVbTWljRE66cP60bxJzAqf2DgICo7lYTY2IHUmLnNpjYvw5bvmoHvPc0QO2a62w==} + engines: {node: ^16.14.0 || >=18.0.0} + html-encoding-sniffer@4.0.0: resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} engines: {node: '>=18'} @@ -5121,9 +5990,17 @@ packages: htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} + http-assert@1.5.0: + resolution: {integrity: sha512-uPpH7OKX4H25hBmU6G1jWNaqJGpTXxey+YOUizJUAgu0AjLUeC8D73hTrhvDS5D+GJN1DN1+hhc/eF/wpxtp0w==} + engines: {node: '>= 0.8'} + http-cache-semantics@4.2.0: resolution: {integrity: sha512-dTxcvPXqPvXBQpq5dUr6mEMJX4oIEFv6bwom3FDwKRDsuIjjJGANqhBuoAn9c1RQJIdAKav33ED65E2ys+87QQ==} + http-errors@1.6.3: + resolution: {integrity: sha512-lks+lVC8dgGyh97jxvxeYTWQFvh4uw4yC12gVl63Cg30sjPX4wuGcdkICVXDAESr6OJGjqGA8Iz5mkeN6zlD7A==} + engines: {node: '>= 0.6'} + http-errors@1.8.1: resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} @@ -5139,10 +6016,18 @@ packages: resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} engines: {node: '>= 14'} + http-proxy-agent@9.1.0: + resolution: {integrity: sha512-2NxoveTT58mjYT4n3RPTEfCZGLMbidoO8XEieXfpSYxu+PQJ1qpx4ypwH6N+uF9twBPIvRRgvkvW5HUTYWENig==} + engines: {node: '>= 20'} + http-proxy-middleware@4.2.0: resolution: {integrity: sha512-ZA+oNOoM+GLoFTIzhkJptVQov73Srep2LBqhF8hG8CIPKO3nam1jonXVQ/QUH8RbwsmaaVz2SOJdzBNBHNtKbw==} engines: {node: ^22.15.0 || ^24.0.0 || >=26.0.0} + http2-wrapper@1.0.3: + resolution: {integrity: sha512-V+23sDMr12Wnz7iTcDeJr3O6AIxlnvT/bmaAAAP/Xda35C90p9599p0F1eHR/N1KILWSoWVAiOMFjBBXaXSMxg==} + engines: {node: '>=10.19.0'} + http2-wrapper@2.2.1: resolution: {integrity: sha512-V5nVw1PAOgfI3Lmeaj2Exmeg7fenjhRUgz1lPSezy1CuhPYbgQtbQj4jZfEAEMlaL+vupsvhjqCyjzob0yxsmQ==} engines: {node: '>=10.19.0'} @@ -5151,6 +6036,10 @@ packages: resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} engines: {node: '>= 14'} + https-proxy-agent@9.1.0: + resolution: {integrity: sha512-ag87y7cJJ9/3+GxFr8Oy4O5faDsGRGnBGsJj/YjOSsSx/5eadKLYTMPlzuR6obgoCDDm0abAAZitXXQkMOPSpA==} + engines: {node: '>= 20'} + httpxy@0.5.5: resolution: {integrity: sha512-uDjmnPyp1q4Sgzf3w+J/Fc6UqcCEj0x4Wjp7OqK5dGhNeDgpyrAmnS6ey8QWrX3SWDon2DMKf9sBa5X9+CVyMA==} @@ -5227,6 +6116,10 @@ packages: resolution: {integrity: sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==} engines: {node: '>=8'} + index-to-position@1.2.0: + resolution: {integrity: sha512-Yg7+ztRkqslMAS2iFaU+Oa4KTSidr63OsFGlOrJoW981kIYO3CGCS3wA95P1mUi/IVSJkn0D479KTJpVpvFNuw==} + engines: {node: '>=18'} + infima@0.2.0-alpha.45: resolution: {integrity: sha512-uyH0zfr1erU1OohLk0fT4Rrb94AOhguWNOcD9uGrSpRvNB+6gZXUoJX5J0NtvzBO10YZ9PgvA4NFgt+fYg8ojw==} engines: {node: '>=12'} @@ -5235,6 +6128,9 @@ packages: resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. + inherits@2.0.3: + resolution: {integrity: sha512-x00IRNXNy63jwGkJmzPigoySHbaqpNuzKbBOmzK+g2OdZpQ9w+sxCN+VSB3ja7IAge2OP2qpfxTjeNcyjmW1uw==} + inherits@2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} @@ -5248,9 +6144,17 @@ packages: inline-style-parser@0.2.7: resolution: {integrity: sha512-Nb2ctOyNR8DqQoR0OwRG95uNWIC0C1lCgf5Naz5H6Ji72KZ8OcFZLz2P5sNgwlyoJ8Yif11oMuYs5pBQa86csA==} + inquirer@8.2.7: + resolution: {integrity: sha512-UjOaSel/iddGZJ5xP/Eixh6dY1XghiBw4XK13rCCIJcJfyhhoul/7KhLLUGtebEj6GDYM6Vnx/mVsjx2L/mFIA==} + engines: {node: '>=12.0.0'} + invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + ip-address@10.5.0: + resolution: {integrity: sha512-R5SnVLJmgYYvf2F2ZgwSBnelz5G4q5AxIC277GDfUaNbrZKNANcBC7RHqYYePlszf4kBolVkJauG0ZjHHFh55g==} + engines: {node: '>= 12'} + ipaddr.js@1.9.1: resolution: {integrity: sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==} engines: {node: '>= 0.10'} @@ -5272,6 +6176,10 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} + is-callable@1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} + engines: {node: '>= 0.4'} + is-ci@3.0.1: resolution: {integrity: sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==} hasBin: true @@ -5283,6 +6191,9 @@ packages: is-decimal@2.0.1: resolution: {integrity: sha512-AAB9hiomQs5DXWcRB1rqsxGUstbRroFOPPVAomNk/3XHR5JyEZChOyTWe2oayKnsSsr/kcGqF+z6yuH6HHpN0A==} + is-deflate@1.0.0: + resolution: {integrity: sha512-YDoFpuZWu1VRXlsnlYMzKyVRITXj7Ej/V9gXQ2/pAe7X1J7M/RNOqaIYi6qUn+B7nGyB9pDXrv02dsB58d2ZAQ==} + is-docker@2.2.1: resolution: {integrity: sha512-F+i2BKsFrH66iaUFc0woD8sLy8getkwTwtOBjvs56Cx4CgJDeKQeqfz8wAYiSb8JOprWhHH5p77PbmYCvvUuXQ==} engines: {node: '>=8'} @@ -5313,6 +6224,10 @@ packages: resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} engines: {node: '>=0.10.0'} + is-gzip@1.0.0: + resolution: {integrity: sha512-rcfALRIb1YewtnksfRIHGcIY93QnK8BIQ/2c9yDYcG/Y6+vRoJuTWBmmSEbyLLYtXm7q35pHOHbZFQBaLrhlWQ==} + engines: {node: '>=0.10.0'} + is-hexadecimal@2.0.1: resolution: {integrity: sha512-DgZQp241c8oO6cA1SbTEWiXeoxV42vlcJxgH+B3hi1AiqqKruZR3ZGF8In3fj4+/y/7rHvlOZLZtgJ/4ttYGZg==} @@ -5329,6 +6244,14 @@ packages: resolution: {integrity: sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ==} engines: {node: '>=10'} + is-interactive@1.0.0: + resolution: {integrity: sha512-2HvIEKRoqS62guEC+qBjpvRubdX910WCMuJTZ+I9yvqKU2/12eSL549HMwtabb4oupdj2sMP50k+XJfB/8JE6w==} + engines: {node: '>=8'} + + is-interactive@2.0.0: + resolution: {integrity: sha512-qP1vozQRI+BMOPcjFzrjXuQvdak2pHNUMZoeG2eRbiSqyvbEf/wQtEOTOX1guk6E3t36RkaqiSt8A/6YElNxLQ==} + engines: {node: '>=12'} + is-module@1.0.0: resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} @@ -5385,9 +6308,28 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} + is-typed-array@1.1.15: + resolution: {integrity: sha512-p3EcsicXjit7SaskXHs1hA91QxgTw46Fv6EFKKGS5DRFLD8yKnohjF3hxoju94b/OcMZoQukzpPpBE9uLVKzgQ==} + engines: {node: '>= 0.4'} + is-typedarray@1.0.0: resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} + is-unicode-supported@0.1.0: + resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} + engines: {node: '>=10'} + + is-unicode-supported@1.3.0: + resolution: {integrity: sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==} + engines: {node: '>=12'} + + is-unicode-supported@2.1.0: + resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} + engines: {node: '>=18'} + + is-unsafe@2.0.2: + resolution: {integrity: sha512-HgbIHPBH0KHHCcjLfGsCvhtPTVxjaAZlXjwdz7/GQC40SjSe4sfQsar8J5VFo8JOSbarkpV0OLG95bbaNd9aAQ==} + is-wsl@2.2.0: resolution: {integrity: sha512-fKzAra0rGJUUBwGBgNkHZuToZcn+TtXHpeCgmkMJMMYx1sQDYaCSyjJBSCa2nH1DGm7s3n1oBnohoVTBaN7Lww==} engines: {node: '>=8'} @@ -5406,6 +6348,9 @@ packages: isarray@1.0.0: resolution: {integrity: sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==} + isarray@2.0.5: + resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} + isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} @@ -5416,6 +6361,11 @@ packages: resolution: {integrity: sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==} engines: {node: '>=0.10.0'} + isomorphic-git@1.41.7: + resolution: {integrity: sha512-ZCyMNg0eLUmuhGXdVQFi56fM93kwIqqlUSVnWbgzf1oDYidrQbWfrf+hEvn2E8xyo191zRPQyDCIlwg6YJ6isQ==} + engines: {node: '>=14.17'} + hasBin: true + istanbul-lib-coverage@3.2.2: resolution: {integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg==} engines: {node: '>=8'} @@ -5436,6 +6386,10 @@ packages: resolution: {integrity: sha512-HGYWWS/ehqTV3xN10i23tkPkpH46MLCIMFNCaaKNavAXTF1RkqxawEPtnjnGZ6XKSInBKkiOA5BKS+aZiY3AvA==} engines: {node: '>=8'} + istextorbinary@9.5.0: + resolution: {integrity: sha512-5mbUj3SiZXCuRf9fT3ibzbSSEWiy63gFfksmGfdOzujPjW3k+z8WvIBxcJHBoQNlaZaiyB25deviif2+osLmLw==} + engines: {node: '>=4'} + jackspeak@3.4.3: resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} @@ -5630,6 +6584,11 @@ packages: engines: {node: '>=6'} hasBin: true + jsforce@3.10.22: + resolution: {integrity: sha512-q4ZJTFyl2CDPnsGCsx/LttHMtbR1PEX+iOvpQMXDgJ0E7Lf0itMXTMhTnwOFIyAhZ26PNY5zNCs88STqE8iGCw==} + engines: {node: '>=22'} + hasBin: true + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -5645,10 +6604,6 @@ packages: json-stable-stringify-without-jsonify@1.0.1: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} - json-stream-stringify@3.1.7: - resolution: {integrity: sha512-F4MWetLtY42YMaAKw5cV4e47zMD5aOT+tjjQWjX18ACtdkQ5Y/vrcfbcQ107Rh+MXjOCIx4KhW0wPmOvG8iQ5w==} - engines: {node: '>=7.10.1'} - json5@2.2.3: resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} @@ -5676,6 +6631,13 @@ packages: jws@4.0.1: resolution: {integrity: sha512-EKI/M/yqPncGUUh44xz0PxSidXFr/+r0pA70+gIYhjv+et7yxM+s29Y+VGDkovRofQem0fs7Uvf4+YmAdyRduA==} + keygrip@1.1.0: + resolution: {integrity: sha512-iYSchDJ+liQ8iwbSI2QqsQOvqv58eJCEanyJPJi+Khyu8smkcKSFUCbPwzFcL7YVtZ6eONjqRX/38caJ7QjRAQ==} + engines: {node: '>= 0.6'} + + keytar@7.9.0: + resolution: {integrity: sha512-VPD8mtVtm5JNtA2AErl6Chp06JBfy7diFQ7TQQhdpWOl6MrCRB+eRbvAZUsbGQS9kiMq0coJsy0W0vHpDCkWsQ==} + keyv@4.5.4: resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} @@ -5690,6 +6652,28 @@ packages: resolution: {integrity: sha512-eTIzlVOSUR+JxdDFepEYcBMtZ9Qqdef+rnzWdRZuMbOywu5tO2w2N7rqjoANZ5k9vywhL6Br1VRjUIgTQx4E8w==} engines: {node: '>=6'} + koa-compose@4.1.0: + resolution: {integrity: sha512-8ODW8TrDuMYvXRwra/Kh7/rJo9BtOfPc6qO8eAfC80CnCvSjSl0bkRM24X6/XBBEyj0v1nRUQ1LyOy3dbqOWXw==} + + koa-morgan@1.0.1: + resolution: {integrity: sha512-JOUdCNlc21G50afBXfErUrr1RKymbgzlrO5KURY+wmDG1Uvd2jmxUJcHgylb/mYXy2SjiNZyYim/ptUBGsIi3A==} + + koa-mount@4.2.0: + resolution: {integrity: sha512-2iHQc7vbA9qLeVq5gKAYh3m5DOMMlMfIKjW/REPAS18Mf63daCJHHVXY9nbu7ivrnYn5PiPC4CE523Tf5qvjeQ==} + engines: {node: '>= 7.6.0'} + + koa-send@5.0.1: + resolution: {integrity: sha512-tmcyQ/wXXuxpDxyNXv5yNNkdAMdFRqwtegBXUaowiQzUKqJehttS0x2j0eOZDQAyloAth5w6wwBImnFzkUz3pQ==} + engines: {node: '>= 8'} + + koa-static@5.0.0: + resolution: {integrity: sha512-UqyYyH5YEXaJrf9S8E23GoJFQZXkBVJ9zYYMPGz919MSX1KuvAcycIuS0ci150HCoPf4XQVhQ84Qf8xRPWxFaQ==} + engines: {node: '>= 7.6.0'} + + koa@3.2.1: + resolution: {integrity: sha512-e7IpWJrnanNUroVK2taAgMxoEZvHLXdQiNjeExSu/DEIWm83jaKGBgb7tLmu2rMYpA027qFB3iLR/k3AVpFRnA==} + engines: {node: '>= 18'} + latest-version@7.0.0: resolution: {integrity: sha512-KvNT4XqAMzdcL6ka6Tl3i2lYeFDgXNCuIX+xNx6ZMVR1dFq+idXd9FLKNMOIx0t9mJ9/HudyX4oZWXZQ0UJHeg==} engines: {node: '>=14.16'} @@ -5743,28 +6727,24 @@ packages: engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [glibc] lightningcss-linux-arm64-musl@1.33.0: resolution: {integrity: sha512-yiO5ROMuYQgXbC60yjZU5CYSFZGKXL0HFATXt9mHJn1+zW55oCtMI9NfcVhYLMFDL7gV7oBPon/EmMMGg2OvtQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - libc: [musl] lightningcss-linux-x64-gnu@1.33.0: resolution: {integrity: sha512-ar+Ju7LmcN0Jo4FpL4hpFybwNG9/3A/Br5KW2n2jyODg3MEZXaDYADdemoNS+BDNfMgKvylJLj4S5tyRActuAg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [glibc] lightningcss-linux-x64-musl@1.33.0: resolution: {integrity: sha512-RYiYbkokw0trfKqqzfF55lginwEPrD3OJDfTuJzFs1MK6iFnDenaz1fqLLtX4ITG3OktJQXOeTaw1awrBAlZPw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - libc: [musl] lightningcss-win32-arm64-msvc@1.33.0: resolution: {integrity: sha512-1K+MPfLSFVpphzpdbfkhlWk6wBrTObBzS2T6db10PNOZgR9GoVsAWzwNyuhUYYbTp23j+4RrncfujZ4uAzXvwA==} @@ -5789,6 +6769,9 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + linkify-it@5.0.2: + resolution: {integrity: sha512-ONTm2jCMAVZjgQa/Fy1kScXsuOoF5NPTsoFBdE1KVIZ2vAh/r9+Bqo+0jINCBYnavTPQZz38QzFTme79ENoN3Q==} + lint-staged@17.2.0: resolution: {integrity: sha512-FchGnFe4i4B1C/a35SPU9bNGPEHSC1+1iV0plLjzBmKVe9klZrlRfSgK6Cw4VeHyqOXbJUXP0vON61uRftNQ0A==} engines: {node: '>=22.22.1'} @@ -5846,12 +6829,23 @@ packages: lodash.once@4.1.1: resolution: {integrity: sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg==} + lodash.truncate@4.4.2: + resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} + lodash.uniq@4.5.0: resolution: {integrity: sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==} lodash@4.18.1: resolution: {integrity: sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==} + log-symbols@4.1.0: + resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} + engines: {node: '>=10'} + + log-symbols@6.0.0: + resolution: {integrity: sha512-i24m8rpwhmPIS4zscNzK6MSEhk0DUWa/8iYQWxhffV8jkI4Phvs3F+quL5xvS0gdQR0FyTCMMH33Y78dDTzzIw==} + engines: {node: '>=18'} + longest-streak@3.1.0: resolution: {integrity: sha512-9Ri+o0JYgehTaVBBDoMqIl8GXtbWg711O3srftcHhZ0dqnETqLaoIK0x17fUw9rFSlK/0NlsKe0Ahhyl5pXE2g==} @@ -5862,6 +6856,10 @@ packages: lower-case@2.0.2: resolution: {integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg==} + lowercase-keys@2.0.0: + resolution: {integrity: sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA==} + engines: {node: '>=8'} + lowercase-keys@3.0.0: resolution: {integrity: sha512-ozCC6gdQ+glXOQsveKD0YsDy8DSQFjDTz4zyzEHNV5+JP5D62LmfDZ6o1cycFx9ouG940M5dE8C8CTewdj2YWQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -5869,10 +6867,22 @@ packages: lru-cache@10.4.3: resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + lru-cache@11.5.2: + resolution: {integrity: sha512-4pfM1Ff0x50o0tQwb5ucw/RzNyD0/YJME6IVcStalZuMWxdt3sR3huStTtxz4PUmvZfRguvDejasvQ2kifR11g==} + engines: {node: 20 || >=22} + lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} - lunr-languages@1.20.0: + lru-cache@6.0.0: + resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} + engines: {node: '>=10'} + + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + + lunr-languages@1.20.0: resolution: {integrity: sha512-3LVgE7ekWXt04NBci/hjm+NXJxXZeRXuyClL0kA0HONyBOjxhP3ZQkuWIM4Ok3pbeptUW/rj3XcJcJuJVPwPYA==} lunr@2.3.9: @@ -5895,6 +6905,10 @@ packages: resolution: {integrity: sha512-o5vL7aDWatOTX8LzaS1WMoaoxIiLRQJuIKKe2wAw6IeULDHaqbiqiggmx+pKvZDb1Sj+pE46Sn1T7lCqfFtg1Q==} engines: {node: '>=16'} + markdown-it@14.3.0: + resolution: {integrity: sha512-RCEsPjR+sr0x+AuYp601tKTkgFG4YEPLCzHST3cQ/fhlJkqAkz1L2/Qbp1j9qw5SBwQHFBoW8+hoN5xssOF0Tw==} + hasBin: true + markdown-table@3.0.4: resolution: {integrity: sha512-wiYz4+JrLyb/DqW2hkFJxP7Vd7JuTDm77fvbM8VfEQdmSMqcImWeeRbHwZjBjIFki/VaMK2BhFi7oUUZeM5bqw==} @@ -5962,6 +6976,9 @@ packages: mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + mdurl@2.1.0: + resolution: {integrity: sha512-1+HBaOx0zi/dQWht8rNv9MYf9qqpqL/kxI0hXImU6Y547zM6Sni8BQibt7ifgMcYtQg41ao3Ivd6cnSM86inpg==} + media-typer@1.1.1: resolution: {integrity: sha512-yz3xRaG20c6/BOzvYoDaGtPmGscs7YivItZEEqe6GbwNfHuxu9YNmvnEkMzKldAGY4/80pRcQRZSEnhquk9XuQ==} engines: {node: '>= 0.8'} @@ -6137,10 +7154,28 @@ packages: resolution: {integrity: sha512-Lbgzdk0h4juoQ9fCKXW4by0UJqj+nOOrI9MJ1sSj4nI8aI2eo1qmvQEie4VD1glsS250n15LsWsYtCugiStS5A==} engines: {node: '>=18'} + mime@1.6.0: + resolution: {integrity: sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==} + engines: {node: '>=4'} + hasBin: true + + mime@2.6.0: + resolution: {integrity: sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==} + engines: {node: '>=4.0.0'} + hasBin: true + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} + mimic-function@5.0.1: + resolution: {integrity: sha512-VP79XUPxV2CigYP3jWwAUFSku2aKqBH7uTAapFWCBqutsbmDo96KY5o8uh6U+/YSIn5OxJnXp73beVkpqMIGhA==} + engines: {node: '>=18'} + + mimic-response@1.0.1: + resolution: {integrity: sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ==} + engines: {node: '>=4'} + mimic-response@3.1.0: resolution: {integrity: sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==} engines: {node: '>=10'} @@ -6169,6 +7204,9 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} + minimisted@2.0.1: + resolution: {integrity: sha512-1oPjfuLQa2caorJUM8HV8lGgWCc0qqAO1MNv/k05G4qslmsndV/5WdNZrqCiyqiz3wohia2Ij2B7w2Dr7/IyrA==} + minimizer-webpack-plugin@5.6.1: resolution: {integrity: sha512-DoeAZz8Q1C1znwsUzej1fdoi4jCf7/+Em27ouLqfK/+3m8G+D7yDhUwrc3CNhjSzGUN1kn7Iv4sWmjflQHenpw==} engines: {node: '>= 10.13.0'} @@ -6216,6 +7254,13 @@ packages: resolution: {integrity: sha512-tEBHqDnIoM/1rXME1zgka9g6Q2lcoCkxHLuc7ODJ5BxbP5d4c2Z5cGgtXAku59200Cx7diuHTOYfSBD8n6mm8A==} engines: {node: '>=16 || 14 >=14.17'} + mkdirp-classic@0.5.3: + resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} + + morgan@1.11.0: + resolution: {integrity: sha512-zSkVu3t18r39pw4ixfBKvfZi3y2UOqr7d4WYwcj3m8nXpEQK4rPO6GLzs/CExoRgmX3y9EjmmcXqv6jq0SK46g==} + engines: {node: '>= 0.8.0'} + mrmime@2.0.1: resolution: {integrity: sha512-Y3wQdFg2Va6etvQ5I82yUhGdsKrcYox6p7FfL1LbK2J4V01F9TGlepTIhnK24t7koZibmg82KGglhA1XK5IsLQ==} engines: {node: '>=10'} @@ -6226,18 +7271,34 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + msgpackr-extract@3.0.4: + resolution: {integrity: sha512-4kmO/MdyUIkLIvTPr8VHLil4AtoKIoniWPIEk5+CDy0xnWC84azhSFmuJ7PxZdsYtiP5kEeQsORAVIeMgxT+Hw==} + hasBin: true + + msgpackr@1.12.1: + resolution: {integrity: sha512-4EUH9tQHnMmEgzW/MdAP0KIfa1T9AF+htl0ffe2n5vb2EKn9y2co8ccpgWko6S52Jy1PQZKwRnx5/KkYjtd9MQ==} + multicast-dns@7.2.5: resolution: {integrity: sha512-2eznPJP8z2BFLX50tf0LuODrpINqP1RVIm/CObbTcBRITQgmC/TjcREF1NeTBzIcR5XO/ukWo+YHOjBbFwIupg==} hasBin: true + multipasta@0.2.8: + resolution: {integrity: sha512-ZPWuMKyv0cSO29f7hozp+k6+crZbQijV8ipMvxNxRf2SwtYGTX1ZX89Kd20VV4H9Znonx+EQn+iy1wGQsJ+b+Q==} + multistream@3.1.0: resolution: {integrity: sha512-zBgD3kn8izQAN/TaL1PCMv15vYpf+Vcrsfub06njuYVYlzUldzpopTlrEZ53pZVEbfn3Shtv7vRFoOv6LOV87Q==} + mute-stream@0.0.8: + resolution: {integrity: sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA==} + nanoid@3.3.16: resolution: {integrity: sha512-bzlKTyNJ7+LdGIIwy8ijFpIqEQIvafahV7eYykJ8Cvh42EdJeODoJ6gUJXpQJvej1BddH8OqTXZNE/KfbWAu8Q==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true + napi-build-utils@2.0.0: + resolution: {integrity: sha512-GEbrYkbfF7MoNaoh2iGG84Mnf/WZfB0GdGEsM8wz7Expx/LlWf5U8t9nvJKXSp3qr5IsEbK04cBGhol/KwOsWA==} + napi-postinstall@0.3.4: resolution: {integrity: sha512-PHI5f1O0EP5xJ9gQmFGMS6IZcrVvTjpXjz7Na41gTE7eE2hK11lg04CECCYEEjdc17EV4DO+fkGEtt7TpTaTiQ==} engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} @@ -6261,9 +7322,20 @@ packages: neo-async@2.6.2: resolution: {integrity: sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==} + netmask@2.1.1: + resolution: {integrity: sha512-eonl3sLUha+S1GzTPxychyhnUzKyeQkZ7jLjKrBagJgPla13F+uQ71HgpFefyHgqrjEbCPkDArxYsjY8/+gLKA==} + engines: {node: '>= 0.4.0'} + no-case@3.0.4: resolution: {integrity: sha512-fgAN3jGAh+RoxUGZHTSOLJIqUc2wmoBwGR4tbpNAKmmovFoWq0OdRkb0VkldReO2a2iBT/OEulG9XSUc10r3zg==} + node-abi@3.94.0: + resolution: {integrity: sha512-W5ZNO5KRPB5TkYmGVD9F6YqhsglXJzE6etpbmT+f6EQElhiX/UTG551cnsRGvLG3fyZEg9HwaDmNmj5nwJ4z9g==} + engines: {node: '>=10'} + + node-addon-api@4.3.0: + resolution: {integrity: sha512-73sE9+3UaLYYFmDsFZnqCInzPyh3MqIwZO9cw58yIqAZhONrrabrYyYe3TuIqtIiOuTXVhsGau8hcrhhwSsDIQ==} + node-addon-api@7.1.1: resolution: {integrity: sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==} @@ -6271,6 +7343,10 @@ packages: resolution: {integrity: sha512-Z3lTE9pLaJF47NyMhd4ww1yFTAP8YhYI8SleJiHzM46Fgpm5cnNzSl9XfzFNqbaz+VlJrIj3fXQ4DeN1Rjm6cw==} engines: {node: '>=18'} + node-gyp-build-optional-packages@5.2.2: + resolution: {integrity: sha512-s+w+rBWnpTMwSFbaE0UXsRlg7hU4FjekKU4eyAih5T8nJuNZT1nNsskXpxmeqSK9UzkBl6UgRlnKc8hz8IEqOw==} + hasBin: true + node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} @@ -6281,10 +7357,22 @@ packages: resolution: {integrity: sha512-wRNIrw4DmVLKQlbgOMdkMx27Wrpzes2hh5Jtbi2bjPd+4wJstWIqP5A+lscnqbm0xxmT5Bpg8Lec5ItEBwx6BQ==} engines: {node: '>=18'} + node-sarif-builder@3.4.0: + resolution: {integrity: sha512-tGnJW6OKRii9u/b2WiUViTJS+h7Apxx17qsMUjsUeNDiMMX5ZFf8F8Fcz7PAQ6omvOxHZtvDTmOYKJQwmfpjeg==} + engines: {node: '>=20'} + + normalize-package-data@6.0.2: + resolution: {integrity: sha512-V6gygoYb/5EmNI+MEGrWkC+e6+Rr7mTmfHrxDbLzxQogBkgzo76rkok0Am6thgSF7Mv2nLOajAJj5vDJZEFn7g==} + engines: {node: ^16.14.0 || >=18.0.0} + normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} engines: {node: '>=0.10.0'} + normalize-url@6.1.0: + resolution: {integrity: sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==} + engines: {node: '>=10'} + normalize-url@8.1.1: resolution: {integrity: sha512-JYc0DPlpGWB40kH5g07gGTrYuMqV653k3uBKY6uITPWds3M0ov3GaWGp9lbE3Bzngx8+XkfzgvASb9vk9JDFXQ==} engines: {node: '>=14.16'} @@ -6343,10 +7431,22 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} + onetime@7.0.0: + resolution: {integrity: sha512-VXJjc87FScF88uafS3JllDgvAm+c/Slfz06lorj2uAY34rlUu0Nt+v8wreiImcrgAjjIHp1rXpTDlLOGw29WwQ==} + engines: {node: '>=18'} + + open@10.2.0: + resolution: {integrity: sha512-YgBpdJHPyQ2UE5x+hlSXcnejzAvD0b22U2OuAP+8OnlJT+PjWPxtgmGqKKc+RgTM63U9gN0YzrYc71R2WT/hTA==} + engines: {node: '>=18'} + open@11.0.0: resolution: {integrity: sha512-smsWv2LzFjP03xmvFoJ331ss6h+jixfA4UUV/Bsiyuu4YJPfN+FIQGOIiv4w9/+MoHkfkJ22UIaQWRVFRfH6Vw==} engines: {node: '>=20'} + open@7.4.2: + resolution: {integrity: sha512-MVHddDVweXZF3awtlAS+6pgKLlm/JgxZ90+/NBurBoQctVOOB/zDdVjcyPzQ+0laDGbsWgrRkflI65sQeOgT9Q==} + engines: {node: '>=8'} + open@8.4.2: resolution: {integrity: sha512-7x81NCL719oNbsq/3mh+hVrAWmFuEYUqrq/Iw3kUzH8ReypT9QQ0BLoJS7/G9k6N81XjW4qHWtjWwe/9eLy1EQ==} engines: {node: '>=12'} @@ -6359,10 +7459,22 @@ packages: resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} engines: {node: '>= 0.8.0'} + ora@5.4.1: + resolution: {integrity: sha512-5b6Y85tPxZZ7QytO+BQzysW31HJku27cRIlkbAXaNx+BdcVi+LlRFmVXzeF6a7JCwJpyw5c4b+YSVImQIrBpuQ==} + engines: {node: '>=10'} + + ora@8.2.0: + resolution: {integrity: sha512-weP+BZ8MVNnlCm8c0Qdc1WSWq4Qn7I+9CJGm7Qali6g44e/PUzbjNqJX5NJ9ljlNMosfJvg1fKEGILklK9cwnw==} + engines: {node: '>=18'} + oxc-parser@0.139.0: resolution: {integrity: sha512-cf1TKZN+zc0lwqigeyXKzKVk5+vNRe99Or2+wVJsXLdlhJgC+gsIniYDfj/ZEBzCJ8Xm21ZG6YtMbR262CcS2w==} engines: {node: ^20.19.0 || >=22.12.0} + p-cancelable@2.1.1: + resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} + engines: {node: '>=8'} + p-cancelable@3.0.0: resolution: {integrity: sha512-mlVgR3PGuzlo0MmTdk4cXqXWlwQDLnONTAg6sm62XkMJEiRxN3GL3SffkYvqwonbkJBcrI7Uvv5Zh9yjvn2iUw==} engines: {node: '>=12.20'} @@ -6399,6 +7511,10 @@ packages: resolution: {integrity: sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ==} engines: {node: '>=10'} + p-map@7.0.6: + resolution: {integrity: sha512-I4Prw6ivkd6p8PiYR1tXASOAOBzIJwu0TB7fqaX0c/8c3QAehNYmX57EijyGGGBt3c/BIowGwV03RVBtXvHEVg==} + engines: {node: '>=18'} + p-queue@6.6.2: resolution: {integrity: sha512-RwFpb72c/BhQLEXIZ5K2e+AhgNVmIejGlTgiB9MzZ0e93GRvqZ7uSi0dvRF7/XIXDeNkra2fNHBxTyPDGySpjQ==} engines: {node: '>=8'} @@ -6415,6 +7531,14 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + package-json-from-dist@1.0.1: resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} @@ -6422,6 +7546,9 @@ packages: resolution: {integrity: sha512-cbH9IAIJHNj9uXi196JVsRlt7cHKak6u/e6AkL/bkRelZ7rlL3X1YKxsZwa36xipOEKAsdtmaG6aAJoM1fx2zA==} engines: {node: '>=14.16'} + pako@0.2.9: + resolution: {integrity: sha512-NUcwaKxUxWrZLpDG+z/xZaCgQITkA/Dv4V/T6bw7VON6l1Xz/VnrBqrYjZQ12TamKHzITTfOEIYUj48y2KXImA==} + pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -6439,9 +7566,16 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} + parse-json@8.3.0: + resolution: {integrity: sha512-ybiGyvspI+fAoRQbIPRddCcSTV9/LsJbf0e/S85VLowVGzRmokfneg2kwVW/KU5rOXrPSbF1qAKPMgNTqqROQQ==} + engines: {node: '>=18'} + parse-numeric-range@1.3.0: resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} + parse-semver@1.1.1: + resolution: {integrity: sha512-Eg1OuNntBMH0ojvEKSrvDSnwLmvVuUOSdylH/pSCPNMIspLlweJyIWXCE+k/5hm3cj/EBUYwmWkjhBALNP4LXQ==} + parse-svg-path@0.2.0: resolution: {integrity: sha512-Tf7FFIrguPKQwzD4pWnYkR2VOv3raoHeKED80Bm+BYHI3KxC8KsgsGC5+fSMzAGDA6UEk4bHvmi+RsjmL3khpg==} @@ -6472,6 +7606,10 @@ packages: resolution: {integrity: sha512-RjhtfwJOxzcFmNOi6ltcbcu4Iu+FL3zEj83dk4kAS+fVpTxXLO1b38RvJgT/0QwvV/L3aY9TAnyv0EOqW4GoMQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + path-expression-matcher@1.6.2: + resolution: {integrity: sha512-enSlaiat05iasnzmgNxRj8reFdj3puY2QpNgP1aPIaVfT6nn9ICuPoFlKHk8EN22HcwewshO+mN2DGbkCEOtqQ==} + engines: {node: '>=14.0.0'} + path-is-absolute@1.0.1: resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} engines: {node: '>=0.10.0'} @@ -6490,6 +7628,10 @@ packages: resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} engines: {node: '>=16 || 14 >=14.18'} + path-scurry@2.0.2: + resolution: {integrity: sha512-3O/iVVsJAPsOnpwWIeD+d6z/7PmqApyQePUtCndjatj/9I5LylHvt5qluFaBT3I5h3r1ejfR056c+FCv+NnNXg==} + engines: {node: 18 || 20 || >=22} + path-to-regexp@1.9.0: resolution: {integrity: sha512-xIp7/apCFJuUHdDLWe8O1HIkb0kQrOMb/0u6FXQjemHn/ii5LrIzU6bdECnsiTF/GjZkMEKg1xdiZwNqDYlZ6g==} @@ -6503,6 +7645,16 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} + path-type@6.0.0: + resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} + engines: {node: '>=18'} + + peek-stream@1.1.3: + resolution: {integrity: sha512-FhJ+YbOSBb9/rIl2ZeE/QHEsWn7PqNYt8ARAY3kIgNGOk13g9FGyIY6JIl/xB/3TFRVoTv5as0l11weORrTekA==} + + pend@1.2.0: + resolution: {integrity: sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg==} + picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -6514,6 +7666,10 @@ packages: resolution: {integrity: sha512-RvwwcruNjI1ncT5xRakeyS9Lf8lcItv34KD+aif+VH9kduAyfYBipGh12274xtenIPZ119/R9BdTBa8gAwSh0A==} engines: {node: '>=12'} + pify@4.0.1: + resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} + engines: {node: '>=6'} + pino-abstract-transport@1.2.0: resolution: {integrity: sha512-Guhh8EZfPCfH+PMXAb6rKOjGQEoy0xlAIn+irODG5kgfYV+BQ0rGYYWTIel3P5mmyXqkYkPmdIkywsn6QKUR1Q==} @@ -6550,6 +7706,27 @@ packages: resolution: {integrity: sha512-emEcLuomt2j03vxD54giVB4SxTjnsqkU692xZOZXHDVoYyypEm+b3jpiTcc+Cf+myooc+/Ly0z01jqeNHVgJGw==} engines: {node: '>=16.0.0'} + playwright-core@1.62.1: + resolution: {integrity: sha512-wPYSwEBJY9GHraISXqyqtx0na0LpO3XEX7jNDhntbex7tzUS7kLnZsOlFruFJB4Hi/rhDMjXGqHewDZ68nYZVw==} + engines: {node: '>=20'} + hasBin: true + + playwright@1.62.1: + resolution: {integrity: sha512-0M+L3LAD8/nm554LOla9Ayx0j0tmFZ0FBcoQ7F1VuVHpM/XpiC8RcDzBQB8W5+hA8L22THxELzeF+2WcUzvcLg==} + engines: {node: '>=20'} + hasBin: true + + pluralize@2.0.0: + resolution: {integrity: sha512-TqNZzQCD4S42De9IfnnBvILN7HAW7riLqsCyp8lgjXeysyPlX5HhqKAcJHHHb9XskE4/a+7VGC9zzx8Ls0jOAw==} + + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + + possible-typed-array-names@1.1.0: + resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} + engines: {node: '>= 0.4'} + postcss-attribute-case-insensitive@7.0.1: resolution: {integrity: sha512-Uai+SupNSqzlschRyNx3kbCTWgY/2hcwtHEI/ej2LJWc9JJ77qKgGptd8DHwY1mXtZ7Aoh4z4yxfwMBue9eNgw==} engines: {node: '>=18'} @@ -6945,6 +8122,12 @@ packages: resolution: {integrity: sha512-dM0jVuXJPsDN6DvRpea484tCUaMiXWjuCn++HGTqUWzGDjv5tZkEZldAJ/UMlqRYGFrD/etByo4/xOuC/snX2A==} engines: {node: '>=20'} + prebuild-install@7.1.3: + resolution: {integrity: sha512-8Mf2cbV7x1cXPUILADGI3wuhfqWvtiLA1iclTDbFRZkgRQS0NqsPZphna9V+HyTEadheuPmjaJMsbzKQFOzLug==} + engines: {node: '>=10'} + deprecated: No longer maintained. Please contact the author of the relevant native addon; alternatives are available. + hasBin: true + prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -7007,9 +8190,35 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} + proxy-agent-negotiate@1.1.0: + resolution: {integrity: sha512-N8IBcM3UgCVzz2L2Lqv8DVntDnnC8/hiV4nEDUPkqq72TPUgYWjQc+bdZlBPZK9LzPAvOY//gAt0S0DApoOXWQ==} + engines: {node: '>= 20'} + peerDependencies: + kerberos: ^2.0.0 + peerDependenciesMeta: + kerberos: + optional: true + + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + + pump@2.0.1: + resolution: {integrity: sha512-ruPMNRkN3MHP1cWJc9OWr+T/xDP0jhXYCLfJcBuX54hhfIBnaQmAUMfDcG4DM5UMWByBbJY69QSphm3jtDKIkA==} + pump@3.0.4: resolution: {integrity: sha512-VS7sjc6KR7e1ukRFhQSY5LM2uBWAUPiOPa/A3mkKmiMwSmRFUITt0xuj+/lesgnCv+dPIEYlkzrcyXgquIHMcA==} + pumpify@1.5.1: + resolution: {integrity: sha512-oClZI37HvuUJJxSKKrC17bZ9Cu0ZYhEAGPsPUy9KlMUmv9dKX2o77RUmq7f3XjIxbwyGwYzbzQ1L2Ks8sIradQ==} + + punycode.js@2.3.1: + resolution: {integrity: sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==} + engines: {node: '>=6'} + punycode@2.3.1: resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} engines: {node: '>=6'} @@ -7018,6 +8227,9 @@ packages: resolution: {integrity: sha512-LjgDO2zPtoXP2wJpDjZrGdojii1uqO0cnwKoIoUzkfS98HDmbeiGmYiXo3lXeFlq2xvne1QFQhwYXSUCLKtEuA==} engines: {node: '>=12.20'} + pure-rand@6.1.0: + resolution: {integrity: sha512-bVWawvoZoBYpp6yIoQtQXHZjmz35RSVHnUOTefl8Vcjr8snTPY1wnpSPMWekcFwbxI6gtmT7rSYPFvz71ldiOA==} + pure-rand@7.0.1: resolution: {integrity: sha512-oTUZM/NAZS8p7ANR3SHh30kXB+zK2r2BPcEn/awJIbOvq82WoMN4p62AWWp3Hhw50G0xMsw1mhIBLqHw64EcNQ==} @@ -7054,6 +8266,9 @@ packages: resolution: {integrity: sha512-K5zQjDllxWkf7Z5xJdV0/B0WTNqx6vxG70zJE4N0kBs4LovmEYWJzQGxC9bS9RAKu3bgM40lrd5zoLJ12MQ5BA==} engines: {node: '>= 0.10'} + rc-config-loader@4.1.4: + resolution: {integrity: sha512-3GiwEzklkbXTDp52UR5nT8iXgYAx1V9ZG/kDZT7p60u2GCv2XTwQq4NzinMoMpNtXhmt3WkhYXcj6HH8HdwCEQ==} + rc@1.2.8: resolution: {integrity: sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==} hasBin: true @@ -7108,6 +8323,14 @@ packages: resolution: {integrity: sha512-PWaYA1L/q9u2u7xYQi+Y3L3Yfnie7XyLeaJICV1MGD6LprsBxcAqGjYyr0eY3p+QdsA+x/Irkt4Qif8D63+Sbw==} engines: {node: '>=0.10.0'} + read-pkg@9.0.1: + resolution: {integrity: sha512-9viLL4/n1BJUCT1NXVTdS1jtm80yDEgR5T4yCelII49Mbj0v1rZdKqj7zCiYdbB0CuCgdrvHcNogAKTFPBocFA==} + engines: {node: '>=18'} + + read@1.0.7: + resolution: {integrity: sha512-rSOKNYUmaxy0om1BNjMN4ezNT6VKK+2xF4GBhc81mkH7L60i6dp8qPYrkndNLT3QPphoII3maL9PVC9XmhHwVQ==} + engines: {node: '>=0.8'} + readable-stream@2.3.8: resolution: {integrity: sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==} @@ -7238,6 +8461,10 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} + resolve-path@1.4.0: + resolution: {integrity: sha512-i1xevIst/Qa+nA9olDxLWnLk8YZbi8R/7JPbCMcgyWaFR6bKWaexgJgEB5oc2PKMjYdrHynyz0NY+if+H98t1w==} + engines: {node: '>= 0.8'} + resolve-pathname@3.0.0: resolution: {integrity: sha512-C7rARubxI8bXFNB/hqcp/4iUeIXJhJZvFPFPiSPRnhU5UPxzMFIl+2E6yY6c4k9giDJAhtV+enfA+G89N6Csng==} @@ -7249,10 +8476,21 @@ packages: engines: {node: '>= 0.4'} hasBin: true + responselike@2.0.1: + resolution: {integrity: sha512-4gl03wn3hj1HP3yzgdI7d3lCkF95F21Pz4BPGvKHinyQzALR5CapwC8yIi0Rh58DEMQ/SguC03wFj2k0M/mHhw==} + responselike@3.0.0: resolution: {integrity: sha512-40yHxbNcl2+rzXvZuVkrYohathsSJlMTXKryG5y8uciHv1+xDLHQpgjG64JUO9nrEq2jGLH6IZ8BcZyw3wrweg==} engines: {node: '>=14.16'} + restore-cursor@3.1.0: + resolution: {integrity: sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA==} + engines: {node: '>=8'} + + restore-cursor@5.1.0: + resolution: {integrity: sha512-oMA2dcrw6u0YfxJQXm342bFKX/E4sG9rbTzO9ptUcR/e8A33cHuvStiYOwH7fszkZlZ1z/ta9AAoPk2F4qIOHA==} + engines: {node: '>=18'} + retry@0.12.0: resolution: {integrity: sha512-9LkiTwjUh6rT555DtE9rTX+BKByPfrMzEAtnlEtdEwr3Nkffwiihqe2bWADg+OQRjt9gl6ICdmB/ZFDCGAtSow==} engines: {node: '>= 4'} @@ -7308,6 +8546,10 @@ packages: resolution: {integrity: sha512-DPe5pVFaAsinSaV6QjQ6gdiedWDcRCbUuiQfQa2wmWV7+xC9bGulGI8+TdRmoFkAPaBXk8CrAbnlY2ISniJ47Q==} engines: {node: '>=18'} + run-async@2.4.1: + resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} + engines: {node: '>=0.12.0'} + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} @@ -7357,6 +8599,11 @@ packages: search-insights@2.17.3: resolution: {integrity: sha512-RQPdCYTa8A68uM2jwxoY842xDhvx3E5LFL1LxvxCNMev4o5mLuokczhzjAgGwUZBAmOKZknArSxLKmXtIi2AxQ==} + secretlint@10.2.2: + resolution: {integrity: sha512-xVpkeHV/aoWe4vP4TansF622nBEImzCY73y/0042DuJ29iKIaqgoJ8fGxre3rVSHHbxar4FdJobmTnLp9AU0eg==} + engines: {node: '>=20.0.0'} + hasBin: true + section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -7372,13 +8619,12 @@ packages: resolution: {integrity: sha512-0Ju4+6A8iOnpL/Thra7dZsSlOHYAHIeMxfhWQRI1/VLcT3WDBZKKtQt/QkBOsiIN9ZpuvHE6cGZ0x4glCMmfiA==} engines: {node: '>=12'} - semver@6.3.1: - resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} + semver@5.7.2: + resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true - semver@7.8.1: - resolution: {integrity: sha512-rkVq3IXh+4FDGch+KwzX3aV9W3kO54GyEgpvBzSyctDA6Xtd7RJQV1xmXbeQp5v7+VzLOfVqiutSE6GICgPFvg==} - engines: {node: '>=10'} + semver@6.3.1: + resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true semver@7.8.5: @@ -7419,9 +8665,17 @@ packages: setimmediate@1.0.5: resolution: {integrity: sha512-MATJdZp8sLqDl/68LfQmbP8zKPLQNV6BIZoIgrscFDQ+RsvK/BxeDQOgyxKKoh0y/8h3BqVFnCqQ/gd+reiIXA==} + setprototypeof@1.1.0: + resolution: {integrity: sha512-BvE/TwpZX4FXExxOxZyRGQQv651MSwmWKZGqvmPcRIjDqWub67kTKuIMx43cZZrS/cBBzwBcNDWoFxt2XEFIpQ==} + setprototypeof@1.2.0: resolution: {integrity: sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==} + sha.js@2.4.12: + resolution: {integrity: sha512-8LzC5+bvI45BjpfXU8V5fdU2mfeKiQe1D1gIMn7XUlF3OTUrpdJpPPH4EMAnF0DsHHdSZqCdSss5qCmJKuiO3w==} + engines: {node: '>= 0.10'} + hasBin: true + shallow-clone@3.0.1: resolution: {integrity: sha512-/6KqX+GVUdqPuPPd2LxDDxzX6CAbjJehAAOKlNpqqUpAqPM6HeL8f+o3a+JsyGjn2lv0WY8UsTgUJjU9Ok55NA==} engines: {node: '>=8'} @@ -7468,6 +8722,12 @@ packages: resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} engines: {node: '>=14'} + simple-concat@1.0.1: + resolution: {integrity: sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==} + + simple-get@4.0.1: + resolution: {integrity: sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==} + sirv@2.0.4: resolution: {integrity: sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==} engines: {node: '>= 10'} @@ -7492,9 +8752,29 @@ packages: resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} engines: {node: '>=12'} + slash@5.1.0: + resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} + engines: {node: '>=14.16'} + + slice-ansi@4.0.0: + resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} + engines: {node: '>=10'} + + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + snake-case@3.0.4: resolution: {integrity: sha512-LAOh4z89bGQvl9pFfNF8V146i7o7/CqFPbqzYgP+yYzDIDeS9HaNFtXABamRW+AQzEVODcvE79ljJ+8a9YSdMg==} + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.9: + resolution: {integrity: sha512-LJhUYUvItdQ0LkJTmPeaEObWXAqFyfmP85x0tch/ez9cahmhlBBLbIqDFnvBnUJGagb0JbIQrkBs1wJ+yRYpEw==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + sonic-boom@4.2.1: resolution: {integrity: sha512-w6AxtubXa2wTXAUsZMMWERrsIRAdrK0Sc+FUytWvYAhBJLyuI4llrMIC1DtlNSdI99EI86KZum2MMq3EAZlF9Q==} @@ -7523,6 +8803,18 @@ packages: space-separated-tokens@2.0.2: resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} + spdx-correct@3.2.0: + resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} + + spdx-exceptions@2.5.0: + resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} + + spdx-expression-parse@3.0.1: + resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} + + spdx-license-ids@3.0.23: + resolution: {integrity: sha512-CWLcCCH7VLu13TgOH+r8p1O/Znwhqv/dbb6lqWy67G+pT1kHmeD/+V36AVb/vq8QMIQwVShJ6Ssl5FPh0fuSdw==} + split2@4.2.0: resolution: {integrity: sha512-UcjcJOWknrNkF6PLX83qcHM6KHgVKNkV62Y8a5uYDVv9ydGQVwAHMKqHdJje1VTWpljG0WYpCDhrCdAOYH4TWg==} engines: {node: '>= 10.x'} @@ -7549,6 +8841,16 @@ packages: std-env@3.10.0: resolution: {integrity: sha512-5GS12FdOZNliM5mAOxFRg7Ir0pWz8MdpYm6AY6VPkGpbA7ZzmbzNcBJQ0GPvvyWgcY7QAhCgf9Uy89I03faLkg==} + stdin-discarder@0.2.2: + resolution: {integrity: sha512-UhDfHmA92YAlNnCfhmq0VeNL5bDbiZGg7sZ2IvPsXubGkiNa9EC+tUTsjBRsYUAz87btI6/1wf4XoVvQ3uRnmQ==} + engines: {node: '>=18'} + + stream-shift@1.0.3: + resolution: {integrity: sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==} + + streamx@2.28.0: + resolution: {integrity: sha512-1Yowhzjf0ivGMrTIkY9hav5TxobO9qIVqUE41fiCGMGgc3CLlf4MY+9AHmZqBWgDTue0fY9zWjYFVyf6Diuobw==} + string-argv@0.3.2: resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} engines: {node: '>=0.6.19'} @@ -7610,6 +8912,12 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + strnum@2.4.2: + resolution: {integrity: sha512-rDG3Ah4TV0k1hWvLSzkZtMmLN9+eS+h3knq4MP6A42Y3Yh5qGNnOUs1jJkoSr8FG5dsL28c7KgkIBzSEykqtuw==} + + structured-source@4.0.0: + resolution: {integrity: sha512-qGzRFNJDjFieQkl/sVOI2dUjHKRyL9dAJi2gCPGJLbJHBIkyOHxjuocpIEfbLioX+qSJpvbYdT49/YCdMznKxA==} + style-to-js@1.1.21: resolution: {integrity: sha512-RjQetxJrrUJLQPHbLku6U/ocGtzyjbJMP9lCNK7Ag0CNh690nSH8woqWH9u16nMjYBAok+i7JO1NP2pOy8IsPQ==} @@ -7634,6 +8942,10 @@ packages: resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} engines: {node: '>=10'} + supports-hyperlinks@3.2.0: + resolution: {integrity: sha512-zFObLMyZeEwzAoKCyu1B91U79K2t7ApXuQfo8OuxwXLDgcKxuwM+YvcbIhm6QWqz7mHUH1TVytR1PwVVjEuMig==} + engines: {node: '>=14.18'} + supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} @@ -7659,6 +8971,10 @@ packages: resolution: {integrity: sha512-eNRKgb3z66Yp3D2CixVujOUvXLFUTij/zVnV8KRyvFdQwpz7I5DS8UfRkTeLzb64u+dkzDSdelE24izu+zSSUg==} engines: {node: ^14.18.0 || >=16.0.0} + table@6.9.0: + resolution: {integrity: sha512-9kY+CygyYM6j02t5YFHbNz2FN5QmYGv9zAjVp4lCDjlCw7amdckXlEt/bjMhUIfj4ThGRE4gCUH5+yGnNuPo5A==} + engines: {node: '>=10.0.0'} + tabulator-tables@6.5.2: resolution: {integrity: sha512-cRL3xsaaf5RzND8KPbn4C9Ce5tzyiQUE01E/10zN50MjdRKl/Gl5nXkzLN6cvEyRfWHCPuqBF92y50CBw20WYA==} @@ -7666,6 +8982,26 @@ packages: resolution: {integrity: sha512-uxc/zpqFg6x7C8vOE7lh6Lbda8eEL9zmVm/PLeTPBRhh1xCgdWaQ+J1CUieGpIfm2HdtsUpRv+HshiasBMcc6A==} engines: {node: '>=6'} + tar-fs@2.1.5: + resolution: {integrity: sha512-OboTd8mmMhZDNPV+UjQcK9yKAatXu2aJ+r1w4im1Otd4M4fl2hwvdoXUxIYHFTHWK/3y3FarBP70v3vwmGlOxw==} + + tar-fs@3.1.3: + resolution: {integrity: sha512-/hU4AXnIdZu+Gvl1pk0oI5f5HxWsCJRtY2aFaJdk9VvyL48DWU6iU5WAIPG+wIi1YvWA6eTJvIviP/tMAZZNwQ==} + + tar-stream@2.2.0: + resolution: {integrity: sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==} + engines: {node: '>=6'} + + tar-stream@3.2.0: + resolution: {integrity: sha512-ojzvCvVaNp6aOTFmG7jaRD0meowIAuPc3cMMhSgKiVWws1GyHbGd/xvnyuRKcKlMpt3qvxx6r0hreCNITP9hIg==} + + teex@1.0.1: + resolution: {integrity: sha512-eYE6iEI62Ni1H8oIa7KlDU6uQBtqr4Eajni3wX7rpfXD8ysFx8z0+dri+KWEPWpBsxXfxu58x/0jvTVT1ekOSg==} + + terminal-link@4.0.0: + resolution: {integrity: sha512-lk+vH+MccxNqgVqSnkMVKx4VLJfnLjDBGzH16JVZjKE2DoxP57s6/vt6JmXV5I3jBcfGrxNrYtC+mPtU7WJztA==} + engines: {node: '>=18'} + terser-webpack-plugin@5.6.1: resolution: {integrity: sha512-201R5j+sJpK8nFWwKVyNfZot8FaJbLZDq5evriVzbV1wDtSXDjRUDRfJzHpAaxFDMEhsZL1QkeqM61wgsS3KaQ==} engines: {node: '>= 10.13.0'} @@ -7723,11 +9059,15 @@ packages: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - thingies@2.5.0: - resolution: {integrity: sha512-s+2Bwztg6PhWUD7XMfeYm5qliDdSiZm7M7n8KjTkIsm3l/2lgVRc2/Gx/v+ZX8lT4FMA+i8aQvhcWylldc+ZNw==} - engines: {node: '>=10.18'} - peerDependencies: - tslib: ^2 + text-decoder@1.2.7: + resolution: {integrity: sha512-vlLytXkeP4xvEq2otHeJfSQIRyWxo/oZGEbXrtEEF9Hnmrdly59sUbzZ/QgyWuLYHctCHxFF4tRQZNQ9k60ExQ==} + + text-table@0.2.0: + resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + + textextensions@6.11.0: + resolution: {integrity: sha512-tXJwSr9355kFJI3lbCkPpUH5cP8/M0GGy2xLO34aZCjMXBaK3SoPnZwr/oWmo1FdCnELcs4npdCIOFtq9W3ruQ==} + engines: {node: '>=4'} thingies@2.6.1: resolution: {integrity: sha512-cV/CMGTK3M4MlnJ/0At6ismOw/A0EEniDNScajjz/Br3c1sqE72YD01rGpPTKwd27wAxI5Pr+6+0w8yofzFRYw==} @@ -7738,6 +9078,12 @@ packages: thread-stream@3.2.0: resolution: {integrity: sha512-zLBvqpwr4Esa0kRjcrzGU6zL25lePWaCLMx0RQFrmteozIfeNdaMLpG5U7PeHzvlFkAWaRKA9/KVW4F60iB+qw==} + through2@2.0.5: + resolution: {integrity: sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==} + + through@2.3.8: + resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} + thunky@1.1.0: resolution: {integrity: sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==} @@ -7777,9 +9123,17 @@ packages: resolution: {integrity: sha512-A3BDQBeeukYPzB4QdQ1DtdlUmp4x2OCH8n5UVhEWbyANxNep8GavottKzd1xYKFJKjUgMyPT7EzOfnBO55s8Sg==} hasBin: true + tmp@0.2.7: + resolution: {integrity: sha512-e0votIpp4Uo2AJYSzVHV6xCcawuiez3DzqDAbrTc3YxBkplN6e+dM13ZeIcZnDg/QpSuU2zfZ3rzwY8ukEnaXw==} + engines: {node: '>=14.14'} + tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} + to-buffer@1.2.2: + resolution: {integrity: sha512-db0E3UJjcFhpDhAF4tLo03oli3pwl3dbnzXOUIlRKrp+ldk/VUxzpWYZENsw2SZiuBjHAk7DfB0VU7NKdpb6sw==} + engines: {node: '>= 0.4'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -7836,6 +9190,15 @@ packages: tslib@2.8.1: resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} + tsscmp@1.0.6: + resolution: {integrity: sha512-LxhtAkPDTkVCMQjt2h6eBVY28KCjikZqZfMcC15YBeNjkgUpdCfBu5HoiOTDu86v6smE8yOjyEktJ8hlbANHQA==} + engines: {node: '>=0.6.x'} + + tsx@4.23.12: + resolution: {integrity: sha512-FDf4L4sYzKtzWYhU/Xm0AQFdTjdIxNo9ElTf2mxXM6k8YMHXzYUe4yODVaXP4V9uMFbVg8c0qyBccK2OOxb45Q==} + engines: {node: '>=18.0.0'} + hasBin: true + tsyringe@4.10.0: resolution: {integrity: sha512-axr3IdNuVIxnaK5XGEUFTu3YmAQ6lllgrvqfEoR16g/HGnYY/6We4oWENtAnzK6/LpJ2ur9PAb80RBt7/U4ugw==} engines: {node: '>= 6.0.0'} @@ -7843,6 +9206,10 @@ packages: tunnel-agent@0.6.0: resolution: {integrity: sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==} + tunnel@0.0.6: + resolution: {integrity: sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg==} + engines: {node: '>=0.6.11 <=0.7.0 || >=0.7.3'} + type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} engines: {node: '>= 0.8.0'} @@ -7863,10 +9230,21 @@ packages: resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} + engines: {node: '>=16'} + type-is@2.1.0: resolution: {integrity: sha512-faYHw0anBbc/kWF3zFTEnxSFOAGUX9GFbOBthvDdLsIlEoWOFOtS0zgCiQYwIskL9iGXZL3kAXD8OoZ4GmMATA==} engines: {node: '>= 18'} + typed-array-buffer@1.0.3: + resolution: {integrity: sha512-nAYYwfY3qnzX30IkA6AQZjVbtK6duGontcQm1WSG1MD94YLqK0515GNApXkoxKOWMusVssAHWLh9SeaoefYFGw==} + engines: {node: '>= 0.4'} + + typed-rest-client@1.8.11: + resolution: {integrity: sha512-5UvfMpd1oelmUPRbbaVnq+rHP7ng2cE4qoQkQeAqxRL6PklkxsM0g32/HL0yfvruK6ojQ5x8EE+HF4YV6DtuCA==} + typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} @@ -7887,6 +9265,12 @@ packages: engines: {node: '>=16.20.0'} hasBin: true + uc.micro@2.1.0: + resolution: {integrity: sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==} + + underscore@1.13.8: + resolution: {integrity: sha512-DXtD3ZtEQzc7M8m4cXotyHR+FAS18C64asBYY5vqZexfYryNNnDc02W4hKg3rdQuqOYas1jkseX0+nZXjTXnvQ==} + undici-types@6.21.0: resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} @@ -7914,6 +9298,14 @@ packages: resolution: {integrity: sha512-hpbDzxUY9BFwX+UeBnxv3Sh1q7HFxj48DTmXchNgRa46lO8uj3/1iEn3MiNUYTg1g9ctIqXCCERn8gYZhHC5lQ==} engines: {node: '>=4'} + unicorn-magic@0.1.0: + resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} + engines: {node: '>=18'} + + unicorn-magic@0.3.0: + resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} + engines: {node: '>=18'} + unified@11.0.5: resolution: {integrity: sha512-xKvGhPWw3k84Qjh8bI3ZeJjqnyadK+GEFtazSfZv/rKeTkTjOJho6mFqh2SM96iIcZokxiOpg78GazTSg8+KHA==} @@ -7973,6 +9365,9 @@ packages: uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} + url-join@4.0.1: + resolution: {integrity: sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==} + url-loader@4.1.1: resolution: {integrity: sha512-3BTV812+AVHHOJQO8O5MkWgZ5aosP7GnROJwvzLS9hWDj00lZ6Z0wNak423Lp9PBZN05N+Jk/N5Si8jRAlGyWA==} engines: {node: '>= 10.13.0'} @@ -7997,6 +9392,9 @@ packages: resolution: {integrity: sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==} engines: {node: '>=10.12.0'} + validate-npm-package-license@3.0.4: + resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + value-equal@1.0.1: resolution: {integrity: sha512-NOJ6JZCAWr0zlxZt+xqCHNTEKOsrks2HQd4MqhP1qy4z1SkbEP467eNx6TgDKXMvUOb+OENfJCZwM+16n7fRfw==} @@ -8004,6 +9402,10 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} + version-range@4.15.0: + resolution: {integrity: sha512-Ck0EJbAGxHwprkzFO966t4/5QkRuzh+/I1RxhLgUKKwEn+Cd8NwM60mE3AqBZg5gYODoXW0EFsQvbZjRlvdqbg==} + engines: {node: '>=4'} + vfile-location@5.0.3: resolution: {integrity: sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==} @@ -8013,6 +9415,9 @@ packages: vfile@6.0.3: resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} + vscode-uri@3.1.0: + resolution: {integrity: sha512-/BpdSx+yCQGnCvecbyXdxHDkuk55/G3xwnC0GqY4gmQ3j+A+g8kzzgB4Nk/SINjqn6+waqw3EgbVF2QKExkRxQ==} + w3c-xmlserializer@5.0.0: resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} engines: {node: '>=18'} @@ -8024,6 +9429,9 @@ packages: resolution: {integrity: sha512-6i/00NBjP4yGPs+caKSyRfpTF/8Torsu0MOW3mMzIbhgISFder8i7xbqgHlLMwJrdiN8ndBV3UA1/AfzPSr+jg==} engines: {node: '>=10.13.0'} + wcwidth@1.0.1: + resolution: {integrity: sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==} + web-namespaces@2.0.1: resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==} @@ -8113,6 +9521,10 @@ packages: resolution: {integrity: sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==} engines: {node: '>=18'} + which-typed-array@1.1.22: + resolution: {integrity: sha512-fvO4ExWMFsqyhG3AiPAObMuY1lxaqgYcxbc49CNdWDDECOJNgQyvsOWVwbZc+qf3rzRtxojBK+CMEv0Ld5CYpw==} + engines: {node: '>= 0.4'} + which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -8129,6 +9541,10 @@ packages: resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} engines: {node: '>=0.10.0'} + wrap-ansi@6.2.0: + resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + engines: {node: '>=8'} + wrap-ansi@7.0.0: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} @@ -8187,6 +9603,10 @@ packages: utf-8-validate: optional: true + wsl-utils@0.1.0: + resolution: {integrity: sha512-h3Fbisa2nKGPxCpm89Hk33lBLsnaGBvctQopaBSOW/uIs6FTe1ATyAnKFJrzVs9vpGdsTe73WF3V4lIsk4Gacw==} + engines: {node: '>=18'} + wsl-utils@0.3.1: resolution: {integrity: sha512-g/eziiSUNBSsdDJtCLB8bdYEUMj4jR7AGeUo96p/3dTafgjHhpF4RiCFPiRILwjQoDXx5MqkBr4fwWtR3Ky4Wg==} engines: {node: '>=20'} @@ -8203,6 +9623,14 @@ packages: resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} engines: {node: '>=18'} + xml-naming@0.3.0: + resolution: {integrity: sha512-ghig2TBE/H11aOVgmahA3MhimvkBr6JIYknH/Dhdk10nXwdbIqBJsbfMxpvFPG8bAw77gN29aQWvKpmVoPlvPQ==} + engines: {node: '>=16.0.0'} + + xml2js@0.5.0: + resolution: {integrity: sha512-drPFnkQJik/O+uPKpqSgr22mpuFHqKdbS835iAQrUC73L2F5WkboIRd63ai/2Yg6I1jzifPFKH2NTK+cfglkIA==} + engines: {node: '>=4.0.0'} + xml2js@0.6.2: resolution: {integrity: sha512-T4rieHaC1EXcES0Kxxj4JWgaUQHDk+qwHcYOCFHfiwKz7tOVPLq7Hjq9dM1WCMhylqMEfP7hMcOIChvotiZegA==} engines: {node: '>=4.0.0'} @@ -8217,6 +9645,10 @@ packages: xmlcreate@2.0.4: resolution: {integrity: sha512-nquOebG4sngPmGPICTS5EnxqhKbCmz5Ox5hsszI2T6U5qdrJizBc+0ilYSEjTSzU0yZcmvppztXe/5Al5fUwdg==} + xtend@4.0.2: + resolution: {integrity: sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==} + engines: {node: '>=0.4'} + y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -8224,6 +9656,9 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} + yallist@4.0.0: + resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yaml@2.9.0: resolution: {integrity: sha512-2AvhNX3mb8zd6Zy7INTtSpl1F15HW6Wnqj0srWlkKLcpYl/gMIMJiyuGq2KeI2YFxUPjdlB+3Lc10seMLtL4cA==} engines: {node: '>= 14.6'} @@ -8245,6 +9680,13 @@ packages: resolution: {integrity: sha512-4UEqdc2RYGHZc7Doyqkrqiln3p9X2DZVxaGbwhn2pi7MrRagKaOcIKe8L3OxYcbhXLgLFUS3zAYuQjKBQgmuNg==} engines: {node: ^20.19.0 || ^22.12.0 || >=23} + yauzl@3.4.0: + resolution: {integrity: sha512-jIH9yLR9wqr0wOS0TpBvo/g/2UgZH5qePVbjgRliiF0BYvOZyaBknKsF+x9Iht0O6sqgnB93rCICdOZFecJuDw==} + engines: {node: '>=12'} + + yazl@2.5.1: + resolution: {integrity: sha512-phENi2PLiHnHb6QBVot+dJnaAZ0xosj7p3fWl+znIjBDlnMI2PsZCJZ306BPTFOaHf5qdDEI8x5qFrSOBN5vrw==} + yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} @@ -8408,64 +9850,185 @@ snapshots: '@csstools/css-tokenizer': 3.0.4 lru-cache: 10.4.3 - '@babel/code-frame@7.29.0': - dependencies: - '@babel/helper-validator-identifier': 7.28.5 - js-tokens: 4.0.0 - picocolors: 1.1.1 + '@azu/format-text@1.0.2': {} - '@babel/code-frame@7.29.7': + '@azu/style-format@1.0.1': dependencies: - '@babel/helper-validator-identifier': 7.29.7 - js-tokens: 4.0.0 - picocolors: 1.1.1 + '@azu/format-text': 1.0.2 - '@babel/compat-data@7.29.7': {} - - '@babel/core@7.29.7': + '@azure-rest/core-client@2.8.0': dependencies: - '@babel/code-frame': 7.29.7 - '@babel/generator': 7.29.7 - '@babel/helper-compilation-targets': 7.29.7 - '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) - '@babel/helpers': 7.29.7 - '@babel/parser': 7.29.7 - '@babel/template': 7.29.7 - '@babel/traverse': 7.29.7 - '@babel/types': 7.29.7 - '@jridgewell/remapping': 2.3.5 - convert-source-map: 2.0.0 - debug: 4.4.3 - gensync: 1.0.0-beta.2 - json5: 2.2.3 - semver: 6.3.1 + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-rest-pipeline': 1.25.0 + '@azure/core-tracing': 1.4.0 + '@typespec/ts-http-runtime': 0.3.8 + tslib: 2.8.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.29.7': + '@azure/abort-controller@2.2.0': dependencies: - '@babel/parser': 7.29.7 - '@babel/types': 7.29.7 - '@jridgewell/gen-mapping': 0.3.13 - '@jridgewell/trace-mapping': 0.3.31 - jsesc: 3.1.0 + tslib: 2.8.1 - '@babel/helper-annotate-as-pure@7.29.7': + '@azure/core-auth@1.11.0': dependencies: - '@babel/types': 7.29.7 + '@azure/abort-controller': 2.2.0 + '@azure/core-util': 1.14.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color - '@babel/helper-compilation-targets@7.29.7': + '@azure/core-client@1.11.0': dependencies: - '@babel/compat-data': 7.29.7 - '@babel/helper-validator-option': 7.29.7 - browserslist: 4.28.2 - lru-cache: 5.1.1 - semver: 6.3.1 + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-rest-pipeline': 1.25.0 + '@azure/core-tracing': 1.4.0 + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color - '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)': + '@azure/core-process@1.0.0': {} + + '@azure/core-rest-pipeline@1.25.0': dependencies: - '@babel/core': 7.29.7 - '@babel/helper-annotate-as-pure': 7.29.7 + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-tracing': 1.4.0 + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + '@typespec/ts-http-runtime': 0.3.8 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/core-tracing@1.4.0': + dependencies: + tslib: 2.8.1 + + '@azure/core-util@1.14.0': + dependencies: + '@azure/abort-controller': 2.2.0 + '@typespec/ts-http-runtime': 0.3.8 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/identity@4.13.2': + dependencies: + '@azure/abort-controller': 2.2.0 + '@azure/core-auth': 1.11.0 + '@azure/core-client': 1.11.0 + '@azure/core-process': 1.0.0 + '@azure/core-rest-pipeline': 1.25.0 + '@azure/core-tracing': 1.4.0 + '@azure/core-util': 1.14.0 + '@azure/logger': 1.4.0 + '@azure/msal-browser': 5.19.0 + '@azure/msal-node': 5.6.0 + open: 10.2.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/logger@1.4.0': + dependencies: + '@typespec/ts-http-runtime': 0.3.8 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/monitor-opentelemetry-exporter@1.0.0-beta.44': + dependencies: + '@azure-rest/core-client': 2.8.0 + '@azure/core-auth': 1.11.0 + '@azure/core-client': 1.11.0 + '@azure/core-rest-pipeline': 1.25.0 + '@azure/core-util': 1.14.0 + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.220.0 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.220.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + + '@azure/msal-browser@5.19.0': + dependencies: + '@azure/msal-common': 16.13.0 + + '@azure/msal-common@16.13.0': {} + + '@azure/msal-node@5.6.0': + dependencies: + '@azure/msal-common': 16.13.0 + jsonwebtoken: 9.0.3 + + '@babel/code-frame@7.29.0': + dependencies: + '@babel/helper-validator-identifier': 7.28.5 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/code-frame@7.29.7': + dependencies: + '@babel/helper-validator-identifier': 7.29.7 + js-tokens: 4.0.0 + picocolors: 1.1.1 + + '@babel/compat-data@7.29.7': {} + + '@babel/core@7.29.7': + dependencies: + '@babel/code-frame': 7.29.7 + '@babel/generator': 7.29.7 + '@babel/helper-compilation-targets': 7.29.7 + '@babel/helper-module-transforms': 7.29.7(@babel/core@7.29.7) + '@babel/helpers': 7.29.7 + '@babel/parser': 7.29.7 + '@babel/template': 7.29.7 + '@babel/traverse': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/remapping': 2.3.5 + convert-source-map: 2.0.0 + debug: 4.4.3 + gensync: 1.0.0-beta.2 + json5: 2.2.3 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + '@babel/generator@7.29.7': + dependencies: + '@babel/parser': 7.29.7 + '@babel/types': 7.29.7 + '@jridgewell/gen-mapping': 0.3.13 + '@jridgewell/trace-mapping': 0.3.31 + jsesc: 3.1.0 + + '@babel/helper-annotate-as-pure@7.29.7': + dependencies: + '@babel/types': 7.29.7 + + '@babel/helper-compilation-targets@7.29.7': + dependencies: + '@babel/compat-data': 7.29.7 + '@babel/helper-validator-option': 7.29.7 + browserslist: 4.28.2 + lru-cache: 5.1.1 + semver: 6.3.1 + + '@babel/helper-create-class-features-plugin@7.29.7(@babel/core@7.29.7)': + dependencies: + '@babel/core': 7.29.7 + '@babel/helper-annotate-as-pure': 7.29.7 '@babel/helper-member-expression-to-functions': 7.29.7 '@babel/helper-optimise-call-expression': 7.29.7 '@babel/helper-replace-supers': 7.29.7(@babel/core@7.29.7) @@ -9219,6 +10782,10 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/runtime-corejs3@7.29.7': + dependencies: + core-js-pure: 3.50.0 + '@babel/runtime@7.29.7': {} '@babel/template@7.29.7': @@ -10684,6 +12251,26 @@ snapshots: - utf-8-validate - webpack-cli + '@effect/opentelemetry@0.63.0(@effect/platform@0.96.3(effect@3.22.1))(@opentelemetry/api@1.9.1)(@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-logs@0.219.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-metrics@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-node@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-web@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.43.0)(effect@3.22.1)': + dependencies: + '@effect/platform': 0.96.3(effect@3.22.1) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.219.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-node': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-web': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + effect: 3.22.1 + + '@effect/platform@0.96.3(effect@3.22.1)': + dependencies: + effect: 3.22.1 + find-my-way-ts: 0.1.6 + msgpackr: 1.12.1 + multipasta: 0.2.8 + '@emnapi/core@1.10.0': dependencies: '@emnapi/wasi-threads': 1.2.1 @@ -10748,6 +12335,84 @@ snapshots: tslib: 2.8.1 optional: true + '@esbuild/aix-ppc64@0.28.2': + optional: true + + '@esbuild/android-arm64@0.28.2': + optional: true + + '@esbuild/android-arm@0.28.2': + optional: true + + '@esbuild/android-x64@0.28.2': + optional: true + + '@esbuild/darwin-arm64@0.28.2': + optional: true + + '@esbuild/darwin-x64@0.28.2': + optional: true + + '@esbuild/freebsd-arm64@0.28.2': + optional: true + + '@esbuild/freebsd-x64@0.28.2': + optional: true + + '@esbuild/linux-arm64@0.28.2': + optional: true + + '@esbuild/linux-arm@0.28.2': + optional: true + + '@esbuild/linux-ia32@0.28.2': + optional: true + + '@esbuild/linux-loong64@0.28.2': + optional: true + + '@esbuild/linux-mips64el@0.28.2': + optional: true + + '@esbuild/linux-ppc64@0.28.2': + optional: true + + '@esbuild/linux-riscv64@0.28.2': + optional: true + + '@esbuild/linux-s390x@0.28.2': + optional: true + + '@esbuild/linux-x64@0.28.2': + optional: true + + '@esbuild/netbsd-arm64@0.28.2': + optional: true + + '@esbuild/netbsd-x64@0.28.2': + optional: true + + '@esbuild/openbsd-arm64@0.28.2': + optional: true + + '@esbuild/openbsd-x64@0.28.2': + optional: true + + '@esbuild/openharmony-arm64@0.28.2': + optional: true + + '@esbuild/sunos-x64@0.28.2': + optional: true + + '@esbuild/win32-arm64@0.28.2': + optional: true + + '@esbuild/win32-ia32@0.28.2': + optional: true + + '@esbuild/win32-x64@0.28.2': + optional: true + '@eslint-community/eslint-utils@4.9.1(eslint@10.8.0(jiti@1.21.7))': dependencies: eslint: 10.8.0(jiti@1.21.7) @@ -10806,6 +12471,13 @@ snapshots: '@humanwhocodes/retry@0.4.3': {} + '@inquirer/external-editor@1.0.3(@types/node@22.20.1)': + dependencies: + chardet: 2.2.0 + iconv-lite: 0.7.3 + optionalDependencies: + '@types/node': 22.20.1 + '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -11067,6 +12739,18 @@ snapshots: undici: 8.9.0 xml2js: 0.6.2 + '@jsforce/jsforce-node@3.10.22': + dependencies: + '@sindresorhus/is': 4.6.0 + base64url: 3.0.1 + csv-parse: 5.6.0 + csv-stringify: 6.8.0 + faye: 1.4.1 + form-data: 4.0.6 + multistream: 3.1.0 + undici: 8.9.0 + xml2js: 0.6.2 + '@jsonjoy.com/base64@1.1.2(tslib@2.8.1)': dependencies: tslib: 2.8.1 @@ -11156,7 +12840,7 @@ snapshots: '@jsonjoy.com/json-pointer': 1.0.2(tslib@2.8.1) '@jsonjoy.com/util': 1.9.0(tslib@2.8.1) hyperdyperid: 1.2.0 - thingies: 2.5.0(tslib@2.8.1) + thingies: 2.6.1(tslib@2.8.1) tree-dump: 1.1.0(tslib@2.8.1) tslib: 2.8.1 @@ -11195,6 +12879,20 @@ snapshots: '@jsonjoy.com/codegen': 17.67.0(tslib@2.8.1) tslib: 2.8.1 + '@koa/cors@5.0.0': + dependencies: + vary: 1.1.2 + + '@koa/router@15.7.0(koa@3.2.1)': + dependencies: + debug: 4.4.3 + http-errors: 2.0.1 + koa: 3.2.1 + koa-compose: 4.1.0 + path-to-regexp: 8.4.2 + transitivePeerDependencies: + - supports-color + '@leichtgewicht/ip-codec@2.0.5': {} '@lit-labs/ssr-dom-shim@1.6.0': {} @@ -11268,6 +12966,24 @@ snapshots: '@module-federation/runtime': 0.22.0 '@module-federation/sdk': 0.22.0 + '@msgpackr-extract/msgpackr-extract-darwin-arm64@3.0.4': + optional: true + + '@msgpackr-extract/msgpackr-extract-darwin-x64@3.0.4': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm64@3.0.4': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-arm@3.0.4': + optional: true + + '@msgpackr-extract/msgpackr-extract-linux-x64@3.0.4': + optional: true + + '@msgpackr-extract/msgpackr-extract-win32-x64@3.0.4': + optional: true + '@napi-rs/wasm-runtime@0.2.12': dependencies: '@emnapi/core': 1.11.3 @@ -11305,6 +13021,8 @@ snapshots: '@noble/hashes@1.4.0': {} + '@nodable/entities@3.0.0': {} + '@node-rs/jieba-android-arm-eabi@1.10.4': optional: true @@ -11378,6 +13096,143 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.20.1 + '@opentelemetry/api-logs@0.219.0': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/api-logs@0.220.0': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/api@1.9.1': {} + + '@opentelemetry/context-async-hooks@2.8.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + + '@opentelemetry/core@2.10.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/core@2.8.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/core@2.9.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/exporter-trace-otlp-http@0.219.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-exporter-base': 0.219.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.219.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/otlp-exporter-base@0.219.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/otlp-transformer': 0.219.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/otlp-transformer@0.219.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.219.0 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.219.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/resources@2.8.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/resources@2.9.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/sdk-logs@0.219.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.219.0 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/sdk-logs@0.220.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/api-logs': 0.220.0 + '@opentelemetry/core': 2.9.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.9.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/sdk-metrics@2.10.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/sdk-metrics@2.8.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.8.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/sdk-trace-base@2.8.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/sdk-trace-node@2.8.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/context-async-hooks': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/sdk-trace-web@2.8.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.8.0(@opentelemetry/api@1.9.1) + + '@opentelemetry/sdk-trace@2.10.0(@opentelemetry/api@1.9.1)': + dependencies: + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/resources': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/semantic-conventions': 1.43.0 + + '@opentelemetry/semantic-conventions@1.43.0': {} + '@oxc-parser/binding-android-arm-eabi@0.139.0': optional: true @@ -11610,6 +13465,14 @@ snapshots: '@pkgr/core@0.3.6': {} + '@playwright/browser-chromium@1.62.1': + dependencies: + playwright-core: 1.62.1 + + '@playwright/test@1.62.1': + dependencies: + playwright: 1.62.1 + '@pnpm/config.env-replace@1.1.0': {} '@pnpm/network.ca-file@1.0.2': @@ -11859,18 +13722,6 @@ snapshots: '@rspack/lite-tapable@1.1.0': {} - '@salesforce/apex-node@9.0.2': - dependencies: - '@salesforce/core': 9.1.0 - '@salesforce/kit': 4.0.0 - '@types/istanbul-reports': 3.0.4 - fast-glob: 3.3.3 - faye: 1.4.1 - istanbul-lib-coverage: 3.2.2 - istanbul-lib-report: 3.0.1 - istanbul-reports: 3.2.0 - json-stream-stringify: 3.1.7 - '@salesforce/core@9.1.0': dependencies: '@jsforce/jsforce-node': 3.10.19 @@ -11893,18 +13744,186 @@ snapshots: ts-retry-promise: 0.8.1 zod: 4.4.3 - '@salesforce/kit@4.0.0': + '@salesforce/core@9.1.4': dependencies: + '@jsforce/jsforce-node': 3.10.22 + '@salesforce/kit': 4.0.0 '@salesforce/ts-types': 3.0.1 - - '@salesforce/ts-types@3.0.1': {} - - '@sideway/address@4.1.5': - dependencies: - '@hapi/hoek': 9.3.0 - - '@sideway/formula@3.0.1': {} - + ajv: 8.20.0 + change-case: 4.1.2 + fast-levenshtein: 3.0.0 + faye: 1.4.1 + form-data: 4.0.6 + js2xmlparser: 4.0.2 + jsonwebtoken: 9.0.3 + jszip: 3.10.1 + memfs: 4.38.1 + pino: 9.14.0 + pino-abstract-transport: 1.2.0 + pino-pretty: 11.3.0 + proper-lockfile: 4.1.2 + semver: 7.8.5 + ts-retry-promise: 0.8.1 + zod: 4.4.3 + + '@salesforce/kit@4.0.0': + dependencies: + '@salesforce/ts-types': 3.0.1 + + '@salesforce/playwright-vscode-ext@1.3.11': + dependencies: + '@playwright/test': 1.62.1 + '@vscode/test-electron': 3.1.0 + '@vscode/test-web': 0.0.81 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - kerberos + - react-native-b4a + - supports-color + + '@salesforce/source-deploy-retrieve@13.2.0': + dependencies: + '@salesforce/core': 9.1.4 + '@salesforce/kit': 4.0.0 + '@salesforce/ts-types': 3.0.1 + '@salesforce/types': 1.8.0 + fast-levenshtein: 3.0.0 + fast-xml-parser: 5.11.0 + got: 11.8.6 + graceful-fs: 4.2.11 + ignore: 5.3.2 + jszip: 3.10.1 + mime: 2.6.0 + minimatch: 9.0.9 + proxy-agent: 6.5.0 + yaml: 2.9.0 + transitivePeerDependencies: + - supports-color + + '@salesforce/source-tracking@8.1.0': + dependencies: + '@salesforce/core': 9.1.4 + '@salesforce/kit': 4.0.0 + '@salesforce/source-deploy-retrieve': 13.2.0 + '@salesforce/ts-types': 3.0.1 + fast-xml-parser: 5.11.0 + graceful-fs: 4.2.11 + isomorphic-git: 1.41.7 + ts-retry-promise: 0.8.1 + transitivePeerDependencies: + - supports-color + + '@salesforce/ts-types@3.0.1': {} + + '@salesforce/types@1.8.0': {} + + '@salesforce/vscode-services@67.13.3(@effect/platform@0.96.3(effect@3.22.1))(@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.43.0)(@types/node@22.20.1)': + dependencies: + '@azure/monitor-opentelemetry-exporter': 1.0.0-beta.44 + '@effect/opentelemetry': 0.63.0(@effect/platform@0.96.3(effect@3.22.1))(@opentelemetry/api@1.9.1)(@opentelemetry/resources@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-logs@0.219.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-metrics@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-base@2.10.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-node@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/sdk-trace-web@2.8.0(@opentelemetry/api@1.9.1))(@opentelemetry/semantic-conventions@1.43.0)(effect@3.22.1) + '@opentelemetry/api': 1.9.1 + '@opentelemetry/core': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/exporter-trace-otlp-http': 0.219.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-logs': 0.219.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-metrics': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-base': 2.10.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-node': 2.8.0(@opentelemetry/api@1.9.1) + '@opentelemetry/sdk-trace-web': 2.8.0(@opentelemetry/api@1.9.1) + '@salesforce/core': 9.1.0 + '@salesforce/source-deploy-retrieve': 13.2.0 + '@salesforce/source-tracking': 8.1.0 + '@types/vscode': 1.102.0 + effect: 3.22.1 + jsforce: 3.10.22(@types/node@22.20.1) + vscode-uri: 3.1.0 + transitivePeerDependencies: + - '@effect/platform' + - '@opentelemetry/resources' + - '@opentelemetry/semantic-conventions' + - '@types/node' + - supports-color + + '@secretlint/config-creator@10.2.2': + dependencies: + '@secretlint/types': 10.2.2 + + '@secretlint/config-loader@10.2.2': + dependencies: + '@secretlint/profiler': 10.2.2 + '@secretlint/resolver': 10.2.2 + '@secretlint/types': 10.2.2 + ajv: 8.20.0 + debug: 4.4.3 + rc-config-loader: 4.1.4 + transitivePeerDependencies: + - supports-color + + '@secretlint/core@10.2.2': + dependencies: + '@secretlint/profiler': 10.2.2 + '@secretlint/types': 10.2.2 + debug: 4.4.3 + structured-source: 4.0.0 + transitivePeerDependencies: + - supports-color + + '@secretlint/formatter@10.2.2': + dependencies: + '@secretlint/resolver': 10.2.2 + '@secretlint/types': 10.2.2 + '@textlint/linter-formatter': 15.8.0 + '@textlint/module-interop': 15.8.0 + '@textlint/types': 15.8.0 + chalk: 5.6.2 + debug: 4.4.3 + pluralize: 8.0.0 + strip-ansi: 7.2.0 + table: 6.9.0 + terminal-link: 4.0.0 + transitivePeerDependencies: + - supports-color + + '@secretlint/node@10.2.2': + dependencies: + '@secretlint/config-loader': 10.2.2 + '@secretlint/core': 10.2.2 + '@secretlint/formatter': 10.2.2 + '@secretlint/profiler': 10.2.2 + '@secretlint/source-creator': 10.2.2 + '@secretlint/types': 10.2.2 + debug: 4.4.3 + p-map: 7.0.6 + transitivePeerDependencies: + - supports-color + + '@secretlint/profiler@10.2.2': {} + + '@secretlint/resolver@10.2.2': {} + + '@secretlint/secretlint-formatter-sarif@10.2.2': + dependencies: + node-sarif-builder: 3.4.0 + + '@secretlint/secretlint-rule-no-dotenv@10.2.2': + dependencies: + '@secretlint/types': 10.2.2 + + '@secretlint/secretlint-rule-preset-recommend@10.2.2': {} + + '@secretlint/source-creator@10.2.2': + dependencies: + '@secretlint/types': 10.2.2 + istextorbinary: 9.5.0 + + '@secretlint/types@10.2.2': {} + + '@sideway/address@4.1.5': + dependencies: + '@hapi/hoek': 9.3.0 + + '@sideway/formula@3.0.1': {} + '@sideway/pinpoint@2.0.0': {} '@sinclair/typebox@0.27.12': {} @@ -11915,6 +13934,8 @@ snapshots: '@sindresorhus/is@5.6.0': {} + '@sindresorhus/merge-streams@2.3.0': {} + '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 @@ -11939,6 +13960,8 @@ snapshots: micromark-util-character: 1.2.0 micromark-util-symbol: 1.1.0 + '@standard-schema/spec@1.1.0': {} + '@svgr/babel-plugin-add-jsx-attribute@8.0.0(@babel/core@7.29.7)': dependencies: '@babel/core': 7.29.7 @@ -12157,10 +14180,44 @@ snapshots: dependencies: '@swc/counter': 0.1.3 + '@szmarczak/http-timer@4.0.6': + dependencies: + defer-to-connect: 2.0.1 + '@szmarczak/http-timer@5.0.1': dependencies: defer-to-connect: 2.0.1 + '@textlint/ast-node-types@15.8.0': {} + + '@textlint/linter-formatter@15.8.0': + dependencies: + '@azu/format-text': 1.0.2 + '@azu/style-format': 1.0.1 + '@textlint/module-interop': 15.8.0 + '@textlint/resolver': 15.8.0 + '@textlint/types': 15.8.0 + debug: 4.4.3 + js-yaml: 4.3.0 + lodash: 4.18.1 + pluralize: 2.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + table: 6.9.0 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + + '@textlint/module-interop@15.8.0': {} + + '@textlint/resolver@15.8.0': {} + + '@textlint/types@15.8.0': + dependencies: + '@textlint/ast-node-types': 15.8.0 + + '@tootallnate/quickjs-emscripten@0.23.0': {} + '@tybys/wasm-util@0.10.3': dependencies: tslib: 2.8.1 @@ -12196,6 +14253,13 @@ snapshots: dependencies: '@types/node': 22.20.1 + '@types/cacheable-request@6.0.3': + dependencies: + '@types/http-cache-semantics': 4.2.0 + '@types/keyv': 3.1.4 + '@types/node': 22.20.1 + '@types/responselike': 1.0.3 + '@types/connect-history-api-fallback@1.5.4': dependencies: '@types/express-serve-static-core': 5.1.2 @@ -12280,6 +14344,10 @@ snapshots: '@types/json-schema@7.0.15': {} + '@types/keyv@3.1.4': + dependencies: + '@types/node': 22.20.1 + '@types/mdast@4.0.4': dependencies: '@types/unist': 3.0.3 @@ -12298,6 +14366,8 @@ snapshots: dependencies: undici-types: 6.21.0 + '@types/normalize-package-data@2.4.4': {} + '@types/prismjs@1.26.6': {} '@types/qs@6.15.1': {} @@ -12331,6 +14401,12 @@ snapshots: '@types/resolve@1.20.2': {} + '@types/responselike@1.0.3': + dependencies: + '@types/node': 22.20.1 + + '@types/sarif@2.1.7': {} + '@types/sax@1.2.7': dependencies: '@types/node': 22.20.1 @@ -12527,6 +14603,14 @@ snapshots: dependencies: '@typescript/old': typescript@6.0.3 + '@typespec/ts-http-runtime@0.3.8': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + tslib: 2.8.1 + transitivePeerDependencies: + - supports-color + '@ungap/structured-clone@1.3.0': {} '@ungap/structured-clone@1.3.1': {} @@ -12611,6 +14695,115 @@ snapshots: '@vscode/codicons@0.0.45': {} + '@vscode/test-electron@3.1.0': + dependencies: + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + jszip: 3.10.1 + ora: 8.2.0 + semver: 7.8.5 + transitivePeerDependencies: + - supports-color + + '@vscode/test-web@0.0.81': + dependencies: + '@koa/cors': 5.0.0 + '@koa/router': 15.7.0(koa@3.2.1) + '@playwright/browser-chromium': 1.62.1 + gunzip-maybe: 1.4.2 + http-proxy-agent: 9.1.0 + https-proxy-agent: 9.1.0 + koa: 3.2.1 + koa-morgan: 1.0.1 + koa-mount: 4.2.0 + koa-static: 5.0.0 + minimist: 1.2.8 + playwright: 1.62.1 + tar-fs: 3.1.3 + tinyglobby: 0.2.17 + vscode-uri: 3.1.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - kerberos + - react-native-b4a + - supports-color + + '@vscode/vsce-sign-alpine-arm64@2.0.6': + optional: true + + '@vscode/vsce-sign-alpine-x64@2.0.6': + optional: true + + '@vscode/vsce-sign-darwin-arm64@2.0.6': + optional: true + + '@vscode/vsce-sign-darwin-x64@2.0.6': + optional: true + + '@vscode/vsce-sign-linux-arm64@2.0.6': + optional: true + + '@vscode/vsce-sign-linux-arm@2.0.6': + optional: true + + '@vscode/vsce-sign-linux-x64@2.0.6': + optional: true + + '@vscode/vsce-sign-win32-arm64@2.0.6': + optional: true + + '@vscode/vsce-sign-win32-x64@2.0.6': + optional: true + + '@vscode/vsce-sign@2.1.0': + optionalDependencies: + '@vscode/vsce-sign-alpine-arm64': 2.0.6 + '@vscode/vsce-sign-alpine-x64': 2.0.6 + '@vscode/vsce-sign-darwin-arm64': 2.0.6 + '@vscode/vsce-sign-darwin-x64': 2.0.6 + '@vscode/vsce-sign-linux-arm': 2.0.6 + '@vscode/vsce-sign-linux-arm64': 2.0.6 + '@vscode/vsce-sign-linux-x64': 2.0.6 + '@vscode/vsce-sign-win32-arm64': 2.0.6 + '@vscode/vsce-sign-win32-x64': 2.0.6 + + '@vscode/vsce@3.9.2': + dependencies: + '@azure/identity': 4.13.2 + '@secretlint/node': 10.2.2 + '@secretlint/secretlint-formatter-sarif': 10.2.2 + '@secretlint/secretlint-rule-no-dotenv': 10.2.2 + '@secretlint/secretlint-rule-preset-recommend': 10.2.2 + '@vscode/vsce-sign': 2.1.0 + azure-devops-node-api: 12.5.0 + chalk: 4.1.2 + cheerio: 1.2.0 + cockatiel: 3.2.1 + commander: 12.1.0 + form-data: 4.0.6 + glob: 13.0.6 + hosted-git-info: 4.1.0 + jsonc-parser: 3.3.1 + leven: 3.1.0 + markdown-it: 14.3.0 + mime: 1.6.0 + minimatch: 10.2.5 + parse-semver: 1.1.1 + read: 1.0.7 + secretlint: 10.2.2 + semver: 7.8.5 + tmp: 0.2.7 + typed-rest-client: 1.8.11 + url-join: 4.0.1 + xml2js: 0.5.0 + yauzl: 3.4.0 + yazl: 2.5.1 + optionalDependencies: + keytar: 7.9.0 + transitivePeerDependencies: + - supports-color + '@webassemblyjs/ast@1.14.1': dependencies: '@webassemblyjs/helper-numbers': 1.13.2 @@ -12729,6 +14922,8 @@ snapshots: agent-base@7.1.4: {} + agent-base@9.0.0: {} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 @@ -12798,6 +14993,10 @@ snapshots: dependencies: type-fest: 0.21.3 + ansi-escapes@7.3.0: + dependencies: + environment: 1.1.0 + ansi-html-community@0.0.8: {} ansi-regex@5.0.1: {} @@ -12821,6 +15020,8 @@ snapshots: normalize-path: 3.0.0 picomatch: 4.0.5 + anynum@1.0.1: {} + arg@5.0.2: {} argparse@1.0.10: @@ -12839,8 +15040,16 @@ snapshots: pvutils: 1.1.5 tslib: 2.8.1 + ast-types@0.13.4: + dependencies: + tslib: 2.8.1 + + astral-regex@2.0.0: {} + astring@1.9.0: {} + async-lock@1.4.1: {} + asynckit@0.4.0: {} atomic-sleep@1.0.0: {} @@ -12854,6 +15063,17 @@ snapshots: postcss: 8.5.25 postcss-value-parser: 4.2.0 + available-typed-arrays@1.0.7: + dependencies: + possible-typed-array-names: 1.1.0 + + azure-devops-node-api@12.5.0: + dependencies: + tunnel: 0.0.6 + typed-rest-client: 1.8.11 + + b4a@1.8.1: {} + babel-jest@30.4.1(@babel/core@7.29.7): dependencies: '@babel/core': 7.29.7 @@ -12955,6 +15175,35 @@ snapshots: balanced-match@4.0.4: {} + bare-events@2.9.1: {} + + bare-fs@4.8.0: + dependencies: + bare-events: 2.9.1 + bare-path: 3.1.1 + bare-stream: 2.13.3(bare-events@2.9.1) + bare-url: 2.5.2 + fast-fifo: 1.3.2 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + bare-path@3.1.1: {} + + bare-stream@2.13.3(bare-events@2.9.1): + dependencies: + b4a: 1.8.1 + streamx: 2.28.0 + teex: 1.0.1 + optionalDependencies: + bare-events: 2.9.1 + transitivePeerDependencies: + - react-native-b4a + + bare-url@2.5.2: + dependencies: + bare-path: 3.1.1 + base64-js@1.5.1: {} base64url@3.0.1: {} @@ -12963,12 +15212,28 @@ snapshots: baseline-browser-mapping@2.11.7: {} + basic-auth@2.0.1: + dependencies: + safe-buffer: 5.1.2 + + basic-ftp@5.3.1: {} + batch@0.6.1: {} big.js@5.2.2: {} binary-extensions@2.3.0: {} + binaryextensions@6.11.0: + dependencies: + editions: 6.22.0 + + bl@4.1.0: + dependencies: + buffer: 5.7.1 + inherits: 2.0.4 + readable-stream: 3.6.2 + body-parser@2.3.0: dependencies: bytes: 3.1.2 @@ -12990,6 +15255,8 @@ snapshots: boolbase@1.0.0: {} + boundary@2.0.0: {} + boxen@6.2.1: dependencies: ansi-align: 3.0.1 @@ -13024,6 +15291,10 @@ snapshots: dependencies: fill-range: 7.1.1 + browserify-zlib@0.1.4: + dependencies: + pako: 0.2.9 + browserslist@4.28.2: dependencies: baseline-browser-mapping: 2.10.31 @@ -13044,10 +15315,17 @@ snapshots: dependencies: node-int64: 0.4.0 + buffer-crc32@0.2.13: {} + buffer-equal-constant-time@1.0.1: {} buffer-from@1.1.2: {} + buffer@5.7.1: + dependencies: + base64-js: 1.5.1 + ieee754: 1.2.1 + buffer@6.0.3: dependencies: base64-js: 1.5.1 @@ -13063,6 +15341,8 @@ snapshots: bytestreamjs@2.0.1: {} + cacheable-lookup@5.0.4: {} + cacheable-lookup@7.0.0: {} cacheable-request@10.2.14: @@ -13075,6 +15355,16 @@ snapshots: normalize-url: 8.1.1 responselike: 3.0.0 + cacheable-request@7.0.4: + dependencies: + clone-response: 1.0.3 + get-stream: 5.2.0 + http-cache-semantics: 4.2.0 + keyv: 4.5.4 + lowercase-keys: 2.0.0 + normalize-url: 6.1.0 + responselike: 2.0.1 + call-bind-apply-helpers@1.0.2: dependencies: es-errors: 1.3.0 @@ -13156,6 +15446,8 @@ snapshots: character-reference-invalid@2.0.1: {} + chardet@2.2.0: {} + cheerio-select@2.1.0: dependencies: boolbase: 1.0.0 @@ -13205,6 +15497,9 @@ snapshots: dependencies: readdirp: 5.0.0 + chownr@1.1.4: + optional: true + chrome-trace-event@1.0.4: {} ci-info@3.9.0: {} @@ -13217,16 +15512,30 @@ snapshots: dependencies: source-map: 0.6.1 + clean-git-ref@2.0.1: {} + clean-stack@2.2.0: {} cli-boxes@3.0.0: {} + cli-cursor@3.1.0: + dependencies: + restore-cursor: 3.1.0 + + cli-cursor@5.0.0: + dependencies: + restore-cursor: 5.1.0 + + cli-spinners@2.9.2: {} + cli-table3@0.6.5: dependencies: string-width: 4.2.3 optionalDependencies: '@colors/colors': 1.5.0 + cli-width@3.0.0: {} + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -13245,10 +15554,18 @@ snapshots: kind-of: 6.0.3 shallow-clone: 3.0.1 + clone-response@1.0.3: + dependencies: + mimic-response: 1.0.1 + + clone@1.0.4: {} + clsx@2.1.1: {} co@4.6.0: {} + cockatiel@3.2.1: {} + collapse-white-space@2.1.0: {} collect-v8-coverage@1.0.3: {} @@ -13277,8 +15594,12 @@ snapshots: commander@10.0.1: {} + commander@12.1.0: {} + commander@2.20.3: {} + commander@4.1.1: {} + commander@5.1.0: {} commander@7.2.0: {} @@ -13339,6 +15660,8 @@ snapshots: content-disposition@0.5.2: {} + content-disposition@1.0.1: {} + content-disposition@1.1.0: {} content-type@1.0.5: {} @@ -13351,6 +15674,11 @@ snapshots: cookie@0.7.2: {} + cookies@0.9.1: + dependencies: + depd: 2.0.0 + keygrip: 1.1.0 + copy-text-to-clipboard@3.2.2: {} copy-webpack-plugin@11.0.0(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(postcss@8.5.25)): @@ -13367,6 +15695,8 @@ snapshots: dependencies: browserslist: 4.28.7 + core-js-pure@3.50.0: {} + core-js@3.49.0: {} core-util-is@1.0.3: {} @@ -13380,6 +15710,8 @@ snapshots: optionalDependencies: typescript: '@typescript/typescript6@6.0.2' + crc-32@1.2.2: {} + cross-spawn@7.0.6: dependencies: path-key: 3.1.1 @@ -13542,6 +15874,8 @@ snapshots: csv-stringify@6.8.0: {} + data-uri-to-buffer@6.0.2: {} + data-urls@5.0.0: dependencies: whatwg-mimetype: 4.0.0 @@ -13555,6 +15889,10 @@ snapshots: dependencies: ms: 2.0.0 + debug@3.2.7: + dependencies: + ms: 2.1.3 + debug@4.4.3: dependencies: ms: 2.1.3 @@ -13571,6 +15909,8 @@ snapshots: dedent@1.7.2: {} + deep-equal@1.0.1: {} + deep-extend@0.6.0: {} deep-is@0.1.4: {} @@ -13584,6 +15924,10 @@ snapshots: bundle-name: 4.1.0 default-browser-id: 5.0.1 + defaults@1.0.4: + dependencies: + clone: 1.0.4 + defer-to-connect@2.0.1: {} define-data-property@1.1.4: @@ -13602,14 +15946,24 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + delayed-stream@1.0.0: {} + delegates@1.0.0: {} + depd@1.1.2: {} depd@2.0.0: {} dequal@2.0.3: {} + destroy@1.2.0: {} + detect-libc@2.1.2: {} detect-newline@3.1.0: {} @@ -13622,6 +15976,8 @@ snapshots: dependencies: dequal: 2.0.3 + diff3@0.0.3: {} + dir-glob@3.0.1: dependencies: path-type: 4.0.0 @@ -13685,6 +16041,13 @@ snapshots: duplexer@0.1.2: {} + duplexify@3.7.1: + dependencies: + end-of-stream: 1.4.5 + inherits: 2.0.4 + readable-stream: 2.3.8 + stream-shift: 1.0.3 + earcut@3.0.2: {} eastasianwidth@0.2.0: {} @@ -13693,8 +16056,17 @@ snapshots: dependencies: safe-buffer: 5.2.1 + editions@6.22.0: + dependencies: + version-range: 4.15.0 + ee-first@1.1.1: {} + effect@3.22.1: + dependencies: + '@standard-schema/spec': 1.1.0 + fast-check: 3.23.2 + electron-to-chromium@1.5.360: {} electron-to-chromium@1.5.398: {} @@ -13737,6 +16109,8 @@ snapshots: entities@7.0.1: {} + environment@1.1.0: {} + error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -13747,10 +16121,6 @@ snapshots: es-module-lexer@2.3.1: {} - es-object-atoms@1.1.1: - dependencies: - es-errors: 1.3.0 - es-object-atoms@1.1.2: dependencies: es-errors: 1.3.0 @@ -13776,18 +16146,57 @@ snapshots: esast-util-from-estree: 2.0.0 vfile-message: 4.0.3 + esbuild@0.28.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.28.2 + '@esbuild/android-arm': 0.28.2 + '@esbuild/android-arm64': 0.28.2 + '@esbuild/android-x64': 0.28.2 + '@esbuild/darwin-arm64': 0.28.2 + '@esbuild/darwin-x64': 0.28.2 + '@esbuild/freebsd-arm64': 0.28.2 + '@esbuild/freebsd-x64': 0.28.2 + '@esbuild/linux-arm': 0.28.2 + '@esbuild/linux-arm64': 0.28.2 + '@esbuild/linux-ia32': 0.28.2 + '@esbuild/linux-loong64': 0.28.2 + '@esbuild/linux-mips64el': 0.28.2 + '@esbuild/linux-ppc64': 0.28.2 + '@esbuild/linux-riscv64': 0.28.2 + '@esbuild/linux-s390x': 0.28.2 + '@esbuild/linux-x64': 0.28.2 + '@esbuild/netbsd-arm64': 0.28.2 + '@esbuild/netbsd-x64': 0.28.2 + '@esbuild/openbsd-arm64': 0.28.2 + '@esbuild/openbsd-x64': 0.28.2 + '@esbuild/openharmony-arm64': 0.28.2 + '@esbuild/sunos-x64': 0.28.2 + '@esbuild/win32-arm64': 0.28.2 + '@esbuild/win32-ia32': 0.28.2 + '@esbuild/win32-x64': 0.28.2 + escalade@3.2.0: {} escape-goat@4.0.0: {} escape-html@1.0.3: {} + escape-string-regexp@1.0.5: {} + escape-string-regexp@2.0.0: {} escape-string-regexp@4.0.0: {} escape-string-regexp@5.0.0: {} + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + eslint-config-prettier@10.1.8(eslint@10.8.0(jiti@1.21.7)): dependencies: eslint: 10.8.0(jiti@1.21.7) @@ -13921,6 +16330,12 @@ snapshots: eventemitter3@5.0.4: {} + events-universal@1.0.1: + dependencies: + bare-events: 2.9.1 + transitivePeerDependencies: + - bare-abort-controller + events@3.3.0: {} execa@5.1.1: @@ -13937,6 +16352,9 @@ snapshots: exit-x@0.2.2: {} + expand-template@2.0.3: + optional: true + expect@30.4.1: dependencies: '@jest/expect-utils': 30.4.1 @@ -13985,10 +16403,16 @@ snapshots: extend@3.0.2: {} + fast-check@3.23.2: + dependencies: + pure-rand: 6.1.0 + fast-copy@3.0.2: {} fast-deep-equal@3.1.3: {} + fast-fifo@1.3.2: {} + fast-glob@3.3.3: dependencies: '@nodelib/fs.stat': 2.0.5 @@ -14011,6 +16435,20 @@ snapshots: fast-uri@4.0.0: {} + fast-xml-builder@1.3.1: + dependencies: + path-expression-matcher: 1.6.2 + xml-naming: 0.3.0 + + fast-xml-parser@5.11.0: + dependencies: + '@nodable/entities': 3.0.0 + fast-xml-builder: 1.3.1 + is-unsafe: 2.0.2 + path-expression-matcher: 1.6.2 + strnum: 2.4.2 + xml-naming: 0.3.0 + fastest-levenshtein@1.0.16: {} fastq@1.20.1: @@ -14050,6 +16488,10 @@ snapshots: dependencies: xml-js: 1.6.11 + figures@3.2.0: + dependencies: + escape-string-regexp: 1.0.5 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -14080,6 +16522,8 @@ snapshots: common-path-prefix: 3.0.0 pkg-dir: 7.0.0 + find-my-way-ts@0.1.6: {} + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -14104,6 +16548,10 @@ snapshots: flatted@3.4.2: {} + for-each@0.3.5: + dependencies: + is-callable: 1.2.7 + foreground-child@3.3.1: dependencies: cross-spawn: 7.0.6 @@ -14125,8 +16573,13 @@ snapshots: fraction.js@5.3.4: {} + fresh@0.5.2: {} + fresh@2.0.0: {} + fs-constants@1.0.0: + optional: true + fs-extra@10.1.0: dependencies: graceful-fs: 4.2.11 @@ -14147,6 +16600,9 @@ snapshots: fs.realpath@1.0.0: {} + fsevents@2.3.2: + optional: true + fsevents@2.3.3: optional: true @@ -14163,7 +16619,7 @@ snapshots: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 es-errors: 1.3.0 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 function-bind: 1.1.2 get-proto: 1.0.1 gopd: 1.2.0 @@ -14178,7 +16634,11 @@ snapshots: get-proto@1.0.1: dependencies: dunder-proto: 1.0.1 - es-object-atoms: 1.1.1 + es-object-atoms: 1.1.2 + + get-stream@5.2.0: + dependencies: + pump: 3.0.4 get-stream@6.0.1: {} @@ -14186,10 +16646,21 @@ snapshots: dependencies: resolve-pkg-maps: 1.0.0 + get-uri@6.0.5: + dependencies: + basic-ftp: 5.3.1 + data-uri-to-buffer: 6.0.2 + debug: 4.4.3 + transitivePeerDependencies: + - supports-color + gifuct-js@2.1.2: dependencies: js-binary-schema-parser: 2.0.3 + github-from-package@0.0.0: + optional: true + github-slugger@1.5.0: {} glob-parent@5.1.2: @@ -14213,6 +16684,12 @@ snapshots: package-json-from-dist: 1.0.1 path-scurry: 1.11.1 + glob@13.0.6: + dependencies: + minimatch: 10.2.5 + minipass: 7.1.3 + path-scurry: 2.0.2 + glob@7.2.3: dependencies: fs.realpath: 1.0.0 @@ -14254,8 +16731,31 @@ snapshots: merge2: 1.4.1 slash: 4.0.0 + globby@14.1.0: + dependencies: + '@sindresorhus/merge-streams': 2.3.0 + fast-glob: 3.3.3 + ignore: 7.0.5 + path-type: 6.0.0 + slash: 5.1.0 + unicorn-magic: 0.3.0 + gopd@1.2.0: {} + got@11.8.6: + dependencies: + '@sindresorhus/is': 4.6.0 + '@szmarczak/http-timer': 4.0.6 + '@types/cacheable-request': 6.0.3 + '@types/responselike': 1.0.3 + cacheable-lookup: 5.0.4 + cacheable-request: 7.0.4 + decompress-response: 6.0.0 + http2-wrapper: 1.0.3 + lowercase-keys: 2.0.0 + p-cancelable: 2.1.1 + responselike: 2.0.1 + got@12.6.1: dependencies: '@sindresorhus/is': 5.6.0 @@ -14274,6 +16774,15 @@ snapshots: graceful-fs@4.2.11: {} + gunzip-maybe@1.4.2: + dependencies: + browserify-zlib: 0.1.4 + is-deflate: 1.0.0 + is-gzip: 1.0.0 + peek-stream: 1.1.3 + pumpify: 1.5.1 + through2: 2.0.5 + gzip-size@6.0.0: dependencies: duplexer: 0.1.2 @@ -14412,6 +16921,14 @@ snapshots: dependencies: react-is: 16.13.1 + hosted-git-info@4.1.0: + dependencies: + lru-cache: 6.0.0 + + hosted-git-info@7.0.2: + dependencies: + lru-cache: 10.4.3 + html-encoding-sniffer@4.0.0: dependencies: whatwg-encoding: 3.1.1 @@ -14474,8 +16991,20 @@ snapshots: domutils: 3.2.2 entities: 4.5.0 + http-assert@1.5.0: + dependencies: + deep-equal: 1.0.1 + http-errors: 1.8.1 + http-cache-semantics@4.2.0: {} + http-errors@1.6.3: + dependencies: + depd: 1.1.2 + inherits: 2.0.3 + setprototypeof: 1.1.0 + statuses: 1.5.0 + http-errors@1.8.1: dependencies: depd: 1.1.2 @@ -14501,6 +17030,15 @@ snapshots: transitivePeerDependencies: - supports-color + http-proxy-agent@9.1.0: + dependencies: + agent-base: 9.0.0 + debug: 4.4.3 + proxy-agent-negotiate: 1.1.0 + transitivePeerDependencies: + - kerberos + - supports-color + http-proxy-middleware@4.2.0: dependencies: debug: 4.4.3 @@ -14511,6 +17049,11 @@ snapshots: transitivePeerDependencies: - supports-color + http2-wrapper@1.0.3: + dependencies: + quick-lru: 5.1.1 + resolve-alpn: 1.2.1 + http2-wrapper@2.2.1: dependencies: quick-lru: 5.1.1 @@ -14523,6 +17066,15 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@9.1.0: + dependencies: + agent-base: 9.0.0 + debug: 4.4.3 + proxy-agent-negotiate: 1.1.0 + transitivePeerDependencies: + - kerberos + - supports-color + httpxy@0.5.5: {} human-signals@2.1.0: {} @@ -14573,6 +17125,8 @@ snapshots: indent-string@4.0.0: {} + index-to-position@1.2.0: {} + infima@0.2.0-alpha.45: {} inflight@1.0.6: @@ -14580,6 +17134,8 @@ snapshots: once: 1.4.0 wrappy: 1.0.2 + inherits@2.0.3: {} + inherits@2.0.4: {} ini@1.3.8: {} @@ -14588,10 +17144,32 @@ snapshots: inline-style-parser@0.2.7: {} + inquirer@8.2.7(@types/node@22.20.1): + dependencies: + '@inquirer/external-editor': 1.0.3(@types/node@22.20.1) + ansi-escapes: 4.3.2 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-width: 3.0.0 + figures: 3.2.0 + lodash: 4.18.1 + mute-stream: 0.0.8 + ora: 5.4.1 + run-async: 2.4.1 + rxjs: 7.8.2 + string-width: 4.2.3 + strip-ansi: 6.0.1 + through: 2.3.8 + wrap-ansi: 6.2.0 + transitivePeerDependencies: + - '@types/node' + invariant@2.2.4: dependencies: loose-envify: 1.4.0 + ip-address@10.5.0: {} + ipaddr.js@1.9.1: {} ipaddr.js@2.4.0: {} @@ -14609,6 +17187,8 @@ snapshots: dependencies: binary-extensions: 2.3.0 + is-callable@1.2.7: {} + is-ci@3.0.1: dependencies: ci-info: 3.9.0 @@ -14619,6 +17199,8 @@ snapshots: is-decimal@2.0.1: {} + is-deflate@1.0.0: {} + is-docker@2.2.1: {} is-docker@3.0.0: {} @@ -14635,6 +17217,8 @@ snapshots: dependencies: is-extglob: 2.1.1 + is-gzip@1.0.0: {} + is-hexadecimal@2.0.1: {} is-in-ssh@1.0.0: {} @@ -14648,6 +17232,10 @@ snapshots: global-dirs: 3.0.1 is-path-inside: 3.0.3 + is-interactive@1.0.0: {} + + is-interactive@2.0.0: {} + is-module@1.0.0: {} is-network-error@1.3.2: {} @@ -14682,8 +17270,20 @@ snapshots: is-stream@2.0.1: {} + is-typed-array@1.1.15: + dependencies: + which-typed-array: 1.1.22 + is-typedarray@1.0.0: {} + is-unicode-supported@0.1.0: {} + + is-unicode-supported@1.3.0: {} + + is-unicode-supported@2.1.0: {} + + is-unsafe@2.0.2: {} + is-wsl@2.2.0: dependencies: is-docker: 2.2.1 @@ -14698,12 +17298,28 @@ snapshots: isarray@1.0.0: {} + isarray@2.0.5: {} + isexe@2.0.0: {} ismobilejs@1.1.1: {} isobject@3.0.1: {} + isomorphic-git@1.41.7: + dependencies: + async-lock: 1.4.1 + clean-git-ref: 2.0.1 + crc-32: 1.2.2 + diff3: 0.0.3 + ignore: 5.3.2 + minimisted: 2.0.1 + pako: 1.0.11 + pify: 4.0.1 + readable-stream: 4.7.0 + sha.js: 2.4.12 + simple-get: 4.0.1 + istanbul-lib-coverage@3.2.2: {} istanbul-lib-instrument@6.0.3: @@ -14735,6 +17351,12 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 + istextorbinary@9.5.0: + dependencies: + binaryextensions: 6.11.0 + editions: 6.22.0 + textextensions: 6.11.0 + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 @@ -15007,7 +17629,7 @@ snapshots: jest-message-util: 30.4.1 jest-util: 30.4.1 pretty-format: 30.4.1 - semver: 7.8.1 + semver: 7.8.5 synckit: 0.11.13 transitivePeerDependencies: - supports-color @@ -15142,6 +17764,26 @@ snapshots: jsesc@3.1.0: {} + jsforce@3.10.22(@types/node@22.20.1): + dependencies: + '@babel/runtime': 7.29.7 + '@babel/runtime-corejs3': 7.29.7 + '@sindresorhus/is': 4.6.0 + base64url: 3.0.1 + commander: 4.1.1 + core-js: 3.49.0 + csv-parse: 5.6.0 + csv-stringify: 6.8.0 + faye: 1.4.1 + form-data: 4.0.6 + inquirer: 8.2.7(@types/node@22.20.1) + multistream: 3.1.0 + open: 7.4.2 + undici: 8.9.0 + xml2js: 0.6.2 + transitivePeerDependencies: + - '@types/node' + json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -15152,8 +17794,6 @@ snapshots: json-stable-stringify-without-jsonify@1.0.1: {} - json-stream-stringify@3.1.7: {} - json5@2.2.3: {} jsonc-parser@3.3.1: {} @@ -15199,6 +17839,16 @@ snapshots: jwa: 2.0.1 safe-buffer: 5.2.1 + keygrip@1.1.0: + dependencies: + tsscmp: 1.0.6 + + keytar@7.9.0: + dependencies: + node-addon-api: 4.3.0 + prebuild-install: 7.1.3 + optional: true + keyv@4.5.4: dependencies: json-buffer: 3.0.1 @@ -15211,6 +17861,57 @@ snapshots: kleur@3.0.3: {} + koa-compose@4.1.0: {} + + koa-morgan@1.0.1: + dependencies: + morgan: 1.11.0 + transitivePeerDependencies: + - supports-color + + koa-mount@4.2.0: + dependencies: + debug: 4.4.3 + koa-compose: 4.1.0 + transitivePeerDependencies: + - supports-color + + koa-send@5.0.1: + dependencies: + debug: 4.4.3 + http-errors: 1.8.1 + resolve-path: 1.4.0 + transitivePeerDependencies: + - supports-color + + koa-static@5.0.0: + dependencies: + debug: 3.2.7 + koa-send: 5.0.1 + transitivePeerDependencies: + - supports-color + + koa@3.2.1: + dependencies: + accepts: 1.3.8 + content-disposition: 1.0.1 + content-type: 1.0.5 + cookies: 0.9.1 + delegates: 1.0.0 + destroy: 1.2.0 + encodeurl: 2.0.0 + escape-html: 1.0.3 + fresh: 0.5.2 + http-assert: 1.5.0 + http-errors: 2.0.1 + koa-compose: 4.1.0 + mime-types: 3.0.2 + on-finished: 2.4.1 + parseurl: 1.3.3 + statuses: 2.0.2 + type-is: 2.1.0 + vary: 1.1.2 + latest-version@7.0.0: dependencies: package-json: 8.1.1 @@ -15284,6 +17985,10 @@ snapshots: lines-and-columns@1.2.4: {} + linkify-it@5.0.2: + dependencies: + uc.micro: 2.1.0 + lint-staged@17.2.0: dependencies: picomatch: 4.0.5 @@ -15344,10 +18049,22 @@ snapshots: lodash.once@4.1.1: {} + lodash.truncate@4.4.2: {} + lodash.uniq@4.5.0: {} lodash@4.18.1: {} + log-symbols@4.1.0: + dependencies: + chalk: 4.1.2 + is-unicode-supported: 0.1.0 + + log-symbols@6.0.0: + dependencies: + chalk: 5.6.2 + is-unicode-supported: 1.3.0 + longest-streak@3.1.0: {} loose-envify@1.4.0: @@ -15358,14 +18075,24 @@ snapshots: dependencies: tslib: 2.8.1 + lowercase-keys@2.0.0: {} + lowercase-keys@3.0.0: {} lru-cache@10.4.3: {} + lru-cache@11.5.2: {} + lru-cache@5.1.1: dependencies: yallist: 3.1.1 + lru-cache@6.0.0: + dependencies: + yallist: 4.0.0 + + lru-cache@7.18.3: {} + lunr-languages@1.20.0: {} lunr@2.3.9: {} @@ -15386,6 +18113,15 @@ snapshots: markdown-extensions@2.0.0: {} + markdown-it@14.3.0: + dependencies: + argparse: 2.0.1 + entities: 4.5.0 + linkify-it: 5.0.2 + mdurl: 2.1.0 + punycode.js: 2.3.1 + uc.micro: 2.1.0 + markdown-table@3.0.4: {} math-intrinsics@1.1.0: {} @@ -15582,6 +18318,8 @@ snapshots: mdn-data@2.0.30: {} + mdurl@2.1.0: {} + media-typer@1.1.1: {} memfs@4.38.1: @@ -15934,8 +18672,16 @@ snapshots: dependencies: mime-db: 1.54.0 + mime@1.6.0: {} + + mime@2.6.0: {} + mimic-fn@2.1.0: {} + mimic-function@5.0.1: {} + + mimic-response@1.0.1: {} + mimic-response@3.1.0: {} mimic-response@4.0.0: {} @@ -15960,6 +18706,10 @@ snapshots: minimist@1.2.8: {} + minimisted@2.0.1: + dependencies: + minimist: 1.2.8 + minimizer-webpack-plugin@5.6.1(@swc/core@1.15.47(@swc/helpers@0.5.23))(@swc/html@1.15.47)(lightningcss@1.33.0)(postcss@8.5.25)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(postcss@8.5.25)): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -16000,24 +18750,60 @@ snapshots: minipass@7.1.3: {} + mkdirp-classic@0.5.3: + optional: true + + morgan@1.11.0: + dependencies: + basic-auth: 2.0.1 + debug: 2.6.9 + depd: 2.0.0 + on-finished: 2.4.1 + on-headers: 1.1.0 + transitivePeerDependencies: + - supports-color + mrmime@2.0.1: {} ms@2.0.0: {} ms@2.1.3: {} + msgpackr-extract@3.0.4: + dependencies: + node-gyp-build-optional-packages: 5.2.2 + optionalDependencies: + '@msgpackr-extract/msgpackr-extract-darwin-arm64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-darwin-x64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-linux-arm': 3.0.4 + '@msgpackr-extract/msgpackr-extract-linux-arm64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-linux-x64': 3.0.4 + '@msgpackr-extract/msgpackr-extract-win32-x64': 3.0.4 + optional: true + + msgpackr@1.12.1: + optionalDependencies: + msgpackr-extract: 3.0.4 + multicast-dns@7.2.5: dependencies: dns-packet: 5.6.1 thunky: 1.1.0 + multipasta@0.2.8: {} + multistream@3.1.0: dependencies: inherits: 2.0.4 readable-stream: 3.6.2 + mute-stream@0.0.8: {} + nanoid@3.3.16: {} + napi-build-utils@2.0.0: + optional: true + napi-postinstall@0.3.4: {} natural-compare@1.4.0: {} @@ -16030,11 +18816,21 @@ snapshots: neo-async@2.6.2: {} + netmask@2.1.1: {} + no-case@3.0.4: dependencies: lower-case: 2.0.2 tslib: 2.8.1 + node-abi@3.94.0: + dependencies: + semver: 7.8.5 + optional: true + + node-addon-api@4.3.0: + optional: true + node-addon-api@7.1.1: optional: true @@ -16045,14 +18841,32 @@ snapshots: emojilib: 2.4.0 skin-tone: 2.0.0 + node-gyp-build-optional-packages@5.2.2: + dependencies: + detect-libc: 2.1.2 + optional: true + node-int64@0.4.0: {} node-releases@2.0.44: {} - node-releases@2.0.51: {} + node-releases@2.0.51: {} + + node-sarif-builder@3.4.0: + dependencies: + '@types/sarif': 2.1.7 + fs-extra: 11.4.0 + + normalize-package-data@6.0.2: + dependencies: + hosted-git-info: 7.0.2 + semver: 7.8.5 + validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} + normalize-url@6.1.0: {} + normalize-url@8.1.1: {} npm-run-path@4.0.1: @@ -16104,6 +18918,17 @@ snapshots: dependencies: mimic-fn: 2.1.0 + onetime@7.0.0: + dependencies: + mimic-function: 5.0.1 + + open@10.2.0: + dependencies: + default-browser: 5.5.0 + define-lazy-prop: 3.0.0 + is-inside-container: 1.0.0 + wsl-utils: 0.1.0 + open@11.0.0: dependencies: default-browser: 5.5.0 @@ -16113,6 +18938,11 @@ snapshots: powershell-utils: 0.1.0 wsl-utils: 0.3.1 + open@7.4.2: + dependencies: + is-docker: 2.2.1 + is-wsl: 2.2.0 + open@8.4.2: dependencies: define-lazy-prop: 2.0.0 @@ -16130,6 +18960,30 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.5 + ora@5.4.1: + dependencies: + bl: 4.1.0 + chalk: 4.1.2 + cli-cursor: 3.1.0 + cli-spinners: 2.9.2 + is-interactive: 1.0.0 + is-unicode-supported: 0.1.0 + log-symbols: 4.1.0 + strip-ansi: 6.0.1 + wcwidth: 1.0.1 + + ora@8.2.0: + dependencies: + chalk: 5.6.2 + cli-cursor: 5.0.0 + cli-spinners: 2.9.2 + is-interactive: 2.0.0 + is-unicode-supported: 2.1.0 + log-symbols: 6.0.0 + stdin-discarder: 0.2.2 + string-width: 7.2.0 + strip-ansi: 7.2.0 + oxc-parser@0.139.0: dependencies: '@oxc-project/types': 0.139.0 @@ -16155,6 +19009,8 @@ snapshots: '@oxc-parser/binding-win32-ia32-msvc': 0.139.0 '@oxc-parser/binding-win32-x64-msvc': 0.139.0 + p-cancelable@2.1.1: {} + p-cancelable@3.0.0: {} p-finally@1.0.0: {} @@ -16187,6 +19043,8 @@ snapshots: dependencies: aggregate-error: 3.1.0 + p-map@7.0.6: {} + p-queue@6.6.2: dependencies: eventemitter3: 4.0.7 @@ -16202,6 +19060,24 @@ snapshots: p-try@2.2.0: {} + pac-proxy-agent@7.2.0: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.4 + debug: 4.4.3 + get-uri: 6.0.5 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.1.1 + package-json-from-dist@1.0.1: {} package-json@8.1.1: @@ -16211,6 +19087,8 @@ snapshots: registry-url: 6.0.1 semver: 7.8.5 + pako@0.2.9: {} + pako@1.0.11: {} param-case@3.0.4: @@ -16239,8 +19117,18 @@ snapshots: json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 + parse-json@8.3.0: + dependencies: + '@babel/code-frame': 7.29.7 + index-to-position: 1.2.0 + type-fest: 4.41.0 + parse-numeric-range@1.3.0: {} + parse-semver@1.1.1: + dependencies: + semver: 5.7.2 + parse-svg-path@0.2.0: {} parse5-htmlparser2-tree-adapter@7.1.0: @@ -16272,6 +19160,8 @@ snapshots: path-exists@5.0.0: {} + path-expression-matcher@1.6.2: {} + path-is-absolute@1.0.1: {} path-is-inside@1.0.2: {} @@ -16285,6 +19175,11 @@ snapshots: lru-cache: 10.4.3 minipass: 7.1.3 + path-scurry@2.0.2: + dependencies: + lru-cache: 11.5.2 + minipass: 7.1.3 + path-to-regexp@1.9.0: dependencies: isarray: 0.0.1 @@ -16295,12 +19190,24 @@ snapshots: path-type@4.0.0: {} + path-type@6.0.0: {} + + peek-stream@1.1.3: + dependencies: + buffer-from: 1.1.2 + duplexify: 3.7.1 + through2: 2.0.5 + + pend@1.2.0: {} + picocolors@1.1.1: {} picomatch@4.0.4: {} picomatch@4.0.5: {} + pify@4.0.1: {} + pino-abstract-transport@1.2.0: dependencies: readable-stream: 4.7.0 @@ -16375,6 +19282,20 @@ snapshots: pvutils: 1.1.5 tslib: 2.8.1 + playwright-core@1.62.1: {} + + playwright@1.62.1: + dependencies: + playwright-core: 1.62.1 + optionalDependencies: + fsevents: 2.3.2 + + pluralize@2.0.0: {} + + pluralize@8.0.0: {} + + possible-typed-array-names@1.1.0: {} + postcss-attribute-case-insensitive@7.0.1(postcss@8.5.25): dependencies: postcss: 8.5.25 @@ -16818,6 +19739,22 @@ snapshots: powershell-utils@0.1.0: {} + prebuild-install@7.1.3: + dependencies: + detect-libc: 2.1.2 + expand-template: 2.0.3 + github-from-package: 0.0.0 + minimist: 1.2.8 + mkdirp-classic: 0.5.3 + napi-build-utils: 2.0.0 + node-abi: 3.94.0 + pump: 3.0.4 + rc: 1.2.8 + simple-get: 4.0.1 + tar-fs: 2.1.5 + tunnel-agent: 0.6.0 + optional: true + prelude-ls@1.2.1: {} prettier@3.9.6: {} @@ -16878,17 +19815,49 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + proxy-agent-negotiate@1.1.0: {} + + proxy-agent@6.5.0: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.2.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + + pump@2.0.1: + dependencies: + end-of-stream: 1.4.5 + once: 1.4.0 + pump@3.0.4: dependencies: end-of-stream: 1.4.5 once: 1.4.0 + pumpify@1.5.1: + dependencies: + duplexify: 3.7.1 + inherits: 2.0.4 + pump: 2.0.1 + + punycode.js@2.3.1: {} + punycode@2.3.1: {} pupa@3.3.0: dependencies: escape-goat: 4.0.0 + pure-rand@6.1.0: {} + pure-rand@7.0.1: {} pvtsutils@1.3.6: @@ -16919,6 +19888,15 @@ snapshots: iconv-lite: 0.7.3 unpipe: 1.0.0 + rc-config-loader@4.1.4: + dependencies: + debug: 4.4.3 + js-yaml: 4.3.0 + json5: 2.2.3 + require-from-string: 2.0.2 + transitivePeerDependencies: + - supports-color + rc@1.2.8: dependencies: deep-extend: 0.6.0 @@ -16981,6 +19959,18 @@ snapshots: react@19.2.8: {} + read-pkg@9.0.1: + dependencies: + '@types/normalize-package-data': 2.4.4 + normalize-package-data: 6.0.2 + parse-json: 8.3.0 + type-fest: 4.41.0 + unicorn-magic: 0.1.0 + + read@1.0.7: + dependencies: + mute-stream: 0.0.8 + readable-stream@2.3.8: dependencies: core-util-is: 1.0.3 @@ -17180,6 +20170,11 @@ snapshots: resolve-from@5.0.0: {} + resolve-path@1.4.0: + dependencies: + http-errors: 1.6.3 + path-is-absolute: 1.0.1 + resolve-pathname@3.0.0: {} resolve-pkg-maps@1.0.0: {} @@ -17191,10 +20186,24 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 + responselike@2.0.1: + dependencies: + lowercase-keys: 2.0.0 + responselike@3.0.0: dependencies: lowercase-keys: 3.0.0 + restore-cursor@3.1.0: + dependencies: + onetime: 5.1.2 + signal-exit: 3.0.7 + + restore-cursor@5.1.0: + dependencies: + onetime: 7.0.0 + signal-exit: 4.1.0 + retry@0.12.0: {} reusify@1.1.0: {} @@ -17300,6 +20309,8 @@ snapshots: run-applescript@7.1.0: {} + run-async@2.4.1: {} + run-parallel@1.2.0: dependencies: queue-microtask: 1.2.3 @@ -17349,6 +20360,18 @@ snapshots: search-insights@2.17.3: {} + secretlint@10.2.2: + dependencies: + '@secretlint/config-creator': 10.2.2 + '@secretlint/formatter': 10.2.2 + '@secretlint/node': 10.2.2 + '@secretlint/profiler': 10.2.2 + debug: 4.4.3 + globby: 14.1.0 + read-pkg: 9.0.1 + transitivePeerDependencies: + - supports-color + section-matter@1.0.0: dependencies: extend-shallow: 2.0.1 @@ -17365,9 +20388,9 @@ snapshots: dependencies: semver: 7.8.5 - semver@6.3.1: {} + semver@5.7.2: {} - semver@7.8.1: {} + semver@6.3.1: {} semver@7.8.5: {} @@ -17439,8 +20462,16 @@ snapshots: setimmediate@1.0.5: {} + setprototypeof@1.1.0: {} + setprototypeof@1.2.0: {} + sha.js@2.4.12: + dependencies: + inherits: 2.0.4 + safe-buffer: 5.2.1 + to-buffer: 1.2.2 + shallow-clone@3.0.1: dependencies: kind-of: 6.0.3 @@ -17489,6 +20520,14 @@ snapshots: signal-exit@4.1.0: {} + simple-concat@1.0.1: {} + + simple-get@4.0.1: + dependencies: + decompress-response: 6.0.0 + once: 1.4.0 + simple-concat: 1.0.1 + sirv@2.0.4: dependencies: '@polka/url': 1.0.0-next.29 @@ -17512,11 +20551,34 @@ snapshots: slash@4.0.0: {} + slash@5.1.0: {} + + slice-ansi@4.0.0: + dependencies: + ansi-styles: 4.3.0 + astral-regex: 2.0.0 + is-fullwidth-code-point: 3.0.0 + + smart-buffer@4.2.0: {} + snake-case@3.0.4: dependencies: dot-case: 3.0.4 tslib: 2.8.1 + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.4 + debug: 4.4.3 + socks: 2.8.9 + transitivePeerDependencies: + - supports-color + + socks@2.8.9: + dependencies: + ip-address: 10.5.0 + smart-buffer: 4.2.0 + sonic-boom@4.2.1: dependencies: atomic-sleep: 1.0.0 @@ -17541,6 +20603,20 @@ snapshots: space-separated-tokens@2.0.2: {} + spdx-correct@3.2.0: + dependencies: + spdx-expression-parse: 3.0.1 + spdx-license-ids: 3.0.23 + + spdx-exceptions@2.5.0: {} + + spdx-expression-parse@3.0.1: + dependencies: + spdx-exceptions: 2.5.0 + spdx-license-ids: 3.0.23 + + spdx-license-ids@3.0.23: {} + split2@4.2.0: {} sprintf-js@1.0.3: {} @@ -17557,6 +20633,19 @@ snapshots: std-env@3.10.0: {} + stdin-discarder@0.2.2: {} + + stream-shift@1.0.3: {} + + streamx@2.28.0: + dependencies: + events-universal: 1.0.1 + fast-fifo: 1.3.2 + text-decoder: 1.2.7 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + string-argv@0.3.2: {} string-length@4.0.2: @@ -17619,6 +20708,14 @@ snapshots: strip-json-comments@3.1.1: {} + strnum@2.4.2: + dependencies: + anynum: 1.0.1 + + structured-source@4.0.0: + dependencies: + boundary: 2.0.0 + style-to-js@1.1.21: dependencies: style-to-object: 1.0.14 @@ -17643,6 +20740,11 @@ snapshots: dependencies: has-flag: 4.0.0 + supports-hyperlinks@3.2.0: + dependencies: + has-flag: 4.0.0 + supports-color: 7.2.0 + supports-preserve-symlinks-flag@1.0.0: {} svg-parser@2.0.4: {} @@ -17669,10 +20771,70 @@ snapshots: dependencies: '@pkgr/core': 0.3.6 + table@6.9.0: + dependencies: + ajv: 8.20.0 + lodash.truncate: 4.4.2 + slice-ansi: 4.0.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + tabulator-tables@6.5.2: {} tapable@2.3.3: {} + tar-fs@2.1.5: + dependencies: + chownr: 1.1.4 + mkdirp-classic: 0.5.3 + pump: 3.0.4 + tar-stream: 2.2.0 + optional: true + + tar-fs@3.1.3: + dependencies: + pump: 3.0.4 + tar-stream: 3.2.0 + optionalDependencies: + bare-fs: 4.8.0 + bare-path: 3.1.1 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + + tar-stream@2.2.0: + dependencies: + bl: 4.1.0 + end-of-stream: 1.4.5 + fs-constants: 1.0.0 + inherits: 2.0.4 + readable-stream: 3.6.2 + optional: true + + tar-stream@3.2.0: + dependencies: + b4a: 1.8.1 + bare-fs: 4.8.0 + fast-fifo: 1.3.2 + streamx: 2.28.0 + transitivePeerDependencies: + - bare-abort-controller + - bare-buffer + - react-native-b4a + + teex@1.0.1: + dependencies: + streamx: 2.28.0 + transitivePeerDependencies: + - bare-abort-controller + - react-native-b4a + + terminal-link@4.0.0: + dependencies: + ansi-escapes: 7.3.0 + supports-hyperlinks: 3.2.0 + terser-webpack-plugin@5.6.1(@swc/core@1.15.47(@swc/helpers@0.5.23))(clean-css@5.3.3)(cssnano@6.1.2(postcss@8.5.25))(html-minifier-terser@7.2.0)(postcss@8.5.25)(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(postcss@8.5.25)): dependencies: '@jridgewell/trace-mapping': 0.3.31 @@ -17707,9 +20869,17 @@ snapshots: glob: 7.2.3 minimatch: 3.1.5 - thingies@2.5.0(tslib@2.8.1): + text-decoder@1.2.7: dependencies: - tslib: 2.8.1 + b4a: 1.8.1 + transitivePeerDependencies: + - react-native-b4a + + text-table@0.2.0: {} + + textextensions@6.11.0: + dependencies: + editions: 6.22.0 thingies@2.6.1(tslib@2.8.1): dependencies: @@ -17719,6 +20889,13 @@ snapshots: dependencies: real-require: 0.2.0 + through2@2.0.5: + dependencies: + readable-stream: 2.3.8 + xtend: 4.0.2 + + through@2.3.8: {} + thunky@1.1.0: {} tiny-invariant@1.3.3: {} @@ -17748,8 +20925,16 @@ snapshots: dependencies: tldts-core: 7.4.3 + tmp@0.2.7: {} + tmpl@1.0.5: {} + to-buffer@1.2.2: + dependencies: + isarray: 2.0.5 + safe-buffer: 5.2.1 + typed-array-buffer: 1.0.3 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -17790,6 +20975,14 @@ snapshots: tslib@2.8.1: {} + tsscmp@1.0.6: {} + + tsx@4.23.12: + dependencies: + esbuild: 0.28.2 + optionalDependencies: + fsevents: 2.3.3 + tsyringe@4.10.0: dependencies: tslib: 1.14.1 @@ -17798,6 +20991,8 @@ snapshots: dependencies: safe-buffer: 5.2.1 + tunnel@0.0.6: {} + type-check@0.4.0: dependencies: prelude-ls: 1.2.1 @@ -17810,12 +21005,26 @@ snapshots: type-fest@2.19.0: {} + type-fest@4.41.0: {} + type-is@2.1.0: dependencies: content-type: 2.0.0 media-typer: 1.1.1 mime-types: 3.0.2 + typed-array-buffer@1.0.3: + dependencies: + call-bound: 1.0.4 + es-errors: 1.3.0 + is-typed-array: 1.1.15 + + typed-rest-client@1.8.11: + dependencies: + qs: 6.15.3 + tunnel: 0.0.6 + underscore: 1.13.8 + typedarray-to-buffer@3.1.5: dependencies: is-typedarray: 1.0.0 @@ -17856,6 +21065,10 @@ snapshots: '@typescript/typescript-win32-arm64': 7.0.2 '@typescript/typescript-win32-x64': 7.0.2 + uc.micro@2.1.0: {} + + underscore@1.13.8: {} + undici-types@6.21.0: {} undici@8.9.0: {} @@ -17873,6 +21086,10 @@ snapshots: unicode-property-aliases-ecmascript@2.2.0: {} + unicorn-magic@0.1.0: {} + + unicorn-magic@0.3.0: {} + unified@11.0.5: dependencies: '@types/unist': 3.0.3 @@ -17988,6 +21205,8 @@ snapshots: dependencies: punycode: 2.3.1 + url-join@4.0.1: {} + url-loader@4.1.1(file-loader@6.2.0(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(postcss@8.5.25)))(webpack@5.109.2(@swc/core@1.15.47(@swc/helpers@0.5.23))(postcss@8.5.25)): dependencies: loader-utils: 2.0.4 @@ -18009,10 +21228,17 @@ snapshots: '@types/istanbul-lib-coverage': 2.0.6 convert-source-map: 2.0.0 + validate-npm-package-license@3.0.4: + dependencies: + spdx-correct: 3.2.0 + spdx-expression-parse: 3.0.1 + value-equal@1.0.1: {} vary@1.1.2: {} + version-range@4.15.0: {} + vfile-location@5.0.3: dependencies: '@types/unist': 3.0.3 @@ -18028,6 +21254,8 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.3 + vscode-uri@3.1.0: {} + w3c-xmlserializer@5.0.0: dependencies: xml-name-validator: 5.0.0 @@ -18040,6 +21268,10 @@ snapshots: dependencies: graceful-fs: 4.2.11 + wcwidth@1.0.1: + dependencies: + defaults: 1.0.4 + web-namespaces@2.0.1: {} webidl-conversions@7.0.0: {} @@ -18259,6 +21491,16 @@ snapshots: tr46: 5.1.1 webidl-conversions: 7.0.0 + which-typed-array@1.1.22: + dependencies: + available-typed-arrays: 1.0.7 + call-bind: 1.0.9 + call-bound: 1.0.4 + for-each: 0.3.5 + get-proto: 1.0.1 + gopd: 1.2.0 + has-tostringtag: 1.0.2 + which@2.0.2: dependencies: isexe: 2.0.0 @@ -18271,6 +21513,12 @@ snapshots: word-wrap@1.2.5: {} + wrap-ansi@6.2.0: + dependencies: + ansi-styles: 4.3.0 + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi@7.0.0: dependencies: ansi-styles: 4.3.0 @@ -18309,6 +21557,10 @@ snapshots: ws@8.21.1: {} + wsl-utils@0.1.0: + dependencies: + is-wsl: 3.1.1 + wsl-utils@0.3.1: dependencies: is-wsl: 3.1.1 @@ -18322,6 +21574,13 @@ snapshots: xml-name-validator@5.0.0: {} + xml-naming@0.3.0: {} + + xml2js@0.5.0: + dependencies: + sax: 1.6.1 + xmlbuilder: 11.0.1 + xml2js@0.6.2: dependencies: sax: 1.6.1 @@ -18333,12 +21592,15 @@ snapshots: xmlcreate@2.0.4: {} + xtend@4.0.2: {} + y18n@5.0.8: {} yallist@3.1.1: {} - yaml@2.9.0: - optional: true + yallist@4.0.0: {} + + yaml@2.9.0: {} yargs-parser@21.1.1: {} @@ -18363,6 +21625,14 @@ snapshots: y18n: 5.0.8 yargs-parser: 22.0.0 + yauzl@3.4.0: + dependencies: + pend: 1.2.0 + + yazl@2.5.1: + dependencies: + buffer-crc32: 0.2.13 + yocto-queue@0.1.0: {} yocto-queue@1.2.2: {} diff --git a/rolldown.config.ts b/rolldown.config.ts index 9e8b916f0..14db24c25 100644 --- a/rolldown.config.ts +++ b/rolldown.config.ts @@ -35,6 +35,22 @@ export default defineConfig([ external: ['vscode'], }, + { + input: { Main: './lana/src/Main.web.ts' }, + output: { + format: 'cjs', + dir: './lana/out/web', + entryFileNames: 'Main.web.js', + chunkFileNames: 'lana-[name].js', + sourcemap: false, + keepNames: true, + minify: production, + }, + tsconfig: production ? './lana/tsconfig.json' : './lana/tsconfig-dev.json', + platform: 'browser', + external: ['vscode'], + plugins: [nodePolyfills()], + }, { input: { bundle: './log-viewer/src/Main.ts' }, output: [ diff --git a/rollup.config.mjs b/rollup.config.mjs index 76e8c4e82..dc26d282e 100644 --- a/rollup.config.mjs +++ b/rollup.config.mjs @@ -59,32 +59,36 @@ export default [ }), ), // Copy runtime dependency files for salesforce bundle compatibility - copy({ - targets: [ - // Pino worker files (thread-stream requires these at runtime) - { - src: 'node_modules/.pnpm/thread-stream@*/node_modules/thread-stream/lib/worker.js', - dest: 'lana/out', - rename: 'thread-stream-worker.js', - }, - { - src: 'node_modules/.pnpm/pino@*/node_modules/pino/lib/worker.js', - dest: 'lana/out', - rename: 'pino-worker.js', - }, - { - src: 'node_modules/.pnpm/pino@*/node_modules/pino/file.js', - dest: 'lana/out', - rename: 'pino-file.js', - }, - // @salesforce/core logger transform stream (pino transport pipeline) - { - src: 'node_modules/.pnpm/@salesforce+core@*/node_modules/@salesforce/core/lib/logger/transformStream.js', - dest: 'lana/out', - rename: 'salesforce-transform-stream.js', + ], + }, + { + input: './lana/src/Main.web.ts', + output: { + format: 'cjs', + dir: './lana/out/web', + entryFileNames: 'Main.web.js', + chunkFileNames: 'lana-[name].js', + sourcemap: false, + }, + external: ['vscode'], + plugins: [ + nodeResolve({ browser: true, preferBuiltins: false }), + commonjs(), + json(), + nodePolyfills(), + swc( + defineRollupSwcOption({ + include: /\.[mc]?[jt]sx?$/, + exclude: /node_modules/, + tsconfig: production ? './lana/tsconfig.json' : './lana/tsconfig-dev.json', + jsc: { + minify: { + compress: production ? { keep_classnames: true, keep_fnames: true } : false, + mangle: production ? { keep_classnames: true } : false, + }, }, - ], - }), + }), + ), ], }, { diff --git a/tsconfig.json b/tsconfig.json index 32be5fba7..9003ae994 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,4 +1,9 @@ { "files": [], - "references": [{ "path": "./apex-log-parser" }, { "path": "./log-viewer" }, { "path": "./lana" }] + "references": [ + { "path": "./apex-log-parser" }, + { "path": "./log-viewer" }, + { "path": "./lana" }, + { "path": "./lana/test/playwright" } + ] }